The core.multiPackIndex config setting controls the multi-pack- index (MIDX) feature. If false, the setting will disable all reads from the multi-pack-index file. Add comparison commands in t5319-multi-pack-index.sh to check typical Git behavior remains the same as the config setting is turned on and off. This currently includes 'git rev-list' and 'git log' commands to trigger several object database reads. Signed-off-by: Derrick Stolee <dstolee@xxxxxxxxxxxxx> --- Documentation/config.txt | 4 +++ cache.h | 1 + config.c | 5 ++++ environment.c | 1 + t/t5319-multi-pack-index.sh | 55 +++++++++++++++++++++++++++++++------ 5 files changed, 57 insertions(+), 9 deletions(-) diff --git a/Documentation/config.txt b/Documentation/config.txt index ab641bf5a9..ab895ebb32 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -908,6 +908,10 @@ core.commitGraph:: Enable git commit graph feature. Allows reading from the commit-graph file. +core.multiPackIndex:: + Use the multi-pack-index file to track multiple packfiles using a + single index. See linkgit:technical/multi-pack-index[1]. + core.sparseCheckout:: Enable "sparse checkout" feature. See section "Sparse checkout" in linkgit:git-read-tree[1] for more information. diff --git a/cache.h b/cache.h index 89a107a7f7..d12aa49710 100644 --- a/cache.h +++ b/cache.h @@ -814,6 +814,7 @@ extern char *git_replace_ref_base; extern int fsync_object_files; extern int core_preload_index; extern int core_commit_graph; +extern int core_multi_pack_index; extern int core_apply_sparse_checkout; extern int precomposed_unicode; extern int protect_hfs; diff --git a/config.c b/config.c index fbbf0f8e9f..95d8da4243 100644 --- a/config.c +++ b/config.c @@ -1313,6 +1313,11 @@ static int git_default_core_config(const char *var, const char *value) return 0; } + if (!strcmp(var, "core.multipackindex")) { + core_multi_pack_index = git_config_bool(var, value); + return 0; + } + if (!strcmp(var, "core.sparsecheckout")) { core_apply_sparse_checkout = git_config_bool(var, value); return 0; diff --git a/environment.c b/environment.c index 2a6de2330b..b9bc919cdb 100644 --- a/environment.c +++ b/environment.c @@ -67,6 +67,7 @@ enum object_creation_mode object_creation_mode = OBJECT_CREATION_MODE; char *notes_ref_name; int grafts_replace_parents = 1; int core_commit_graph; +int core_multi_pack_index; int core_apply_sparse_checkout; int merge_log_config = -1; int precomposed_unicode = -1; /* see probe_utf8_pathname_composition() */ diff --git a/t/t5319-multi-pack-index.sh b/t/t5319-multi-pack-index.sh index ccde83bca4..f7f55ea181 100755 --- a/t/t5319-multi-pack-index.sh +++ b/t/t5319-multi-pack-index.sh @@ -3,6 +3,8 @@ test_description='multi-pack-indexes' . ./test-lib.sh +objdir=.git/objects + midx_read_expect() { NUM_PACKS=$1 NUM_OBJECTS=$2 @@ -61,12 +63,42 @@ test_expect_success 'write midx with one v1 pack' ' midx_read_expect 1 17 4 . ' +midx_git_two_modes() { + git -c core.multiPackIndex=false $1 >expect && + git -c core.multiPackIndex=true $1 >actual && + test_cmp expect actual +} + +compare_results_with_midx() { + MSG=$1 + test_expect_success "check normal git operations: $MSG" ' + midx_git_two_modes "rev-list --objects --all" && + midx_git_two_modes "log --raw" + ' +} + test_expect_success 'write midx with one v2 pack' ' - git pack-objects --index-version=2,0x40 pack/test <obj-list && - git multi-pack-index --object-dir=. write && - midx_read_expect 1 17 4 . + git pack-objects --index-version=2,0x40 $objdir/pack/test <obj-list && + git multi-pack-index --object-dir=$objdir write && + midx_read_expect 1 17 4 $objdir ' +midx_git_two_modes() { + git -c core.multiPackIndex=false $1 >expect && + git -c core.multiPackIndex=true $1 >actual && + test_cmp expect actual +} + +compare_results_with_midx() { + MSG=$1 + test_expect_success "check normal git operations: $MSG" ' + midx_git_two_modes "rev-list --objects --all" && + midx_git_two_modes "log --raw" + ' +} + +compare_results_with_midx "one v2 pack" + test_expect_success 'Add more objects' ' for i in `test_seq 6 10` do @@ -92,11 +124,13 @@ test_expect_success 'Add more objects' ' ' test_expect_success 'write midx with two packs' ' - git pack-objects --index-version=1 pack/test-2 <obj-list2 && - git multi-pack-index --object-dir=. write && - midx_read_expect 2 33 4 . + git pack-objects --index-version=1 $objdir/pack/test-2 <obj-list2 && + git multi-pack-index --object-dir=$objdir write && + midx_read_expect 2 33 4 $objdir ' +compare_results_with_midx "two packs" + test_expect_success 'Add more packs' ' for j in `test_seq 1 10` do @@ -117,17 +151,20 @@ test_expect_success 'Add more packs' ' git ls-tree $tree | sed -e "s/.* \\([0-9a-f]*\\) .*/\\1/" } >obj-list && git update-ref HEAD $commit && - git pack-objects --index-version=2 pack/test-pack <obj-list && + git pack-objects --index-version=2 $objdir/pack/test-pack <obj-list && i=$(expr $i + 1) || return 1 && j=$(expr $j + 1) || return 1 done ' +compare_results_with_midx "mixed mode (two packs + extra)" + test_expect_success 'write midx with twelve packs' ' - git multi-pack-index --object-dir=. write && - midx_read_expect 12 73 4 . + git multi-pack-index --object-dir=$objdir write && + midx_read_expect 12 73 4 $objdir ' +compare_results_with_midx "twelve packs" # usage: corrupt_data <file> <pos> [<data>] corrupt_data() { -- 2.18.0.24.g1b579a2ee9