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 #include +#include +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] *]"); + 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 == '-')