Merge branch 'jc/maint-merge-recursive-fix'
[git] / t / t3300-funny-names.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2005 Junio C Hamano
4 #
5
6 test_description='Pathnames with funny characters.
7
8 This test tries pathnames with funny characters in the working
9 tree, index, and tree objects.
10 '
11
12 . ./test-lib.sh
13
14 p0='no-funny'
15 p1='tabs        ," (dq) and spaces'
16 p2='just space'
17
18 cat >"$p0" <<\EOF
19 1. A quick brown fox jumps over the lazy cat, oops dog.
20 2. A quick brown fox jumps over the lazy cat, oops dog.
21 3. A quick brown fox jumps over the lazy cat, oops dog.
22 EOF
23
24 cat 2>/dev/null >"$p1" "$p0"
25 echo 'Foo Bar Baz' >"$p2"
26
27 test -f "$p1" && cmp "$p0" "$p1" || {
28         # since FAT/NTFS does not allow tabs in filenames, skip this test
29         say 'Your filesystem does not allow tabs in filenames, test skipped.'
30         test_done
31 }
32
33 echo 'just space
34 no-funny' >expected
35 test_expect_success 'git ls-files no-funny' \
36         'git update-index --add "$p0" "$p2" &&
37         git ls-files >current &&
38         test_cmp expected current'
39
40 t0=`git write-tree`
41 echo "$t0" >t0
42
43 cat > expected <<\EOF
44 just space
45 no-funny
46 "tabs\t,\" (dq) and spaces"
47 EOF
48 test_expect_success 'git ls-files with-funny' \
49         'git update-index --add "$p1" &&
50         git ls-files >current &&
51         test_cmp expected current'
52
53 echo 'just space
54 no-funny
55 tabs    ," (dq) and spaces' >expected
56 test_expect_success 'git ls-files -z with-funny' \
57         'git ls-files -z | perl -pe y/\\000/\\012/ >current &&
58         test_cmp expected current'
59
60 t1=`git write-tree`
61 echo "$t1" >t1
62
63 cat > expected <<\EOF
64 just space
65 no-funny
66 "tabs\t,\" (dq) and spaces"
67 EOF
68 test_expect_success 'git ls-tree with funny' \
69         'git ls-tree -r $t1 | sed -e "s/^[^     ]*      //" >current &&
70          test_cmp expected current'
71
72 cat > expected <<\EOF
73 A       "tabs\t,\" (dq) and spaces"
74 EOF
75 test_expect_success 'git diff-index with-funny' \
76         'git diff-index --name-status $t0 >current &&
77         test_cmp expected current'
78
79 test_expect_success 'git diff-tree with-funny' \
80         'git diff-tree --name-status $t0 $t1 >current &&
81         test_cmp expected current'
82
83 echo 'A
84 tabs    ," (dq) and spaces' >expected
85 test_expect_success 'git diff-index -z with-funny' \
86         'git diff-index -z --name-status $t0 | perl -pe y/\\000/\\012/ >current &&
87         test_cmp expected current'
88
89 test_expect_success 'git diff-tree -z with-funny' \
90         'git diff-tree -z --name-status $t0 $t1 | perl -pe y/\\000/\\012/ >current &&
91         test_cmp expected current'
92
93 cat > expected <<\EOF
94 CNUM    no-funny        "tabs\t,\" (dq) and spaces"
95 EOF
96 test_expect_success 'git diff-tree -C with-funny' \
97         'git diff-tree -C --find-copies-harder --name-status \
98                 $t0 $t1 | sed -e 's/^C[0-9]*/CNUM/' >current &&
99         test_cmp expected current'
100
101 cat > expected <<\EOF
102 RNUM    no-funny        "tabs\t,\" (dq) and spaces"
103 EOF
104 test_expect_success 'git diff-tree delete with-funny' \
105         'git update-index --force-remove "$p0" &&
106         git diff-index -M --name-status \
107                 $t0 | sed -e 's/^R[0-9]*/RNUM/' >current &&
108         test_cmp expected current'
109
110 cat > expected <<\EOF
111 diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
112 similarity index NUM%
113 rename from no-funny
114 rename to "tabs\t,\" (dq) and spaces"
115 EOF
116 test_expect_success 'git diff-tree delete with-funny' \
117         'git diff-index -M -p $t0 |
118          sed -e "s/index [0-9]*%/index NUM%/" >current &&
119          test_cmp expected current'
120
121 chmod +x "$p1"
122 cat > expected <<\EOF
123 diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
124 old mode 100644
125 new mode 100755
126 similarity index NUM%
127 rename from no-funny
128 rename to "tabs\t,\" (dq) and spaces"
129 EOF
130 test_expect_success 'git diff-tree delete with-funny' \
131         'git diff-index -M -p $t0 |
132          sed -e "s/index [0-9]*%/index NUM%/" >current &&
133          test_cmp expected current'
134
135 cat >expected <<\EOF
136  "tabs\t,\" (dq) and spaces"
137  1 files changed, 0 insertions(+), 0 deletions(-)
138 EOF
139 test_expect_success 'git diff-tree rename with-funny applied' \
140         'git diff-index -M -p $t0 |
141          git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
142          test_cmp expected current'
143
144 cat > expected <<\EOF
145  no-funny
146  "tabs\t,\" (dq) and spaces"
147  2 files changed, 3 insertions(+), 3 deletions(-)
148 EOF
149 test_expect_success 'git diff-tree delete with-funny applied' \
150         'git diff-index -p $t0 |
151          git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
152          test_cmp expected current'
153
154 test_expect_success 'git apply non-git diff' \
155         'git diff-index -p $t0 |
156          sed -ne "/^[-+@]/p" |
157          git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
158          test_cmp expected current'
159
160 test_done