Skip to content

Commit 4b480c6

Browse files
Nicolas Pitregitster
authored andcommitted
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>
1 parent a81892d commit 4b480c6

File tree

5 files changed

+22
-1
lines changed

5 files changed

+22
-1
lines changed

builtin-verify-pack.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#include "builtin.h"
22
#include "cache.h"
33
#include "pack.h"
4-
4+
#include "pack-revindex.h"
55

66
#define MAX_CHAIN 50
77

@@ -129,6 +129,7 @@ int cmd_verify_pack(int argc, const char **argv, const char *prefix)
129129
else {
130130
if (verify_one_pack(argv[1], verbose))
131131
err = 1;
132+
discard_revindex();
132133
nothing_done = 0;
133134
}
134135
argc--; argv++;

pack-revindex.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,15 @@ struct revindex_entry *find_pack_revindex(struct packed_git *p, off_t ofs)
142142
} while (lo < hi);
143143
die("internal error: pack revindex corrupt");
144144
}
145+
146+
void discard_revindex(void)
147+
{
148+
if (pack_revindex_hashsz) {
149+
int i;
150+
for (i = 0; i < pack_revindex_hashsz; i++)
151+
if (pack_revindex[i].revindex)
152+
free(pack_revindex[i].revindex);
153+
free(pack_revindex);
154+
pack_revindex_hashsz = 0;
155+
}
156+
}

pack-revindex.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ struct revindex_entry {
77
};
88

99
struct revindex_entry *find_pack_revindex(struct packed_git *p, off_t ofs);
10+
void discard_revindex(void);
1011

1112
#endif

sha1_file.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -990,6 +990,7 @@ void prepare_packed_git(void)
990990

991991
void reprepare_packed_git(void)
992992
{
993+
discard_revindex();
993994
prepare_packed_git_run_once = 0;
994995
prepare_packed_git();
995996
}

t/t5300-pack-object.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,12 @@ test_expect_success \
186186
test-2-${packname_2}.idx \
187187
test-3-${packname_3}.idx'
188188

189+
test_expect_success \
190+
'verify pack -v' \
191+
'git verify-pack -v test-1-${packname_1}.idx \
192+
test-2-${packname_2}.idx \
193+
test-3-${packname_3}.idx'
194+
189195
test_expect_success \
190196
'verify-pack catches mismatched .idx and .pack files' \
191197
'cat test-1-${packname_1}.idx >test-3.idx &&

0 commit comments

Comments
 (0)