Add tests for funny pathnames.
[git.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        and spaces'
16
17 cat >"$p0" <<\EOF
18 1. A quick brown fox jumps over the lazy cat, oops dog.
19 2. A quick brown fox jumps over the lazy cat, oops dog.
20 3. A quick brown fox jumps over the lazy cat, oops dog.
21 EOF
22
23 cat >"$p1" "$p0"
24
25 echo 'no-funny' >expected
26 test_expect_success 'git-ls-files no-funny' \
27         'git-update-index --add "$p0" &&
28         git-ls-files >current &&
29         diff -u expected current'
30
31 t0=`git-write-tree`
32 echo "$t0" >t0
33
34 echo 'no-funny
35 "tabs\tand spaces"' >expected
36 test_expect_success 'git-ls-files with-funny' \
37         'git-update-index --add "$p1" &&
38         git-ls-files >current &&
39         diff -u expected current'
40
41 echo 'no-funny
42 tabs    and spaces' >expected
43 test_expect_success 'git-ls-files -z with-funny' \
44         'git-ls-files -z | tr \\0 \\012 >current &&
45         diff -u expected current'
46
47 t1=`git-write-tree`
48 echo "$t1" >t1
49
50 echo 'no-funny
51 "tabs\tand spaces"' >expected
52 test_expect_success 'git-ls-tree with funny' \
53         'git-ls-tree -r $t1 | sed -e "s/^[^     ]*      //" >current &&
54          diff -u expected current'
55
56 echo 'A "tabs\tand spaces"' >expected
57 test_expect_success 'git-diff-index with-funny' \
58         'git-diff-index --name-status $t0 >current &&
59         diff -u expected current'
60
61 test_expect_success 'git-diff-tree with-funny' \
62         'git-diff-tree --name-status $t0 $t1 >current &&
63         diff -u expected current'
64
65 echo 'A
66 tabs    and spaces' >expected
67 test_expect_success 'git-diff-index -z with-funny' \
68         'git-diff-index -z --name-status $t0 | tr \\0 \\012 >current &&
69         diff -u expected current'
70
71 test_expect_success 'git-diff-tree -z with-funny' \
72         'git-diff-tree -z --name-status $t0 $t1 | tr \\0 \\012 >current &&
73         diff -u expected current'
74
75 echo 'CNUM      no-funny        "tabs\tand spaces"' >expected
76 test_expect_success 'git-diff-tree -C with-funny' \
77         'git-diff-tree -C --find-copies-harder --name-status \
78                 $t0 $t1 | sed -e 's/^C[0-9]*/CNUM/' >current &&
79         diff -u expected current'
80
81 echo 'RNUM      no-funny        "tabs\tand spaces"' >expected
82 test_expect_success 'git-diff-tree delete with-funny' \
83         'git-update-index --force-remove "$p0" &&
84         git-diff-index -M --name-status \
85                 $t0 | sed -e 's/^R[0-9]*/RNUM/' >current &&
86         diff -u expected current'
87
88 echo 'diff --git a/no-funny "b/tabs\tand spaces"
89 similarity index NUM%
90 rename from no-funny
91 rename to "tabs\tand spaces"' >expected
92
93 test_expect_success 'git-diff-tree delete with-funny' \
94         'git-diff-index -M -p $t0 |
95          sed -e "s/index [0-9]*%/index NUM%/" >current &&
96          diff -u expected current'
97
98 chmod +x "$p1"
99 echo 'diff --git a/no-funny "b/tabs\tand spaces"
100 old mode 100644
101 new mode 100755
102 similarity index NUM%
103 rename from no-funny
104 rename to "tabs\tand spaces"' >expected
105
106 test_expect_success 'git-diff-tree delete with-funny' \
107         'git-diff-index -M -p $t0 |
108          sed -e "s/index [0-9]*%/index NUM%/" >current &&
109          diff -u expected current'
110
111 echo >expected ' "tabs\tand spaces"
112  1 files changed, 0 insertions(+), 0 deletions(-)'
113 test_expect_success 'git-diff-tree rename with-funny applied' \
114         'git-diff-index -M -p $t0 |
115          git-apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
116          diff -u expected current'
117
118 echo >expected ' no-funny
119  "tabs\tand spaces"
120  2 files changed, 3 insertions(+), 3 deletions(-)'
121
122 test_expect_success 'git-diff-tree delete with-funny applied' \
123         'git-diff-index -p $t0 |
124          git-apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
125          diff -u expected current'
126
127 test_expect_success 'git-apply non-git diff' \
128         'git-diff-index -p $t0 |
129          sed -ne "/^[-+@]/p" |
130          git-apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
131          diff -u expected current'
132
133 test_done