]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pack-revindex: ensure that on-disk reverse indexes are given precedence
authorTaylor Blau <me@ttaylorr.com>
Mon, 25 Jan 2021 23:37:46 +0000 (18:37 -0500)
committerJunio C Hamano <gitster@pobox.com>
Tue, 26 Jan 2021 02:32:44 +0000 (18:32 -0800)
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 <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
pack-revindex.c
pack-revindex.h
t/t5325-reverse-index.sh

index a174fa53883ef16cf4e717a68357d2b3016279cb..83fe4de77382a1089b62972e3fa5d7771c1a0790 100644 (file)
@@ -2,6 +2,7 @@
 #include "pack-revindex.h"
 #include "object-store.h"
 #include "packfile.h"
+#include "config.h"
 
 struct revindex_entry {
        off_t offset;
@@ -166,6 +167,9 @@ static void create_pack_revindex(struct packed_git *p)
 
 static int create_pack_revindex_in_memory(struct packed_git *p)
 {
+       if (git_env_bool(GIT_TEST_REV_INDEX_DIE_IN_MEMORY, 0))
+               die("dying as requested by '%s'",
+                   GIT_TEST_REV_INDEX_DIE_IN_MEMORY);
        if (open_pack_index(p))
                return -1;
        create_pack_revindex(p);
index d1a0595e892dfb4bfe1e5e775b88839a8fc48be5..ba7c82c1251489a90480d4a6e5d6996e7e8226e6 100644 (file)
@@ -21,6 +21,7 @@
 #define RIDX_VERSION 1
 
 #define GIT_TEST_WRITE_REV_INDEX "GIT_TEST_WRITE_REV_INDEX"
+#define GIT_TEST_REV_INDEX_DIE_IN_MEMORY "GIT_TEST_REV_INDEX_DIE_IN_MEMORY"
 
 struct packed_git;
 
index be452bb3434a0edb259dbc9db795ef094d7f8d23..a344b18d7ed5b0a10aacb04e2c6bdcbc278fd573 100755 (executable)
@@ -85,4 +85,13 @@ test_expect_success 'pack-objects respects pack.writeReverseIndex' '
        test_path_is_file pack-1-*.rev
 '
 
+test_expect_success 'reverse index is not generated when available on disk' '
+       test_index_pack true &&
+       test_path_is_file $rev &&
+
+       git rev-parse HEAD >tip &&
+       GIT_TEST_REV_INDEX_DIE_IN_MEMORY=1 git cat-file \
+               --batch-check="%(objectsize:disk)" <tip
+'
+
 test_done