2005-10-16 07:15:49 +08:00
|
|
|
#!/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-lib.sh
|
|
|
|
|
|
|
|
p0='no-funny'
|
2005-12-11 10:36:15 +08:00
|
|
|
p1='tabs ," (dq) and spaces'
|
2005-10-18 04:32:14 +08:00
|
|
|
p2='just space'
|
2005-10-16 07:15:49 +08:00
|
|
|
|
2012-03-13 12:59:52 +08:00
|
|
|
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" || :; } &&
|
2005-10-16 07:15:49 +08:00
|
|
|
|
2012-03-13 12:59:52 +08:00
|
|
|
if test -f "$p1" && cmp "$p0" "$p1"
|
|
|
|
then
|
|
|
|
test_set_prereq TABS_IN_FILENAMES
|
|
|
|
fi
|
|
|
|
'
|
2005-10-16 07:15:49 +08:00
|
|
|
|
2012-03-13 12:59:52 +08:00
|
|
|
if ! test_have_prereq TABS_IN_FILENAMES
|
2010-08-12 03:04:10 +08:00
|
|
|
then
|
2006-01-06 12:14:40 +08:00
|
|
|
# since FAT/NTFS does not allow tabs in filenames, skip this test
|
2012-03-13 12:59:52 +08:00
|
|
|
skip_all='Your filesystem does not allow tabs in filenames'
|
|
|
|
test_done
|
2010-08-12 03:04:10 +08:00
|
|
|
fi
|
2006-01-06 12:14:40 +08:00
|
|
|
|
2012-03-13 12:59:52 +08:00
|
|
|
test_expect_success 'setup: populate index and tree' '
|
|
|
|
git update-index --add "$p0" "$p2" &&
|
|
|
|
t0=$(git write-tree)
|
|
|
|
'
|
2010-08-12 03:04:10 +08:00
|
|
|
|
2012-03-13 12:59:52 +08:00
|
|
|
test_expect_success 'ls-files prints space in filename verbatim' '
|
|
|
|
printf "%s\n" "just space" no-funny >expected &&
|
2007-07-03 13:52:14 +08:00
|
|
|
git ls-files >current &&
|
2012-03-13 12:59:52 +08:00
|
|
|
test_cmp expected current
|
|
|
|
'
|
2005-10-16 07:15:49 +08:00
|
|
|
|
2012-03-13 12:59:52 +08:00
|
|
|
test_expect_success 'setup: add funny filename' '
|
|
|
|
git update-index --add "$p1" &&
|
|
|
|
t1=$(git write-tree)
|
2010-08-12 03:04:10 +08:00
|
|
|
'
|
|
|
|
|
2012-03-13 12:59:52 +08:00
|
|
|
test_expect_success 'ls-files quotes funny filename' '
|
|
|
|
cat >expected <<-\EOF &&
|
|
|
|
just space
|
|
|
|
no-funny
|
|
|
|
"tabs\t,\" (dq) and spaces"
|
|
|
|
EOF
|
2007-07-03 13:52:14 +08:00
|
|
|
git ls-files >current &&
|
2012-03-13 12:59:52 +08:00
|
|
|
test_cmp expected current
|
|
|
|
'
|
2005-10-16 07:15:49 +08:00
|
|
|
|
2012-03-13 12:59:52 +08:00
|
|
|
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
|
|
|
|
'
|
2005-10-16 07:15:49 +08:00
|
|
|
|
2012-03-13 12:59:52 +08:00
|
|
|
test_expect_success 'ls-tree quotes funny filename' '
|
|
|
|
cat >expected <<-\EOF &&
|
|
|
|
just space
|
|
|
|
no-funny
|
|
|
|
"tabs\t,\" (dq) and spaces"
|
2012-03-13 12:58:59 +08:00
|
|
|
EOF
|
2012-03-13 12:59:52 +08:00
|
|
|
git ls-tree -r $t1 >ls-tree &&
|
|
|
|
sed -e "s/^[^ ]* //" <ls-tree >current &&
|
|
|
|
test_cmp expected current
|
|
|
|
'
|
2012-03-13 12:58:59 +08:00
|
|
|
|
2012-03-13 12:59:52 +08:00
|
|
|
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
|
2010-08-12 03:04:10 +08:00
|
|
|
'
|
|
|
|
|
2012-03-13 12:59:52 +08:00
|
|
|
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
|
|
|
|
'
|
2005-10-16 07:15:49 +08:00
|
|
|
|
2012-03-13 12:59:52 +08:00
|
|
|
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_i18ncmp 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
|
|
|
|
'
|
2005-10-16 07:15:49 +08:00
|
|
|
|
|
|
|
test_done
|