| 1 | #!/bin/sh |
| 2 | |
| 3 | test_description='check handling of .gitmodule path with dash' |
| 4 | GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main |
| 5 | export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME |
| 6 | |
| 7 | . ./test-lib.sh |
| 8 | |
| 9 | test_expect_success 'setup' ' |
| 10 | git config --global protocol.file.allow always |
| 11 | ' |
| 12 | |
| 13 | test_expect_success 'create submodule with dash in path' ' |
| 14 | git init upstream && |
| 15 | git -C upstream commit --allow-empty -m base && |
| 16 | git submodule add ./upstream sub && |
| 17 | git mv sub ./-sub && |
| 18 | git commit -m submodule |
| 19 | ' |
| 20 | |
| 21 | test_expect_success 'clone rejects unprotected dash' ' |
| 22 | test_when_finished "rm -rf dst" && |
| 23 | git clone --recurse-submodules . dst 2>err && |
| 24 | test_grep ignoring err |
| 25 | ' |
| 26 | |
| 27 | test_expect_success 'fsck rejects unprotected dash' ' |
| 28 | test_when_finished "rm -rf dst" && |
| 29 | git init --bare dst && |
| 30 | git -C dst config transfer.fsckObjects true && |
| 31 | test_must_fail git push dst HEAD 2>err && |
| 32 | test_grep gitmodulesPath err |
| 33 | ' |
| 34 | |
| 35 | test_expect_success MINGW 'submodule paths disallows trailing spaces' ' |
| 36 | git init super && |
| 37 | test_must_fail git -C super submodule add ../upstream "sub " && |
| 38 | |
| 39 | : add "sub", then rename "sub" to "sub ", the hard way && |
| 40 | git -C super submodule add ../upstream sub && |
| 41 | tree=$(git -C super write-tree) && |
| 42 | git -C super ls-tree $tree >tree && |
| 43 | sed "s/sub/sub /" <tree >tree.new && |
| 44 | tree=$(git -C super mktree <tree.new) && |
| 45 | commit=$(echo with space | git -C super commit-tree $tree) && |
| 46 | git -C super update-ref refs/heads/main $commit && |
| 47 | |
| 48 | test_must_fail git clone --recurse-submodules super dst 2>err && |
| 49 | test_grep "sub " err |
| 50 | ' |
| 51 | |
| 52 | test_done |