aboutsummaryrefslogtreecommitdiff
path: root/verify-pack.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-06-30 17:15:39 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-30 22:33:47 -0700
commitf3bf92240956241e6b21e80a1c281ec7716b9f23 (patch)
tree3989f667ea2bd7c7a7d0f66c55437844ee99c630 /verify-pack.c
parentc62266f37c677c1de7415ac6cf1e2eb6726590e1 (diff)
downloadgit-f3bf92240956241e6b21e80a1c281ec7716b9f23.tar.gz
git-f3bf92240956241e6b21e80a1c281ec7716b9f23.tar.xz
[PATCH] verify-pack updates.
Nico pointed out that having verify_pack.c and verify-pack.c was confusing. Rename verify_pack.c to pack-check.c as suggested, and enhances the verification done quite a bit. - Built-in sha1_file unpacking knows that a base object of a deltified object _must_ be in the same pack, and takes advantage of that fact. - Earlier verify-pack command only checked the SHA1 sum for the entire pack file and did not look into its contents. It now checks everything idx file claims to have unpacks correctly. - It now has a hook to give more detailed information for objects contained in the pack under -v flag. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
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 3ae5ac1b4..30c40feeb 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;