t1700: add tests for splitIndex.maxPercentChange
[gitweb.git] / t / t1700-split-index.sh
index 292a0720fccb0becca47fad2945634cbffeb89d6..21f43903f88dca2f3424808bdaae9d3ece4f0f6a 100755 (executable)
@@ -8,6 +8,7 @@ test_description='split index mode tests'
 sane_unset GIT_TEST_SPLIT_INDEX
 
 test_expect_success 'enable split index' '
+       git config splitIndex.maxPercentChange 100 &&
        git update-index --split-index &&
        test-dump-split-index .git/index >actual &&
        indexversion=$(test-index-version <.git/index) &&
@@ -19,12 +20,12 @@ test_expect_success 'enable split index' '
                own=8299b0bcd1ac364e5f1d7768efb62fa2da79a339
                base=39d890139ee5356c7ef572216cebcd27aa41f9df
        fi &&
-       cat >expect <<EOF &&
-own $own
-base $base
-replacements:
-deletions:
-EOF
+       cat >expect <<-EOF &&
+       own $own
+       base $base
+       replacements:
+       deletions:
+       EOF
        test_cmp expect actual
 '
 
@@ -32,51 +33,51 @@ test_expect_success 'add one file' '
        : >one &&
        git update-index --add one &&
        git ls-files --stage >ls-files.actual &&
-       cat >ls-files.expect <<EOF &&
-100644 $EMPTY_BLOB 0   one
-EOF
+       cat >ls-files.expect <<-EOF &&
+       100644 $EMPTY_BLOB 0    one
+       EOF
        test_cmp ls-files.expect ls-files.actual &&
 
        test-dump-split-index .git/index | sed "/^own/d" >actual &&
-       cat >expect <<EOF &&
-base $base
-100644 $EMPTY_BLOB 0   one
-replacements:
-deletions:
-EOF
+       cat >expect <<-EOF &&
+       base $base
+       100644 $EMPTY_BLOB 0    one
+       replacements:
+       deletions:
+       EOF
        test_cmp expect actual
 '
 
 test_expect_success 'disable split index' '
        git update-index --no-split-index &&
        git ls-files --stage >ls-files.actual &&
-       cat >ls-files.expect <<EOF &&
-100644 $EMPTY_BLOB 0   one
-EOF
+       cat >ls-files.expect <<-EOF &&
+       100644 $EMPTY_BLOB 0    one
+       EOF
        test_cmp ls-files.expect ls-files.actual &&
 
        BASE=$(test-dump-split-index .git/index | grep "^own" | sed "s/own/base/") &&
        test-dump-split-index .git/index | sed "/^own/d" >actual &&
-       cat >expect <<EOF &&
-not a split index
-EOF
+       cat >expect <<-EOF &&
+       not a split index
+       EOF
        test_cmp expect actual
 '
 
 test_expect_success 'enable split index again, "one" now belongs to base index"' '
        git update-index --split-index &&
        git ls-files --stage >ls-files.actual &&
-       cat >ls-files.expect <<EOF &&
-100644 $EMPTY_BLOB 0   one
-EOF
+       cat >ls-files.expect <<-EOF &&
+       100644 $EMPTY_BLOB 0    one
+       EOF
        test_cmp ls-files.expect ls-files.actual &&
 
        test-dump-split-index .git/index | sed "/^own/d" >actual &&
-       cat >expect <<EOF &&
-$BASE
-replacements:
-deletions:
-EOF
+       cat >expect <<-EOF &&
+       $BASE
+       replacements:
+       deletions:
+       EOF
        test_cmp expect actual
 '
 
@@ -84,18 +85,18 @@ test_expect_success 'modify original file, base index untouched' '
        echo modified >one &&
        git update-index one &&
        git ls-files --stage >ls-files.actual &&
-       cat >ls-files.expect <<EOF &&
-100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0      one
-EOF
+       cat >ls-files.expect <<-EOF &&
+       100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0       one
+       EOF
        test_cmp ls-files.expect ls-files.actual &&
 
        test-dump-split-index .git/index | sed "/^own/d" >actual &&
