[PATCH] Make builtin-branch.c use parse_options.

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

 



Signed-off-by: Pierre Habouzit <madcoder@xxxxxxxxxx>
---
 builtin-branch.c |  151 ++++++++++++++++++++---------------------------------
 1 files changed, 57 insertions(+), 94 deletions(-)

diff --git a/builtin-branch.c b/builtin-branch.c
index 3da8b55..3ca225e 100644
--- a/builtin-branch.c
+++ b/builtin-branch.c
@@ -11,9 +11,16 @@
 #include "commit.h"
 #include "builtin.h"
 #include "remote.h"
-
-static const char builtin_branch_usage[] =
-  "git-branch [-r] (-d | -D) <branchname> | [--track | --no-track] [-l] [-f] <branchname> [<start-point>] | (-m | -M) [<oldbranch>] <newbranch> | [--color | --no-color] [-r | -a] [-v [--abbrev=<length> | --no-abbrev]]";
+#include "parse-options.h"
+
+static const char * const builtin_branch_usage[] = {
+	"",
+	"git-branch [options] [-r | -a]",
+	"git-branch [options] [-l] [-f] <branchname> [<start-point>]",
+	"git-branch [options] [-r] (-d | -D) <branchname>",
+	"git-branch [options] (-m | -M) [<oldbranch>] <newbranch>",
+	NULL
+};
 
 #define REF_UNKNOWN_TYPE    0x00
 #define REF_LOCAL_BRANCH    0x01
@@ -505,93 +512,49 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
 	int rename = 0, force_rename = 0;
 	int verbose = 0, abbrev = DEFAULT_ABBREV, detached = 0;
 	int reflog = 0, track;
-	int kinds = REF_LOCAL_BRANCH;
-	int i;
+	int kinds = REF_LOCAL_BRANCH, kind_remote = 0, kind_local = 0;
+	int count;
+
+	struct option builtin_branch_options[] = {
+		OPT_GROUP("Generic options"),
+		OPT_BOOLEAN('v', NULL,     &verbose, "be verbose"),
+		OPT_BOOLEAN( 0 , "track",  &track, "set up tracking mode (see git-pull(1))"),
+		OPT_BOOLEAN( 0 , "color",  &branch_use_color, "use colored output"),
+		OPT_BOOLEAN('r', NULL,     &kind_remote, "act on remote-tracking branches"),
+		OPT_INTEGER( 0 , "abbrev", &abbrev, "minimum display length for sha1"),
+
+		OPT_GROUP("Specific git-branch actions:"),
+		OPT_BOOLEAN('a', NULL,     &kind_local, "list both remote-tracking and local branches"),
+		OPT_BOOLEAN('d', NULL,     &delete, "delete fully merged branch"),
+		OPT_BOOLEAN('D', NULL,     &force_delete, "delete branch (even if not merged)"),
+		OPT_BOOLEAN('l', NULL,     &reflog, "create the branch's reflog"),
+		OPT_BOOLEAN('f', NULL,     &force_create, "force creation (when already exists)"),
+		OPT_BOOLEAN('m', NULL,     &rename, "move/rename a branch and its reflog"),
+		OPT_BOOLEAN('M', NULL,     &force_rename, "move/rename a branch, even if target exists"),
+	};
 
 	git_config(git_branch_config);
 	track = branch_track;
 
