git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH] unpack-objects: migrate to parse-options
@ 2011-03-30  8:37 Stephen Boyd
  0 siblings, 0 replies; only message in thread
From: Stephen Boyd @ 2011-03-30  8:37 UTC (permalink / raw
  To: git; +Cc: Junio C Hamano

Signed-off-by: Stephen Boyd <bebarino@gmail.com>
---
 builtin/unpack-objects.c |   80 ++++++++++++++++++++++------------------------
 1 files changed, 38 insertions(+), 42 deletions(-)

diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c
index f63973c..183a967 100644
--- a/builtin/unpack-objects.c
+++ b/builtin/unpack-objects.c
@@ -11,9 +11,13 @@
 #include "progress.h"
 #include "decorate.h"
 #include "fsck.h"
+#include "parse-options.h"
 
 static int dry_run, quiet, recover, has_errors, strict;
-static const char unpack_usage[] = "git unpack-objects [-n] [-q] [-r] [--strict] < pack-file";
+static const char * const unpack_usage[] = {
+	"git unpack-objects [options] < pack-file",
+	NULL
+};
 
 /* We always read in 4kB chunks. */
 static unsigned char buffer[4096];
@@ -492,10 +496,38 @@ static void unpack_all(void)
 		die("unresolved deltas left after unpacking");
 }
 
+static int pack_header_cb(const struct option *opt, const char *arg, int unset)
+{
+	struct pack_header *hdr;
+	char *c;
+
+	hdr = (struct pack_header *)buffer;
+	hdr->hdr_signature = htonl(PACK_SIGNATURE);
+	hdr->hdr_version = htonl(strtoul(arg, &c, 10));
+	if (*c != ',')
+		die("bad %s", arg);
+	hdr->hdr_entries = htonl(strtoul(c + 1, &c, 10));
+	if (*c)
+		die("bad %s", arg);
+	len = sizeof(*hdr);
+	return 0;
+}
+
 int cmd_unpack_objects(int argc, const char **argv, const char *prefix)
 {
-	int i;
 	unsigned char sha1[20];
+	const struct option unpack_options[] = {
+		OPT__DRY_RUN(&dry_run,
+			    "check the pack file but don't actually unpack it"),
+		OPT__QUIET(&quiet, "suppress percentage progress"),
+		OPT_BOOLEAN('r', NULL, &recover, "ignore corrupt packfiles"),
+		OPT_BOOLEAN(0, "strict", &strict,
+			    "don't write objects with broken content or links"),
+		{ OPTION_CALLBACK, 0, "pack_header", NULL, "<ver>,<entries>",
+		  "internal option", PARSE_OPT_HIDDEN | PARSE_OPT_NONEG |
+		  PARSE_OPT_LITERAL_ARGHELP, pack_header_cb },
+		OPT_END()
+	};
 
 	read_replace_refs = 0;
 
@@ -503,47 +535,11 @@ int cmd_unpack_objects(int argc, const char **argv, const char *prefix)
 
 	quiet = !isatty(2);
 
-	for (i = 1 ; i < argc; i++) {
-		const char *arg = argv[i];
-
-		if (*arg == '-') {
-			if (!strcmp(arg, "-n")) {
-				dry_run = 1;
-				continue;
-			}
-			if (!strcmp(arg, "-q")) {
-				quiet = 1;
-				continue;
-			}
-			if (!strcmp(arg, "-r")) {
-				recover = 1;
-				continue;
-			}
-			if (!strcmp(arg, "--strict")) {
-				strict = 1;
-				continue;
-			}
-			if (!prefixcmp(arg, "--pack_header=")) {
-				struct pack_header *hdr;
-				char *c;
-
-				hdr = (struct pack_header *)buffer;
-				hdr->hdr_signature = htonl(PACK_SIGNATURE);
-				hdr->hdr_version = htonl(strtoul(arg + 14, &c, 10));
-				if (*c != ',')
-					die("bad %s", arg);
-				hdr->hdr_entries = htonl(strtoul(c + 1, &c, 10));
-				if (*c)
-					die("bad %s", arg);
-				len = sizeof(*hdr);
-				continue;
-			}
-			usage(unpack_usage);
-		}
-
+	argc = parse_options(argc, argv, prefix, unpack_options,
+			     unpack_usage, 0);
+	if (argc)
 		/* We don't take any non-flag arguments now.. Maybe some day */
-		usage(unpack_usage);
-	}
+		usage_with_options(unpack_usage, unpack_options);
 	git_SHA1_Init(&ctx);
 	unpack_all();
 	git_SHA1_Update(&ctx, buffer, offset);
-- 
1.7.4.2.422.g537d99

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2011-03-30  8:37 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-30  8:37 [PATCH] unpack-objects: migrate to parse-options Stephen Boyd

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).