-       q_to_tab >expect <<EOF &&
-$BASE
-100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q
-replacements: 0
-deletions:
-EOF
+       q_to_tab >expect <<-EOF &&
+       $BASE
+       100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q
+       replacements: 0
+       deletions:
+       EOF
        test_cmp expect actual
 '
 
@@ -103,54 +104,54 @@ test_expect_success 'add another file, which stays index' '
        : >two &&
        git update-index --add two &&
        git ls-files --stage >ls-files.actual &&
-       cat >ls-files.expect <<EOF &&
-100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0      one
-100644 $EMPTY_BLOB 0   two
-EOF
+       cat >ls-files.expect <<-EOF &&
+       100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0       one
+       100644 $EMPTY_BLOB 0    two
+       EOF
        test_cmp ls-files.expect ls-files.actual &&
 
        test-dump-split-index .git/index | sed "/^own/d" >actual &&
-       q_to_tab >expect <<EOF &&
-$BASE
-100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q
-100644 $EMPTY_BLOB 0   two
-replacements: 0
-deletions:
-EOF
+       q_to_tab >expect <<-EOF &&
+       $BASE
+       100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q
+       100644 $EMPTY_BLOB 0    two
+       replacements: 0
+       deletions:
+       EOF
        test_cmp expect actual
 '
 
 test_expect_success 'remove file not in base index' '
        git update-index --force-remove two &&
        git ls-files --stage >ls-files.actual &&
-       cat >ls-files.expect <<EOF &&
-100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0      one
-EOF
+       cat >ls-files.expect <<-EOF &&
+       100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0       one
+       EOF
        test_cmp ls-files.expect ls-files.actual &&
 
        test-dump-split-index .git/index | sed "/^own/d" >actual &&
-       q_to_tab >expect <<EOF &&
-$BASE
-100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q
-replacements: 0
-deletions:
-EOF
+       q_to_tab >expect <<-EOF &&
+       $BASE
+       100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q
+       replacements: 0
+       deletions:
+       EOF
        test_cmp expect actual
 '
 
 test_expect_success 'remove file in base index' '
        git update-index --force-remove one &&
        git ls-files --stage >ls-files.actual &&
-       cat >ls-files.expect <<EOF &&
-EOF
+       cat >ls-files.expect <<-EOF &&
+       EOF
        test_cmp ls-files.expect ls-files.actual &&
 
        test-dump-split-index .git/index | sed "/^own/d" >actual &&
-       cat >expect <<EOF &&
-$BASE
-replacements:
-deletions: 0
-EOF
+       cat >expect <<-EOF &&
+       $BASE
+       replacements:
+       deletions: 0
+       EOF
        test_cmp expect actual
 '
 
@@ -158,18 +159,18 @@ test_expect_success 'add original file back' '
        : >one &&
        git update-index --add one &&
        git ls-files --stage >ls-files.actual &&
-       cat >ls-files.expect <<EOF &&
-100644 $EMPTY_BLOB 0   one
-EOF
+       cat >ls-files.expect <<-EOF &&
+       100644 $EMPTY_BLOB 0    one
+       EOF
        test_cmp ls-files.expect ls-files.actual &&
 
        test-dump-split-index .git/index | sed "/^own/d" >actual &&
-       cat >expect <<EOF &&
-$BASE
-100644 $EMPTY_BLOB 0   one
-replacements:
-deletions: 0
-EOF
+       cat >expect <<-EOF &&
+       $BASE
+       100644 $EMPTY_BLOB 0    one
+       replacements:
+       deletions: 0
+       EOF
        test_cmp expect actual
 '
 
@@ -177,26 +178,135 @@ test_expect_success 'add new file' '
        : >two &&
        git update-index --add two &&
        git ls-files --stage >actual &&
-       cat >expect <<EOF &&
-100644 $EMPTY_BLOB 0   one
-100644 $EMPTY_BLOB 0   two
-EOF
+       cat >expect <<-EOF &&
+       100644 $EMPTY_BLOB 0    one
+       100644 $EMPTY_BLOB 0    two
+       EOF
        test_cmp expect actual
 '
 
 test_expect_success 'unify index, two files remain' '
        git update-index --no-split-index &&
        git ls-files --stage >ls-files.actual &&