-	for (i = 1; i < argc; i++) {
-		const char *arg = argv[i];
-
-		if (arg[0] != '-')
-			break;
-		if (!strcmp(arg, "--")) {
-			i++;
-			break;
-		}
-		if (!strcmp(arg, "--track")) {
-			track = 1;
-			continue;
-		}
-		if (!strcmp(arg, "--no-track")) {
-			track = 0;
-			continue;
-		}
-		if (!strcmp(arg, "-d")) {
-			delete = 1;
-			continue;
-		}
-		if (!strcmp(arg, "-D")) {
-			delete = 1;
-			force_delete = 1;
-			continue;
-		}
-		if (!strcmp(arg, "-f")) {
-			force_create = 1;
-			continue;
-		}
-		if (!strcmp(arg, "-m")) {
-			rename = 1;
-			continue;
-		}
-		if (!strcmp(arg, "-M")) {
-			rename = 1;
-			force_rename = 1;
-			continue;
-		}
-		if (!strcmp(arg, "-r")) {
-			kinds = REF_REMOTE_BRANCH;
-			continue;
-		}
-		if (!strcmp(arg, "-a")) {
-			kinds = REF_REMOTE_BRANCH | REF_LOCAL_BRANCH;
-			continue;
-		}
-		if (!strcmp(arg, "-l")) {
-			reflog = 1;
-			continue;
-		}
-		if (!prefixcmp(arg, "--no-abbrev")) {
-			abbrev = 0;
-			continue;
-		}
-		if (!prefixcmp(arg, "--abbrev=")) {
-			abbrev = strtoul(arg + 9, NULL, 10);
-			if (abbrev < MINIMUM_ABBREV)
-				abbrev = MINIMUM_ABBREV;
-			else if (abbrev > 40)
-				abbrev = 40;
-			continue;
-		}
-		if (!strcmp(arg, "-v")) {
-			verbose = 1;
-			continue;
-		}
-		if (!strcmp(arg, "--color")) {
-			branch_use_color = 1;
-			continue;
-		}
-		if (!strcmp(arg, "--no-color")) {
-			branch_use_color = 0;
-			continue;
-		}
-		usage(builtin_branch_usage);
-	}
+	count = parse_options(argc, argv, builtin_branch_options,
+	                      ARRAY_SIZE(builtin_branch_options),
+	                      builtin_branch_usage, 0);
+
+	delete |= force_delete;
+	rename |= force_rename;
+	if (kind_remote || kind_local)
+		kinds |= REF_REMOTE_BRANCH;
+	if (kind_local)
+		kinds |= REF_LOCAL_BRANCH;
+	if (abbrev && abbrev < MINIMUM_ABBREV)
+		abbrev = MINIMUM_ABBREV;
+	else if (abbrev > 40)
+		abbrev = 40;
 
 	if ((delete && rename) || (delete && force_create) ||
 	    (rename && force_create))
-		usage(builtin_branch_usage);
+		make_usage(builtin_branch_usage, builtin_branch_options,
+				   ARRAY_SIZE(builtin_branch_options));
 
 	head = resolve_ref("HEAD", head_sha1, 0, NULL);
 	if (!head)
@@ -599,26 +562,26 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
 	head = xstrdup(head);
 	if (!strcmp(head, "HEAD")) {
 		detached = 1;
-	}
-	else {
+	} else {
 		if (prefixcmp(head, "refs/heads/"))
 			die("HEAD not found below refs/heads!");
 		head += 11;
 	}
 
 	if (delete)
-		return delete_branches(argc - i, argv + i, force_delete, kinds);
-	else if (i == argc)
+		return delete_branches(count, argv, force_delete, kinds);
+	else if (count == 0)
 		print_ref_list(kinds, detached, verbose, abbrev);
-	else if (rename && (i == argc - 1))
-		rename_branch(head, argv[i], force_rename);
-	else if (rename && (i == argc - 2))
-		rename_branch(argv[i], argv[i + 1], force_rename);
-	else if (i == argc - 1 || i == argc - 2)
-		create_branch(argv[i], (i == argc - 2) ? argv[i+1] : head,
+	else if (rename && (count == 1))
+		rename_branch(head, argv[0], force_rename);
+	else if (rename && (count == 2))
+		rename_branch(argv[0], argv[1], force_rename);
+	else if (count <= 2)
+		create_branch(argv[0], (count == 2) ? argv[1] : head,
 			      force_create, reflog, track);
 	else
-		usage(builtin_branch_usage);
+		make_usage(builtin_branch_usage, builtin_branch_options,
+				   ARRAY_SIZE(builtin_branch_options));
 
 	return 0;
 }
-- 
1.5.3.GIT

-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[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