Skip to content

Commit ec8e776

Browse files
ttaylorrgitster
authored andcommitted
pack-revindex: ensure that on-disk reverse indexes are given precedence
When an on-disk reverse index exists, there is no need to generate one in memory. In fact, doing so can be slow, and require large amounts of the heap. Let's make sure that we treat the on-disk reverse index with precedence (i.e., that when it exists, we don't bother trying to generate an equivalent one in memory) by teaching Git how to conditionally die() when generating a reverse index in memory. Then, add a test to ensure that when (a) an on-disk reverse index exists, and (b) when setting GIT_TEST_REV_INDEX_DIE_IN_MEMORY, that we do not die, implying that we read from the on-disk one. Signed-off-by: Taylor Blau <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent e8c58f8 commit ec8e776

File tree

3 files changed

+14
-0
lines changed

3 files changed

+14
-0
lines changed

pack-revindex.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "pack-revindex.h"
33
#include "object-store.h"
44
#include "packfile.h"
5+
#include "config.h"
56

67
struct revindex_entry {
78
off_t offset;
@@ -166,6 +167,9 @@ static void create_pack_revindex(struct packed_git *p)
166167

167168
static int create_pack_revindex_in_memory(struct packed_git *p)
168169
{
170+
if (git_env_bool(GIT_TEST_REV_INDEX_DIE_IN_MEMORY, 0))
171+
die("dying as requested by '%s'",
172+
GIT_TEST_REV_INDEX_DIE_IN_MEMORY);
169173
if (open_pack_index(p))
170174
return -1;
171175
create_pack_revindex(p);

pack-revindex.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#define RIDX_VERSION 1
2222

2323
#define GIT_TEST_WRITE_REV_INDEX "GIT_TEST_WRITE_REV_INDEX"
24+
#define GIT_TEST_REV_INDEX_DIE_IN_MEMORY "GIT_TEST_REV_INDEX_DIE_IN_MEMORY"
2425

2526
struct packed_git;
2627

t/t5325-reverse-index.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,13 @@ test_expect_success 'pack-objects respects pack.writeReverseIndex' '
8585
test_path_is_file pack-1-*.rev
8686
'
8787

88+
test_expect_success 'reverse index is not generated when available on disk' '
89+
test_index_pack true &&
90+
test_path_is_file $rev &&
91+
92+
git rev-parse HEAD >tip &&
93+
GIT_TEST_REV_INDEX_DIE_IN_MEMORY=1 git cat-file \
94+
--batch-check="%(objectsize:disk)" <tip
95+
'
96+
8897
test_done

0 commit comments

Comments
 (0)