From: Nicolas Pitre Date: Fri, 22 Aug 2008 19:45:53 +0000 (-0400) Subject: discard revindex data when pack list changes X-Git-Tag: v1.6.0.2~43^2 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=4b480c6716a7d8e20e7e510827ea81e7939f335a;p=git.git discard revindex data when pack list changes This is needed to fix verify-pack -v with multiple pack arguments. Also, in theory, revindex data (if any) must be discarded whenever reprepare_packed_git() is called. In practice this is hard to trigger though. Signed-off-by: Nicolas Pitre Signed-off-by: Junio C Hamano --- diff --git a/builtin-verify-pack.c b/builtin-verify-pack.c index f4ac59569..25a29f11a 100644 --- a/builtin-verify-pack.c +++ b/builtin-verify-pack.c @@ -1,7 +1,7 @@ #include "builtin.h" #include "cache.h" #include "pack.h" - +#include "pack-revindex.h" #define MAX_CHAIN 50 @@ -129,6 +129,7 @@ int cmd_verify_pack(int argc, const char **argv, const char *prefix) else { if (verify_one_pack(argv[1], verbose)) err = 1; + discard_revindex(); nothing_done = 0; } argc--; argv++; diff --git a/pack-revindex.c b/pack-revindex.c index cd300bdff..6096b6224 100644 --- a/pack-revindex.c +++ b/pack-revindex.c @@ -142,3 +142,15 @@ struct revindex_entry *find_pack_revindex(struct packed_git *p, off_t ofs) } while (lo < hi); die("internal error: pack revindex corrupt"); } + +void discard_revindex(void) +{ + if (pack_revindex_hashsz) { + int i; + for (i = 0; i < pack_revindex_hashsz; i++) + if (pack_revindex[i].revindex) + free(pack_revindex[i].revindex); + free(pack_revindex); + pack_revindex_hashsz = 0; + } +} diff --git a/pack-revindex.h b/pack-revindex.h index 36a514a6c..8d5027ad9 100644 --- a/pack-revindex.h +++ b/pack-revindex.h @@ -7,5 +7,6 @@ struct revindex_entry { }; struct revindex_entry *find_pack_revindex(struct packed_git *p, off_t ofs); +void discard_revindex(void); #endif diff --git a/sha1_file.c b/sha1_file.c index 32e4664b1..477d3fb4b 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -990,6 +990,7 @@ void prepare_packed_git(void) void reprepare_packed_git(void) { + discard_revindex(); prepare_packed_git_run_once = 0; prepare_packed_git(); } diff --git a/t/t5300-pack-object.sh b/t/t5300-pack-object.sh index 645583f9d..83abe5f25 100755 --- a/t/t5300-pack-object.sh +++ b/t/t5300-pack-object.sh @@ -186,6 +186,12 @@ test_expect_success \ test-2-${packname_2}.idx \ test-3-${packname_3}.idx' +test_expect_success \ + 'verify pack -v' \ + 'git verify-pack -v test-1-${packname_1}.idx \ + test-2-${packname_2}.idx \ + test-3-${packname_3}.idx' + test_expect_success \ 'verify-pack catches mismatched .idx and .pack files' \ 'cat test-1-${packname_1}.idx >test-3.idx &&