summaryrefslogtreecommitdiff
path: root/verify-pack.c
diff options
context:
space:
mode:
Diffstat (limited to 'verify-pack.c')
-rw-r--r--verify-pack.c51
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;