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.
218 lines
5.4 KiB
218 lines
5.4 KiB
#!/bin/sh |
|
# |
|
# Copyright (c) 2005 Junio C Hamano |
|
# |
|
|
|
test_description='Pathnames with funny characters. |
|
|
|
This test tries pathnames with funny characters in the working |
|
tree, index, and tree objects. |
|
' |
|
|
|
TEST_PASSES_SANITIZE_LEAK=true |
|
. ./test-lib.sh |
|
|
|
HT=' ' |
|
|
|
test_have_prereq MINGW || |
|
echo 2>/dev/null > "Name with an${HT}HT" |
|
if ! test -f "Name with an${HT}HT" |
|
then |
|
# since FAT/NTFS does not allow tabs in filenames, skip this test |
|
skip_all='Your filesystem does not allow tabs in filenames' |
|
test_done |
|
fi |
|
|
|
p0='no-funny' |
|
p1='tabs ," (dq) and spaces' |
|
p2='just space' |
|
|
|
test_expect_success 'setup' ' |
|
cat >"$p0" <<-\EOF && |
|
1. A quick brown fox jumps over the lazy cat, oops dog. |
|
2. A quick brown fox jumps over the lazy cat, oops dog. |
|
3. A quick brown fox jumps over the lazy cat, oops dog. |
|
EOF |
|
|
|
{ cat "$p0" >"$p1" || :; } && |
|
{ echo "Foo Bar Baz" >"$p2" || :; } |
|
' |
|
|
|
test_expect_success 'setup: populate index and tree' ' |
|
git update-index --add "$p0" "$p2" && |
|
t0=$(git write-tree) |
|
' |
|
|
|
test_expect_success 'ls-files prints space in filename verbatim' ' |
|
printf "%s\n" "just space" no-funny >expected && |
|
git ls-files >current && |
|
test_cmp expected current |
|
' |
|
|
|
test_expect_success 'setup: add funny filename' ' |
|
git update-index --add "$p1" && |
|
t1=$(git write-tree) |
|
' |
|
|
|
test_expect_success 'ls-files quotes funny filename' ' |
|
cat >expected <<-\EOF && |
|
just space |
|
no-funny |
|
"tabs\t,\" (dq) and spaces" |
|
EOF |
|
git ls-files >current && |
|
test_cmp expected current |
|
' |
|
|
|
test_expect_success 'ls-files -z does not quote funny filename' ' |
|
cat >expected <<-\EOF && |
|
just space |
|
no-funny |
|
tabs ," (dq) and spaces |
|
EOF |
|
git ls-files -z >ls-files.z && |
|
perl -pe "y/\000/\012/" <ls-files.z >current && |
|
test_cmp expected current |
|
' |
|
|
|
test_expect_success 'ls-tree quotes funny filename' ' |
|
cat >expected <<-\EOF && |
|
just space |
|
no-funny |
|
"tabs\t,\" (dq) and spaces" |
|
EOF |
|
git ls-tree -r $t1 >ls-tree && |
|
sed -e "s/^[^ ]* //" <ls-tree >current && |
|
test_cmp expected current |
|
' |
|
|
|
test_expect_success 'diff-index --name-status quotes funny filename' ' |
|
cat >expected <<-\EOF && |
|
A "tabs\t,\" (dq) and spaces" |
|
EOF |
|
git diff-index --name-status $t0 >current && |
|
test_cmp expected current |
|
' |
|
|
|
test_expect_success 'diff-tree --name-status quotes funny filename' ' |
|
cat >expected <<-\EOF && |
|
A "tabs\t,\" (dq) and spaces" |
|
EOF |
|
git diff-tree --name-status $t0 $t1 >current && |
|
test_cmp expected current |
|
' |
|
|
|
test_expect_success 'diff-index -z does not quote funny filename' ' |
|
cat >expected <<-\EOF && |
|
A |
|
tabs ," (dq) and spaces |
|
EOF |
|
git diff-index -z --name-status $t0 >diff-index.z && |
|
perl -pe "y/\000/\012/" <diff-index.z >current && |
|
test_cmp expected current |
|
' |
|
|
|
test_expect_success 'diff-tree -z does not quote funny filename' ' |
|
cat >expected <<-\EOF && |
|
A |
|
tabs ," (dq) and spaces |
|
EOF |
|
git diff-tree -z --name-status $t0 $t1 >diff-tree.z && |
|
perl -pe y/\\000/\\012/ <diff-tree.z >current && |
|
test_cmp expected current |
|
' |
|
|
|
test_expect_success 'diff-tree --find-copies-harder quotes funny filename' ' |
|
cat >expected <<-\EOF && |
|
CNUM no-funny "tabs\t,\" (dq) and spaces" |
|
EOF |
|
git diff-tree -C --find-copies-harder --name-status $t0 $t1 >out && |
|
sed -e "s/^C[0-9]*/CNUM/" <out >current && |
|
test_cmp expected current |
|
' |
|
|
|
test_expect_success 'setup: remove unfunny index entry' ' |
|
git update-index --force-remove "$p0" |
|
' |
|
|
|
test_expect_success 'diff-tree -M quotes funny filename' ' |
|
cat >expected <<-\EOF && |
|
RNUM no-funny "tabs\t,\" (dq) and spaces" |
|
EOF |
|
git diff-index -M --name-status $t0 >out && |
|
sed -e "s/^R[0-9]*/RNUM/" <out >current && |
|
test_cmp expected current |
|
' |
|
|
|
test_expect_success 'diff-index -M -p quotes funny filename' ' |
|
cat >expected <<-\EOF && |
|
diff --git a/no-funny "b/tabs\t,\" (dq) and spaces" |
|
similarity index NUM% |
|
rename from no-funny |
|
rename to "tabs\t,\" (dq) and spaces" |
|
EOF |
|
git diff-index -M -p $t0 >diff && |
|
sed -e "s/index [0-9]*%/index NUM%/" <diff >current && |
|
test_cmp expected current |
|
' |
|
|
|
test_expect_success 'setup: mode change' ' |
|
chmod +x "$p1" |
|
' |
|
|
|
test_expect_success 'diff-index -M -p with mode change quotes funny filename' ' |
|
cat >expected <<-\EOF && |
|
diff --git a/no-funny "b/tabs\t,\" (dq) and spaces" |
|
old mode 100644 |
|
new mode 100755 |
|
similarity index NUM% |
|
rename from no-funny |
|
rename to "tabs\t,\" (dq) and spaces" |
|
EOF |
|
git diff-index -M -p $t0 >diff && |
|
sed -e "s/index [0-9]*%/index NUM%/" <diff >current && |
|
test_cmp expected current |
|
' |
|
|
|
test_expect_success 'diffstat for rename quotes funny filename' ' |
|
cat >expected <<-\EOF && |
|
"tabs\t,\" (dq) and spaces" |
|
1 file changed, 0 insertions(+), 0 deletions(-) |
|
EOF |
|
git diff-index -M -p $t0 >diff && |
|
git apply --stat <diff >diffstat && |
|
sed -e "s/|.*//" -e "s/ *\$//" <diffstat >current && |
|
test_cmp expected current |
|
' |
|
|
|
test_expect_success 'numstat for rename quotes funny filename' ' |
|
cat >expected <<-\EOF && |
|
0 0 "tabs\t,\" (dq) and spaces" |
|
EOF |
|
git diff-index -M -p $t0 >diff && |
|
git apply --numstat <diff >current && |
|
test_cmp expected current |
|
' |
|
|
|
test_expect_success 'numstat without -M quotes funny filename' ' |
|
cat >expected <<-\EOF && |
|
0 3 no-funny |
|
3 0 "tabs\t,\" (dq) and spaces" |
|
EOF |
|
git diff-index -p $t0 >diff && |
|
git apply --numstat <diff >current && |
|
test_cmp expected current |
|
' |
|
|
|
test_expect_success 'numstat for non-git rename diff quotes funny filename' ' |
|
cat >expected <<-\EOF && |
|
0 3 no-funny |
|
3 0 "tabs\t,\" (dq) and spaces" |
|
EOF |
|
git diff-index -p $t0 >git-diff && |
|
sed -ne "/^[-+@]/p" <git-diff >diff && |
|
git apply --numstat <diff >current && |
|
test_cmp expected current |
|
' |
|
|
|
test_done
|
|
|