-       cat >ls-files.expect <<EOF &&
-100644 $EMPTY_BLOB 0   one
-100644 $EMPTY_BLOB 0   two
-EOF
+       cat >ls-files.expect <<-EOF &&
+       100644 $EMPTY_BLOB 0    one
+       100644 $EMPTY_BLOB 0    two
+       EOF
        test_cmp ls-files.expect ls-files.actual &&
 
        test-dump-split-index .git/index | sed "/^own/d" >actual &&
-       cat >expect <<EOF &&
-not a split index
-EOF
+       cat >expect <<-EOF &&
+       not a split index
+       EOF
+       test_cmp expect actual
+'
+
+test_expect_success 'set core.splitIndex config variable to true' '
+       git config core.splitIndex true &&
+       : >three &&
+       git update-index --add three &&
+       git ls-files --stage >ls-files.actual &&
+       cat >ls-files.expect <<-EOF &&
+       100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       one
+       100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       three
+       100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       two
+       EOF
+       test_cmp ls-files.expect ls-files.actual &&
+       BASE=$(test-dump-split-index .git/index | grep "^base") &&
+       test-dump-split-index .git/index | sed "/^own/d" >actual &&
+       cat >expect <<-EOF &&
+       $BASE
+       replacements:
+       deletions:
+       EOF
+       test_cmp expect actual
+'
+
+test_expect_success 'set core.splitIndex config variable to false' '
+       git config core.splitIndex false &&
+       git update-index --force-remove three &&
+       git ls-files --stage >ls-files.actual &&
+       cat >ls-files.expect <<-EOF &&
+       100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       one
+       100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       two
+       EOF
+       test_cmp ls-files.expect ls-files.actual &&
+       test-dump-split-index .git/index | sed "/^own/d" >actual &&
+       cat >expect <<-EOF &&
+       not a split index
+       EOF
+       test_cmp expect actual
+'
+
+test_expect_success 'set core.splitIndex config variable to true' '
+       git config core.splitIndex true &&
+       : >three &&
+       git update-index --add three &&
+       BASE=$(test-dump-split-index .git/index | grep "^base") &&
+       test-dump-split-index .git/index | sed "/^own/d" >actual &&
+       cat >expect <<-EOF &&
+       $BASE
+       replacements:
+       deletions:
+       EOF
+       test_cmp expect actual &&
+       : >four &&
+       git update-index --add four &&
+       test-dump-split-index .git/index | sed "/^own/d" >actual &&
+       cat >expect <<-EOF &&
+       $BASE
+       100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       four
+       replacements:
+       deletions:
+       EOF
+       test_cmp expect actual
+'
+
+test_expect_success 'check behavior with splitIndex.maxPercentChange unset' '
+       git config --unset splitIndex.maxPercentChange &&
+       : >five &&
+       git update-index --add five &&
+       BASE=$(test-dump-split-index .git/index | grep "^base") &&
+       test-dump-split-index .git/index | sed "/^own/d" >actual &&
+       cat >expect <<-EOF &&
+       $BASE
+       replacements:
+       deletions:
+       EOF
+       test_cmp expect actual &&
+       : >six &&
+       git update-index --add six &&
+       test-dump-split-index .git/index | sed "/^own/d" >actual &&
+       cat >expect <<-EOF &&
+       $BASE
+       100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       six
+       replacements:
+       deletions:
+       EOF
+       test_cmp expect actual
+'
+
+test_expect_success 'check splitIndex.maxPercentChange set to 0' '
+       git config splitIndex.maxPercentChange 0 &&
+       : >seven &&
+       git update-index --add seven &&
+       BASE=$(test-dump-split-index .git/index | grep "^base") &&
+       test-dump-split-index .git/index | sed "/^own/d" >actual &&
+       cat >expect <<-EOF &&
+       $BASE
+       replacements:
+       deletions:
+       EOF
+       test_cmp expect actual &&
+       : >eight &&
+       git update-index --add eight &&
+       BASE=$(test-dump-split-index .git/index | grep "^base") &&
+       test-dump-split-index .git/index | sed "/^own/d" >actual &&
+       cat >expect <<-EOF &&
+       $BASE
+       replacements:
+       deletions:
+       EOF
        test_cmp expect actual
 '