multi-pack-index: define GIT_TEST_MULTI_PACK_INDEX

The multi-pack-index feature is tested in isolation by
t5319-multi-pack-index.sh, but there are many more interesting
scenarios in the test suite surrounding pack-file data shapes
and interactions. Since the multi-pack-index is an optional
data structure, it does not make sense to include it by default
in those tests.

Instead, add a new GIT_TEST_MULTI_PACK_INDEX environment variable
that enables core.multiPackIndex and writes a multi-pack-index
after each 'git repack' command. This adds extra test coverage
when needed.

There are a few spots in the test suite that need to react to this
change:

* t5319-multi-pack-index.sh: there is a test that checks that
  'git repack' deletes the multi-pack-index. Disable the environment
  variable to ensure this still happens.

* t5310-pack-bitmaps.sh: One test moves a pack-file from the object
  directory to an alternate. This breaks the multi-pack-index, so
  delete the multi-pack-index at this point, if it exists.

* t9300-fast-import.sh: One test verifies the number of files in
  the .git/objects/pack directory is exactly 8. Exclude the
  multi-pack-index from this count so it is still 8 in all cases.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Derrick Stolee
2018-10-12 10:34:20 -07:00
committed by Junio C Hamano
parent 1dcd9f2043
commit 0465a50506
7 changed files with 20 additions and 4 deletions

View File

@ -553,6 +553,10 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
if (!no_update_server_info) if (!no_update_server_info)
update_server_info(0); update_server_info(0);
remove_temporary_files(); remove_temporary_files();
if (git_env_bool(GIT_TEST_MULTI_PACK_INDEX, 0))
write_midx_file(get_object_directory());
string_list_clear(&names, 0); string_list_clear(&names, 0);
string_list_clear(&rollback, 0); string_list_clear(&rollback, 0);
string_list_clear(&existing_packs, 0); string_list_clear(&existing_packs, 0);

9
midx.c
View File

@ -338,9 +338,14 @@ int prepare_multi_pack_index_one(struct repository *r, const char *object_dir, i
struct multi_pack_index *m; struct multi_pack_index *m;
struct multi_pack_index *m_search; struct multi_pack_index *m_search;
int config_value; int config_value;
static int env_value = -1;
if (repo_config_get_bool(r, "core.multipackindex", &config_value) || if (env_value < 0)
!config_value) env_value = git_env_bool(GIT_TEST_MULTI_PACK_INDEX, 0);
if (!env_value &&
(repo_config_get_bool(r, "core.multipackindex", &config_value) ||
!config_value))
return 0; return 0;
for (m_search = r->objects->multi_pack_index; m_search; m_search = m_search->next) for (m_search = r->objects->multi_pack_index; m_search; m_search = m_search->next)

2
midx.h
View File

@ -3,6 +3,8 @@
#include "repository.h" #include "repository.h"
#define GIT_TEST_MULTI_PACK_INDEX "GIT_TEST_MULTI_PACK_INDEX"
struct multi_pack_index { struct multi_pack_index {
struct multi_pack_index *next; struct multi_pack_index *next;

View File

@ -327,6 +327,10 @@ GIT_TEST_COMMIT_GRAPH=<boolean>, when true, forces the commit-graph to
be written after every 'git commit' command, and overrides the be written after every 'git commit' command, and overrides the
'core.commitGraph' setting to true. 'core.commitGraph' setting to true.
GIT_TEST_MULTI_PACK_INDEX=<boolean>, when true, forces the multi-pack-
index to be written after every 'git repack' command, and overrides the
'core.multiPackIndex' setting to true.
Naming Tests Naming Tests
------------ ------------

View File

@ -191,6 +191,7 @@ test_expect_success 'pack-objects respects --honor-pack-keep (local bitmapped pa
test_expect_success 'pack-objects respects --local (non-local bitmapped pack)' ' test_expect_success 'pack-objects respects --local (non-local bitmapped pack)' '
mv .git/objects/pack/$packbitmap.* alt.git/objects/pack/ && mv .git/objects/pack/$packbitmap.* alt.git/objects/pack/ &&
rm -f .git/objects/pack/multi-pack-index &&
test_when_finished "mv alt.git/objects/pack/$packbitmap.* .git/objects/pack/" && test_when_finished "mv alt.git/objects/pack/$packbitmap.* .git/objects/pack/" &&
echo HEAD | git pack-objects --local --stdout --revs >3b.pack && echo HEAD | git pack-objects --local --stdout --revs >3b.pack &&
git index-pack 3b.pack && git index-pack 3b.pack &&

View File

@ -152,7 +152,7 @@ compare_results_with_midx "twelve packs"
test_expect_success 'repack removes multi-pack-index' ' test_expect_success 'repack removes multi-pack-index' '
test_path_is_file $objdir/pack/multi-pack-index && test_path_is_file $objdir/pack/multi-pack-index &&
git repack -adf && GIT_TEST_MULTI_PACK_INDEX=0 git repack -adf &&
test_path_is_missing $objdir/pack/multi-pack-index test_path_is_missing $objdir/pack/multi-pack-index
' '

View File

@ -1558,7 +1558,7 @@ test_expect_success 'O: blank lines not necessary after other commands' '
INPUT_END INPUT_END
git fast-import <input && git fast-import <input &&
test 8 = $(find .git/objects/pack -type f | wc -l) && test 8 = $(find .git/objects/pack -type f | grep -v multi-pack-index | wc -l) &&
test $(git rev-parse refs/tags/O3-2nd) = $(git rev-parse O3^) && test $(git rev-parse refs/tags/O3-2nd) = $(git rev-parse O3^) &&
git log --reverse --pretty=oneline O3 | sed s/^.*z// >actual && git log --reverse --pretty=oneline O3 | sed s/^.*z// >actual &&
test_cmp expect actual test_cmp expect actual