From: "Sean" <seanlkml@sympatico.ca>
To: "Jeff Garzik" <jgarzik@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [RFC] git-fsck-cache argument processing
Date: Sat, 21 May 2005 00:36:15 -0400 (EDT) [thread overview]
Message-ID: <4966.10.10.10.24.1116650175.squirrel@linux1> (raw)
In-Reply-To: <428EB444.7010200@pobox.com>
[-- Attachment #1: Type: text/plain, Size: 839 bytes --]
On Sat, May 21, 2005 12:08 am, Jeff Garzik said:
> Pretty good. You'll probably want some additional changes:
>
> 1) eliminate
> + case ARGP_KEY_ARG: state->next = state->argc; break;
>
> This will cause option processing to stop at the first unknown argument.
>
> 2) Pass-by-reference a variable to argp_parse(), which will store the
> index of the argument where processing stopped. This is the first
> hash/file/etc. non-option argument.
>
Thanks Jeff, that's pretty cool. Here's an updated patch.
With this updated patch, options following or even intermingled with the
SHA1 list also are picked up, for example:
$ git-fsck-cache 804c64ea864d0a8ee13f3de0b74158a3e9c3166d -crudt
fsck-cache.c | 66
+++++++++++++++++++++++++++++++++++------------------------
1 files changed, 40 insertions(+), 26 deletions(-)
Sean
[-- Attachment #2: fsck-cache-argp-v2.patch --]
[-- Type: application/octet-stream, Size: 2565 bytes --]
fsck-cache.c: needs update
Index: fsck-cache.c
===================================================================
--- 58741c69570705801db4b785681790d636475695/fsck-cache.c (mode:100644)
+++ uncommitted/fsck-cache.c (mode:100644)
@@ -1,5 +1,7 @@
#include <sys/types.h>
#include <dirent.h>
+#include <argp.h>
+const char *argp_program_version = "git 1.0";
#include "cache.h"
#include "commit.h"
@@ -407,36 +409,48 @@
find_file_objects(git_dir, "refs");
}
+#define O_UNREACH 'u'
+#define O_TAGS 't'
+#define O_ROOT 'r'
+#define O_DELTA 'd'
+#define O_CACHE 'c'
+
+static const char doc[] = "Perform repository consistency check";
+
+static struct argp_option options[] = {
+ {"unreachable", O_UNREACH, 0, 0, "Show missing objects or deltas"},
+ {"tags", O_TAGS, 0, 0, "Show revision tags"},
+ {"root", O_ROOT, 0, 0, "Show root objects, ie. those without parents"},
+ {"delta-depth", O_DELTA, 0, 0, "Show the maximum length of delta chains"},
+ {"cache", O_CACHE, 0, 0, "Mark all objects referenced by cache as reachable"},
+ { }
+};
+
+static error_t parse_opt (int key, char *arg, struct argp_state *state)
+{
+ switch (key) {
+ case O_UNREACH: show_unreachable = 1; break;
+ case O_TAGS: show_tags = 1; break;
+ case O_ROOT: show_root = 1; break;
+ case O_DELTA: show_max_delta_depth = 1; break;
+ case O_CACHE: keep_cache_objects = 1; break;
+ default: return ARGP_ERR_UNKNOWN;
+ }
+ return 0;
+}
+
+static const struct argp argp = { options, parse_opt, "[HEAD-SHA1...]", doc };
+
int main(int argc, char **argv)
{
int i, heads;
char *sha1_dir;
+ int idx;
- for (i = 1; i < argc; i++) {
- const char *arg = argv[i];
-
- if (!strcmp(arg, "--unreachable")) {
- show_unreachable = 1;
- continue;
- }
- if (!strcmp(arg, "--tags")) {
- show_tags = 1;
- continue;
- }
- if (!strcmp(arg, "--root")) {
- show_root = 1;
- continue;
- }
- if (!strcmp(arg, "--delta-depth")) {
- show_max_delta_depth = 1;
- continue;
- }
- if (!strcmp(arg, "--cache")) {
- keep_cache_objects = 1;
- continue;
- }
- if (*arg == '-')
- usage("git-fsck-cache [--tags] [[--unreachable] [--cache] <head-sha1>*]");
+ error_t rc = argp_parse(&argp, argc, argv, 0, &idx, NULL);
+ if (rc) {
+ fprintf(stderr, "argument failed: %s\n", strerror(rc));
+ return 1;
}
sha1_dir = get_object_directory();
@@ -450,7 +464,7 @@
expand_deltas();
heads = 0;
- for (i = 1; i < argc; i++) {
+ for (i = idx; i < argc; i++) {
const char *arg = argv[i];
if (*arg == '-')
next prev parent reply other threads:[~2005-05-21 4:35 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-21 3:38 [RFC] git-fsck-cache argument processing Sean
2005-05-21 4:08 ` Jeff Garzik
2005-05-21 4:36 ` Sean [this message]
2005-05-21 5:09 ` Jeff Garzik
2005-05-21 5:08 ` Junio C Hamano
2005-05-21 5:15 ` Jeff Garzik
2005-05-21 5:59 ` Junio C Hamano
2005-05-21 15:09 ` Olivier Galibert
2005-05-21 15:35 ` Jeff Garzik
2005-05-21 17:22 ` Sean
2005-05-21 18:49 ` Olivier Galibert
2005-05-21 19:00 ` Sean
2005-05-21 23:53 ` Jeff Garzik
2005-05-21 22:14 ` Joel Becker
2005-05-21 19:47 ` Linus Torvalds
2005-05-21 20:46 ` Sean
2005-05-21 21:09 ` Sean
2005-05-21 19:49 ` Linus Torvalds
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4966.10.10.10.24.1116650175.squirrel@linux1 \
--to=seanlkml@sympatico.ca \
--cc=git@vger.kernel.org \
--cc=jgarzik@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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 NNTP newsgroup(s).