129 lines
3.3 KiB
Bash
Executable File
129 lines
3.3 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2016 Jacob Keller, based on t4041 by Jens Lehmann
|
|
#
|
|
|
|
test_description='Test for submodule diff on non-checked out submodule
|
|
|
|
This test tries to verify that add_submodule_odb works when the submodule was
|
|
initialized previously but the checkout has since been removed.
|
|
'
|
|
|
|
TEST_PASSES_SANITIZE_LEAK=true
|
|
. ./test-lib.sh
|
|
|
|
# Tested non-UTF-8 encoding
|
|
test_encoding="ISO8859-1"
|
|
|
|
# String "added" in German (translated with Google Translate), encoded in UTF-8,
|
|
# used in sample commit log messages in add_file() function below.
|
|
added=$(printf "hinzugef\303\274gt")
|
|
|
|
add_file () {
|
|
(
|
|
cd "$1" &&
|
|
shift &&
|
|
for name
|
|
do
|
|
echo "$name" >"$name" &&
|
|
git add "$name" &&
|
|
test_tick &&
|
|
# "git commit -m" would break MinGW, as Windows refuse to pass
|
|
# $test_encoding encoded parameter to git.
|
|
echo "Add $name ($added $name)" | iconv -f utf-8 -t $test_encoding |
|
|
git -c "i18n.commitEncoding=$test_encoding" commit -F -
|
|
done >/dev/null &&
|
|
git rev-parse --short --verify HEAD
|
|
)
|
|
}
|
|
|
|
commit_file () {
|
|
test_tick &&
|
|
git commit "$@" -m "Commit $*" >/dev/null
|
|
}
|
|
|
|
test_expect_success 'setup - submodules' '
|
|
test_create_repo sm2 &&
|
|
add_file . foo &&
|
|
add_file sm2 foo1 foo2 &&
|
|
smhead1=$(git -C sm2 rev-parse --short --verify HEAD)
|
|
'
|
|
|
|
test_expect_success 'setup - git submodule add' '
|
|
git -c protocol.file.allow=always submodule add ./sm2 sm1 &&
|
|
commit_file sm1 .gitmodules &&
|
|
git diff-tree -p --no-commit-id --submodule=log HEAD -- sm1 >actual &&
|
|
cat >expected <<-EOF &&
|
|
Submodule sm1 0000000...$smhead1 (new submodule)
|
|
EOF
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_expect_success 'submodule directory removed' '
|
|
rm -rf sm1 &&
|
|
git diff-tree -p --no-commit-id --submodule=log HEAD -- sm1 >actual &&
|
|
cat >expected <<-EOF &&
|
|
Submodule sm1 0000000...$smhead1 (new submodule)
|
|
EOF
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_expect_success 'setup - submodule multiple commits' '
|
|
git submodule update --checkout sm1 &&
|
|
smhead2=$(add_file sm1 foo3 foo4) &&
|
|
commit_file sm1 &&
|
|
git diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
|
|
cat >expected <<-EOF &&
|
|
Submodule sm1 $smhead1..$smhead2:
|
|
> Add foo4 ($added foo4)
|
|
> Add foo3 ($added foo3)
|
|
EOF
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_expect_success 'submodule removed multiple commits' '
|
|
rm -rf sm1 &&
|
|
git diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
|
|
cat >expected <<-EOF &&
|
|
Submodule sm1 $smhead1..$smhead2:
|
|
> Add foo4 ($added foo4)
|
|
> Add foo3 ($added foo3)
|
|
EOF
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_expect_success 'submodule not initialized in new clone' '
|
|
git clone . sm3 &&
|
|
git -C sm3 diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
|
|
cat >expected <<-EOF &&
|
|
Submodule sm1 $smhead1...$smhead2 (commits not present)
|
|
EOF
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_expect_success 'setup submodule moved' '
|
|
git submodule update --checkout sm1 &&
|
|
git mv sm1 sm4 &&
|
|
commit_file sm4 &&
|
|
git diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
|
|
cat >expected <<-EOF &&
|
|
Submodule sm4 0000000...$smhead2 (new submodule)
|
|
EOF
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_expect_success 'submodule moved then removed' '
|
|
smhead3=$(add_file sm4 foo6 foo7) &&
|
|
commit_file sm4 &&
|
|
rm -rf sm4 &&
|
|
git diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
|
|
cat >expected <<-EOF &&
|
|
Submodule sm4 $smhead2..$smhead3:
|
|
> Add foo7 ($added foo7)
|
|
> Add foo6 ($added foo6)
|
|
EOF
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_done
|