diff options
Diffstat (limited to 'verify-pack.c')
-rw-r--r-- | verify-pack.c | 51 |
1 files changed, 41 insertions, 10 deletions
diff --git a/verify-pack.c b/verify-pack.c index 3ae5ac1b4f..30c40feebd 100644 --- a/verify-pack.c +++ b/verify-pack.c @@ -1,25 +1,56 @@ #include "cache.h" #include "pack.h" -static int verify_one_pack(char *arg) +static int verify_one_pack(char *arg, int verbose) { - struct packed_git *g = add_packed_git(arg, strlen(arg)); - if (!g) - return -1; - return verify_pack(g); + int len = strlen(arg); + struct packed_git *g; + + while (1) { + /* Should name foo.idx, but foo.pack may be named; + * convert it to foo.idx + */ + if (!strcmp(arg + len - 5, ".pack")) { + strcpy(arg + len - 5, ".idx"); + len--; + } + /* Should name foo.idx now */ + if ((g = add_packed_git(arg, len))) + break; + /* No? did you name just foo? */ + strcpy(arg + len, ".idx"); + len += 4; + if ((g = add_packed_git(arg, len))) + break; + return error("packfile %s not found.", arg); + } + return verify_pack(g, verbose); } +static const char *verify_pack_usage = "git-verify-pack [-v] <pack>..."; + int main(int ac, char **av) { int errs = 0; + int verbose = 0; + int no_more_options = 0; while (1 < ac) { char path[PATH_MAX]; - strcpy(path, av[1]); - if (verify_one_pack(path)) - errs++; - else - printf("%s: OK\n", av[1]); + + if (!no_more_options && av[1][0] == '-') { + if (!strcmp("-v", av[1])) + verbose = 1; + else if (!strcmp("--", av[1])) + no_more_options = 1; + else + usage(verify_pack_usage); + } + else { + strcpy(path, av[1]); + if (verify_one_pack(path, verbose)) + errs++; + } ac--; av++; } return !!errs; |