[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 <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Junio C Hamano
2005-06-29 02:51:27 -07:00
committed by Linus Torvalds
parent 3c84974207
commit f9253394a2
10 changed files with 231 additions and 18 deletions

26
verify-pack.c Normal file
View File

@ -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;
}