You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
300 lines
6.7 KiB
300 lines
6.7 KiB
#!/bin/sh |
|
|
|
test_description='Test ls-files recurse-submodules feature |
|
|
|
This test verifies the recurse-submodules feature correctly lists files from |
|
submodules. |
|
' |
|
|
|
. ./test-lib.sh |
|
|
|
test_expect_success 'setup directory structure and submodules' ' |
|
echo a >a && |
|
mkdir b && |
|
echo b >b/b && |
|
git add a b && |
|
git commit -m "add a and b" && |
|
git init submodule && |
|
echo c >submodule/c && |
|
git -C submodule add c && |
|
git -C submodule commit -m "add c" && |
|
git submodule add ./submodule && |
|
git commit -m "added submodule" |
|
' |
|
|
|
test_expect_success 'ls-files correctly outputs files in submodule' ' |
|
cat >expect <<-\EOF && |
|
.gitmodules |
|
a |
|
b/b |
|
submodule/c |
|
EOF |
|
|
|
git ls-files --recurse-submodules >actual && |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success 'ls-files correctly outputs files in submodule with -z' ' |
|
lf_to_nul >expect <<-\EOF && |
|
.gitmodules |
|
a |
|
b/b |
|
submodule/c |
|
EOF |
|
|
|
git ls-files --recurse-submodules -z >actual && |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success 'ls-files does not output files not added to a repo' ' |
|
cat >expect <<-\EOF && |
|
.gitmodules |
|
a |
|
b/b |
|
submodule/c |
|
EOF |
|
|
|
echo a >not_added && |
|
echo b >b/not_added && |
|
echo c >submodule/not_added && |
|
git ls-files --recurse-submodules >actual && |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success 'ls-files recurses more than 1 level' ' |
|
cat >expect <<-\EOF && |
|
.gitmodules |
|
a |
|
b/b |
|
submodule/.gitmodules |
|
submodule/c |
|
submodule/subsub/d |
|
EOF |
|
|
|
git init submodule/subsub && |
|
echo d >submodule/subsub/d && |
|
git -C submodule/subsub add d && |
|
git -C submodule/subsub commit -m "add d" && |
|
git -C submodule submodule add ./subsub && |
|
git -C submodule commit -m "added subsub" && |
|
git submodule absorbgitdirs && |
|
git ls-files --recurse-submodules >actual && |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success 'ls-files works with GIT_DIR' ' |
|
cat >expect <<-\EOF && |
|
.gitmodules |
|
c |
|
subsub/d |
|
EOF |
|
|
|
git --git-dir=submodule/.git ls-files --recurse-submodules >actual && |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success '--recurse-submodules and pathspecs setup' ' |
|
echo e >submodule/subsub/e.txt && |
|
git -C submodule/subsub add e.txt && |
|
git -C submodule/subsub commit -m "adding e.txt" && |
|
echo f >submodule/f.TXT && |
|
echo g >submodule/g.txt && |
|
git -C submodule add f.TXT g.txt && |
|
git -C submodule commit -m "add f and g" && |
|
echo h >h.txt && |
|
mkdir sib && |
|
echo sib >sib/file && |
|
git add h.txt sib/file && |
|
git commit -m "add h and sib/file" && |
|
git init sub && |
|
echo sub >sub/file && |
|
git -C sub add file && |
|
git -C sub commit -m "add file" && |
|
git submodule add ./sub && |
|
git commit -m "added sub" && |
|
|
|
cat >expect <<-\EOF && |
|
.gitmodules |
|
a |
|
b/b |
|
h.txt |
|
sib/file |
|
sub/file |
|
submodule/.gitmodules |
|
submodule/c |
|
submodule/f.TXT |
|
submodule/g.txt |
|
submodule/subsub/d |
|
submodule/subsub/e.txt |
|
EOF |
|
|
|
git ls-files --recurse-submodules >actual && |
|
test_cmp expect actual && |
|
cat actual && |
|
git ls-files --recurse-submodules "*" >actual && |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success 'inactive submodule' ' |
|
test_when_finished "git config --bool submodule.submodule.active true" && |
|
test_when_finished "git -C submodule config --bool submodule.subsub.active true" && |
|
git config --bool submodule.submodule.active "false" && |
|
|
|
cat >expect <<-\EOF && |
|
.gitmodules |
|
a |
|
b/b |
|
h.txt |
|
sib/file |
|
sub/file |
|
submodule |
|
EOF |
|
|
|
git ls-files --recurse-submodules >actual && |
|
test_cmp expect actual && |
|
|
|
git config --bool submodule.submodule.active "true" && |
|
git -C submodule config --bool submodule.subsub.active "false" && |
|
|
|
cat >expect <<-\EOF && |
|
.gitmodules |
|
a |
|
b/b |
|
h.txt |
|
sib/file |
|
sub/file |
|
submodule/.gitmodules |
|
submodule/c |
|
submodule/f.TXT |
|
submodule/g.txt |
|
submodule/subsub |
|
EOF |
|
|
|
git ls-files --recurse-submodules >actual && |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success '--recurse-submodules and pathspecs' ' |
|
cat >expect <<-\EOF && |
|
h.txt |
|
submodule/g.txt |
|
submodule/subsub/e.txt |
|
EOF |
|
|
|
git ls-files --recurse-submodules "*.txt" >actual && |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success '--recurse-submodules and pathspecs' ' |
|
cat >expect <<-\EOF && |
|
h.txt |
|
submodule/f.TXT |
|
submodule/g.txt |
|
submodule/subsub/e.txt |
|
EOF |
|
|
|
git ls-files --recurse-submodules ":(icase)*.txt" >actual && |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success '--recurse-submodules and pathspecs' ' |
|
cat >expect <<-\EOF && |
|
h.txt |
|
submodule/f.TXT |
|
submodule/g.txt |
|
EOF |
|
|
|
git ls-files --recurse-submodules ":(icase)*.txt" ":(exclude)submodule/subsub/*" >actual && |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success '--recurse-submodules and pathspecs' ' |
|
cat >expect <<-\EOF && |
|
sub/file |
|
EOF |
|
|
|
git ls-files --recurse-submodules "sub" >actual && |
|
test_cmp expect actual && |
|
git ls-files --recurse-submodules "sub/" >actual && |
|
test_cmp expect actual && |
|
git ls-files --recurse-submodules "sub/file" >actual && |
|
test_cmp expect actual && |
|
git ls-files --recurse-submodules "su*/file" >actual && |
|
test_cmp expect actual && |
|
git ls-files --recurse-submodules "su?/file" >actual && |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success '--recurse-submodules and pathspecs' ' |
|
cat >expect <<-\EOF && |
|
sib/file |
|
sub/file |
|
EOF |
|
|
|
git ls-files --recurse-submodules "s??/file" >actual && |
|
test_cmp expect actual && |
|
git ls-files --recurse-submodules "s???file" >actual && |
|
test_cmp expect actual && |
|
git ls-files --recurse-submodules "s*file" >actual && |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success '--recurse-submodules and relative paths' ' |
|
# From subdir |
|
cat >expect <<-\EOF && |
|
b |
|
EOF |
|
git -C b ls-files --recurse-submodules >actual && |
|
test_cmp expect actual && |
|
|
|
# Relative path to top |
|
cat >expect <<-\EOF && |
|
../.gitmodules |
|
../a |
|
b |
|
../h.txt |
|
../sib/file |
|
../sub/file |
|
../submodule/.gitmodules |
|
../submodule/c |
|
../submodule/f.TXT |
|
../submodule/g.txt |
|
../submodule/subsub/d |
|
../submodule/subsub/e.txt |
|
EOF |
|
git -C b ls-files --recurse-submodules -- .. >actual && |
|
test_cmp expect actual && |
|
|
|
# Relative path to submodule |
|
cat >expect <<-\EOF && |
|
../submodule/.gitmodules |
|
../submodule/c |
|
../submodule/f.TXT |
|
../submodule/g.txt |
|
../submodule/subsub/d |
|
../submodule/subsub/e.txt |
|
EOF |
|
git -C b ls-files --recurse-submodules -- ../submodule >actual && |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success '--recurse-submodules does not support --error-unmatch' ' |
|
test_must_fail git ls-files --recurse-submodules --error-unmatch 2>actual && |
|
test_i18ngrep "does not support --error-unmatch" actual |
|
' |
|
|
|
test_incompatible_with_recurse_submodules () { |
|
test_expect_success "--recurse-submodules and $1 are incompatible" " |
|
test_must_fail git ls-files --recurse-submodules $1 2>actual && |
|
test_i18ngrep 'unsupported mode' actual |
|
" |
|
} |
|
|
|
test_incompatible_with_recurse_submodules --deleted |
|
test_incompatible_with_recurse_submodules --modified |
|
test_incompatible_with_recurse_submodules --others |
|
test_incompatible_with_recurse_submodules --stage |
|
test_incompatible_with_recurse_submodules --killed |
|
test_incompatible_with_recurse_submodules --unmerged |
|
|
|
test_done
|
|
|