[PATCH v2 1/8] checkout: pass cb_option explicitly to branch name parsers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]




The file-scope static variable 'cb_option' is used to record whether
a new branch is being created via '-b' (in 'git checkout') or '-c'
(in 'git switch'), primarily for error reporting and advice messages
in parse_remote_branch().
Global mutable state makes the code harder to reason about and refactor.
Pass 'cb_option' explicitly as a parameter to parse_remote_branch()
and parse_branchname_arg(), removing the file-scope static variable.
Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx>
---
 builtin/checkout.c | 23 +++++++++--------------
 1 file changed, 9 insertions(+), 14 deletions(-)
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 55e3a89a85..774e4fd5b3 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -1346,7 +1346,7 @@ enum checkout_command {
 static char *parse_remote_branch(const char *arg,
 				 struct object_id *rev,
 				 int could_be_checkout_paths,
-				 enum checkout_command which_command)
+				 char cb_option)
 {
 	int num_matches = 0;
 	char *remote = unique_tracking_name(arg, rev, &num_matches);
@@ -1361,16 +1361,15 @@ static char *parse_remote_branch(const char *arg,
 	 if (advice_enabled(ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME)) {
 		 const char *cmdname;
 
-		 switch (which_command) {
-		 case CHECKOUT_CHECKOUT:
+		 switch (cb_option) {
+		 case 'b':
 			 cmdname = "checkout";
 			 break;
-		 case CHECKOUT_SWITCH:
+		 case 'c':
 			 cmdname = "switch";
 			 break;
 		 default:
-			 BUG("command <%d> should not reach parse_remote_branch",
-				which_command);
+			 BUG("unexpected cb_option '%c'", cb_option);
 			 break;
 		 }
 
@@ -1394,7 +1393,7 @@ static char *parse_remote_branch(const char *arg,
 
 static int parse_branchname_arg(int argc, const char **argv,
 				int dwim_new_local_branch_ok,
-				enum checkout_command which_command,
+				char cb_option,
 				struct branch_info *new_branch_info,
 				struct checkout_opts *opts,
 				struct object_id *rev)
@@ -1505,7 +1504,7 @@ static int parse_branchname_arg(int argc, const char **argv,
 		if (recover_with_dwim) {
 			remote = parse_remote_branch(arg, rev,
 						 could_be_checkout_paths,
-						 which_command);
+						 cb_option);
 			if (remote) {
 				*new_branch = arg;
 				arg = remote;
@@ -1832,9 +1831,6 @@ static struct option *add_checkout_path_options(struct checkout_opts *opts,
 	return newopts;
 }
 
-/* create-branch option (either b or c) */
-static char cb_option = 'b';
-
 static int checkout_main(int argc, const char **argv, const char *prefix,
 			 struct checkout_opts *opts, struct option *options,
 			 enum checkout_command which_command)
@@ -1842,6 +1838,7 @@ static int checkout_main(int argc, const char **argv, const char *prefix,
 	int parseopt_flags = 0;
 	struct branch_info new_branch_info = { 0 };
 	int ret;
+	char cb_option = (which_command == CHECKOUT_SWITCH) ? 'c' : 'b';
 
 	static const char * const checkout_usage[] = {
 		N_("git checkout [<options>] <branch>"),
@@ -1997,7 +1994,7 @@ static int checkout_main(int argc, const char **argv, const char *prefix,
 			opts->dwim_new_local_branch &&
 			opts->track == BRANCH_TRACK_UNSPECIFIED &&
 			!opts->new_branch;
-		int n = parse_branchname_arg(argc, argv, dwim_ok, which_command,
+		int n = parse_branchname_arg(argc, argv, dwim_ok, cb_option,
 					 &new_branch_info, opts, &rev);
 		argv += n;
 		argc -= n;
@@ -2174,8 +2171,6 @@ int cmd_switch(int argc,
 	options = add_common_options(&opts, options);
 	options = add_common_switch_branch_options(&opts, options);
 
-	cb_option = 'c';
-
 	return checkout_main(argc, argv, prefix, &opts, options,
 			 CHECKOUT_SWITCH);
 }
-- 
2.55.0-884-g76cf8659c2

[Index of Archives] [Linux Kernel Development] [Gcc Help] [IETF Annouce] [DCCP] [Netdev] [Networking] [Security] [V4L] [Bugtraq] [Yosemite] [MIPS Linux] [ARM Linux] [Linux Security] [Linux RAID] [Linux SCSI] [Fedora Users]

(追記) (追記ここまで)
Powered by Linux

AltStyle によって変換されたページ (->オリジナル) /