Merge branch 'sb/diff-color-move-more'
[gitweb.git] / t / t5319-multi-pack-index.sh
index 4a4fa26f7a5225752d63d699e9a01d1e5c6e02d6..6f56b38674fd62085e757cbc685436107a6bb9fe 100755 (executable)
@@ -3,6 +3,8 @@
 test_description='multi-pack-indexes'
 . ./test-lib.sh
 
+objdir=.git/objects
+
 midx_read_expect () {
        NUM_PACKS=$1
        NUM_OBJECTS=$2
@@ -76,18 +78,44 @@ test_expect_success 'create objects' '
 '
 
 test_expect_success 'write midx with one v1 pack' '
-       pack=$(git pack-objects --index-version=1 pack/test <obj-list) &&
-       test_when_finished rm pack/test-$pack.pack pack/test-$pack.idx pack/multi-pack-index &&
-       git multi-pack-index --object-dir=. write &&
-       midx_read_expect 1 18 4 .
+       pack=$(git pack-objects --index-version=1 $objdir/pack/test <obj-list) &&
+       test_when_finished rm $objdir/pack/test-$pack.pack \
+               $objdir/pack/test-$pack.idx $objdir/pack/multi-pack-index &&
+       git multi-pack-index --object-dir=$objdir write &&
+       midx_read_expect 1 18 4 $objdir
 '
 
+midx_git_two_modes () {
+       if [ "$2" = "sorted" ]
+       then
+               git -c core.multiPackIndex=false $1 | sort >expect &&
+               git -c core.multiPackIndex=true $1 | sort >actual
+       else
+               git -c core.multiPackIndex=false $1 >expect &&
+               git -c core.multiPackIndex=true $1 >actual
+       fi &&
+       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" &&
+               midx_git_two_modes "count-objects --verbose" &&
+               midx_git_two_modes "cat-file --batch-all-objects --buffer --batch-check" &&
+               midx_git_two_modes "cat-file --batch-all-objects --buffer --batch-check --unsorted" sorted
+       '
+}
+
 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 18 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 18 4 $objdir
 '
 
+compare_results_with_midx "one v2 pack"
+
 test_expect_success 'add more objects' '
        for i in $(test_seq 6 10)
        do
@@ -97,25 +125,69 @@ test_expect_success 'add more objects' '
 '
 
 test_expect_success 'write midx with two packs' '
-       git pack-objects --index-version=1 pack/test-2 <obj-list &&
-       git multi-pack-index --object-dir=. write &&
-       midx_read_expect 2 34 4 .
+       git pack-objects --index-version=1 $objdir/pack/test-2 <obj-list &&
+       git multi-pack-index --object-dir=$objdir write &&
+       midx_read_expect 2 34 4 $objdir
 '
 
+compare_results_with_midx "two packs"
+
 test_expect_success 'add more packs' '
        for j in $(test_seq 11 20)
        do
                generate_objects $j &&
                commit_and_list_objects &&
-               git pack-objects --index-version=2 pack/test-pack <obj-list
+               git pack-objects --index-version=2 $objdir/pack/test-pack <obj-list
        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 74 4 .
+       git multi-pack-index --object-dir=$objdir write &&
+       midx_read_expect 12 74 4 $objdir
 '
 
+compare_results_with_midx "twelve packs"
+
+test_expect_success 'repack removes multi-pack-index' '
+       test_path_is_file $objdir/pack/multi-pack-index &&
+       git repack -adf &&
+       test_path_is_missing $objdir/pack/multi-pack-index
+'
+
+compare_results_with_midx "after repack"
+
+test_expect_success 'multi-pack-index and pack-bitmap' '
+       git -c repack.writeBitmaps=true repack -ad &&
+       git multi-pack-index write &&
+       git rev-list --test-bitmap HEAD
+'
+
+test_expect_success 'multi-pack-index and alternates' '
+       git init --bare alt.git &&
+       echo $(pwd)/alt.git/objects >.git/objects/info/alternates &&
+       echo content1 >file1 &&
+       altblob=$(GIT_DIR=alt.git git hash-object -w file1) &&
+       git cat-file blob $altblob &&
+       git rev-list --all
+'
+
+compare_results_with_midx "with alternate (local midx)"
+
+test_expect_success 'multi-pack-index in an alternate' '
+       mv .git/objects/pack/* alt.git/objects/pack &&
+       test_commit add_local_objects &&
+       git repack --local &&
+       git multi-pack-index write &&
+       midx_read_expect 1 3 4 $objdir &&
+       git reset --hard HEAD~1 &&
+       rm -f .git/objects/pack/*
+'
+
+compare_results_with_midx "with alternate (remote midx)"
+
+
 # usage: corrupt_data <file> <pos> [<data>]
 corrupt_data () {
        file=$1