path: root/verify-pack.c
diff options
authorJunio C Hamano <>2005-06-29 09:51:27 (GMT)
committerLinus Torvalds <>2005-06-29 16:11:39 (GMT)
commitf9253394a271a9fefdd234a86c228adeb6d0136a (patch)
treed01cae79c60a431d9747529bce855eb4d635e8d5 /verify-pack.c
parent3c84974207fb6a98eaa393cd4c3481d8ecdb8ce2 (diff)
[PATCH] Add git-verify-pack command.
Given a list of <pack>.idx files, this command validates the index file and the corresponding .pack file for consistency. This patch also uses the same validation mechanism in fsck-cache when the --full flag is used. During normal operation, sha1_file.c verifies that a given .idx file matches the .pack file by comparing the SHA1 checksum stored in .idx file and .pack file as a minimum sanity check. We may further want to check the pack signature and version when we map the pack, but that would be a separate patch. Earlier, errors to map a pack file was not flagged fatal but led to a random fatal error later. This version explicitly die()s when such an error is detected. Signed-off-by: Junio C Hamano <> Signed-off-by: Linus Torvalds <>
Diffstat (limited to 'verify-pack.c')
1 files changed, 26 insertions, 0 deletions
diff --git a/verify-pack.c b/verify-pack.c
new file mode 100644
index 0000000..3ae5ac1
--- /dev/null
+++ b/verify-pack.c
@@ -0,0 +1,26 @@
+#include "cache.h"
+#include "pack.h"
+static int verify_one_pack(char *arg)
+ struct packed_git *g = add_packed_git(arg, strlen(arg));
+ if (!g)
+ return -1;
+ return verify_pack(g);
+int main(int ac, char **av)
+ int errs = 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]);
+ ac--; av++;
+ }
+ return !!errs;