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>
This commit is contained in:
parent
a81892dd8c
commit
4b480c6716
@ -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++;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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 &&
|
||||
|
Loading…
Reference in New Issue
Block a user