diff options
author | Nicolas Pitre <nico@cam.org> | 2008-08-22 15:45:53 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-08-22 22:00:22 -0700 |
commit | 4b480c6716a7d8e20e7e510827ea81e7939f335a (patch) | |
tree | 24c1de905aecbdebfd1c71485de456d0d6660c31 | |
parent | a81892dd8c37b6f13793739721b520fee3ce4c2c (diff) | |
download | git-4b480c6716a7d8e20e7e510827ea81e7939f335a.tar.gz |
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 <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | builtin-verify-pack.c | 3 | ||||
-rw-r--r-- | pack-revindex.c | 12 | ||||
-rw-r--r-- | pack-revindex.h | 1 | ||||
-rw-r--r-- | sha1_file.c | 1 | ||||
-rwxr-xr-x | t/t5300-pack-object.sh | 6 |
5 files changed, 22 insertions, 1 deletions
diff --git a/builtin-verify-pack.c b/builtin-verify-pack.c index f4ac595695..25a29f11a4 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 cd300bdff5..6096b6224a 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 36a514a6cf..8d5027ad91 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 32e4664b1b..477d3fb4b0 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 645583f9d7..83abe5f25e 100755 --- a/t/t5300-pack-object.sh +++ b/t/t5300-pack-object.sh @@ -187,6 +187,12 @@ test_expect_success \ 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 && cat test-2-${packname_2}.pack >test-3.pack && |