| #!/bin/sh | |
| test_description='index file specific tests' | |
| . ./test-lib.sh | |
| sane_unset GIT_TEST_SPLIT_INDEX | |
| test_expect_success 'setup' ' | |
| echo 1 >a | |
| ' | |
| test_expect_success 'bogus GIT_INDEX_VERSION issues warning' ' | |
| ( | |
| rm -f .git/index && | |
| GIT_INDEX_VERSION=2bogus && | |
| export GIT_INDEX_VERSION && | |
| git add a 2>err && | |
| sed "s/[0-9]//" err >actual.err && | |
| sed -e "s/ Z$/ /" <<-\EOF >expect.err && | |
| warning: GIT_INDEX_VERSION set, but the value is invalid. | |
| Using version Z | |
| EOF | |
| test_cmp expect.err actual.err | |
| ) | |
| ' | |
| test_expect_success 'out of bounds GIT_INDEX_VERSION issues warning' ' | |
| ( | |
| rm -f .git/index && | |
| GIT_INDEX_VERSION=1 && | |
| export GIT_INDEX_VERSION && | |
| git add a 2>err && | |
| sed "s/[0-9]//" err >actual.err && | |
| sed -e "s/ Z$/ /" <<-\EOF >expect.err && | |
| warning: GIT_INDEX_VERSION set, but the value is invalid. | |
| Using version Z | |
| EOF | |
| test_cmp expect.err actual.err | |
| ) | |
| ' | |
| test_expect_success 'no warning with bogus GIT_INDEX_VERSION and existing index' ' | |
| ( | |
| GIT_INDEX_VERSION=1 && | |
| export GIT_INDEX_VERSION && | |
| git add a 2>actual.err && | |
| test_must_be_empty actual.err | |
| ) | |
| ' | |
| test_expect_success 'out of bounds index.version issues warning' ' | |
| ( | |
| sane_unset GIT_INDEX_VERSION && | |
| rm -f .git/index && | |
| git config --add index.version 1 && | |
| git add a 2>err && | |
| sed "s/[0-9]//" err >actual.err && | |
| sed -e "s/ Z$/ /" <<-\EOF >expect.err && | |
| warning: index.version set, but the value is invalid. | |
| Using version Z | |
| EOF | |
| test_cmp expect.err actual.err | |
| ) | |
| ' | |
| test_expect_success 'index.skipHash config option' ' | |
| rm -f .git/index && | |
| git -c index.skipHash=true add a && | |
| test_trailing_hash .git/index >hash && | |
| echo $(test_oid zero) >expect && | |
| test_cmp expect hash && | |
| git fsck && | |
| rm -f .git/index && | |
| git -c feature.manyFiles=true add a && | |
| test_trailing_hash .git/index >hash && | |
| cmp expect hash && | |
| rm -f .git/index && | |
| git -c feature.manyFiles=true \ | |
| -c index.skipHash=false add a && | |
| test_trailing_hash .git/index >hash && | |
| ! cmp expect hash && | |
| test_commit start && | |
| git -c protocol.file.allow=always submodule add ./ sub && | |
| git config index.skipHash false && | |
| git -C sub config index.skipHash true && | |
| rm -f .git/modules/sub/index && | |
| >sub/file && | |
| git -C sub add a && | |
| test_trailing_hash .git/modules/sub/index >hash && | |
| test_cmp expect hash && | |
| git -C sub fsck | |
| ' | |
| test_index_version () { | |
| INDEX_VERSION_CONFIG=$1 && | |
| FEATURE_MANY_FILES=$2 && | |
| ENV_VAR_VERSION=$3 | |
| EXPECTED_OUTPUT_VERSION=$4 && | |
| ( | |
| rm -f .git/index && | |
| rm -f .git/config && | |
| if test "$INDEX_VERSION_CONFIG" -ne 0 | |
| then | |
| git config --add index.version $INDEX_VERSION_CONFIG | |
| fi && | |
| git config --add feature.manyFiles $FEATURE_MANY_FILES | |
| if test "$ENV_VAR_VERSION" -ne 0 | |
| then | |
| GIT_INDEX_VERSION=$ENV_VAR_VERSION && | |
| export GIT_INDEX_VERSION | |
| else | |
| unset GIT_INDEX_VERSION | |
| fi && | |
| git add a && | |
| echo $EXPECTED_OUTPUT_VERSION >expect && | |
| git update-index --show-index-version >actual && | |
| test_cmp expect actual | |
| ) | |
| } | |
| test_expect_success 'index version config precedence' ' | |
| test_index_version 0 false 0 2 && | |
| test_index_version 2 false 0 2 && | |
| test_index_version 3 false 0 2 && | |
| test_index_version 4 false 0 4 && | |
| test_index_version 2 false 4 4 && | |
| test_index_version 2 true 0 2 && | |
| test_index_version 0 true 0 4 && | |
| test_index_version 0 true 2 2 | |
| ' | |
| test_done |