Merge git://repo.or.cz/git-gui
[git] / t / t3001-ls-files-others-exclude.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2005 Junio C Hamano
4 #
5
6 test_description='git ls-files --others --exclude
7
8 This test runs git ls-files --others and tests --exclude patterns.
9 '
10
11 . ./test-lib.sh
12
13 rm -fr one three
14 for dir in . one one/two three
15 do
16   mkdir -p $dir &&
17   for i in 1 2 3 4 5 6 7 8
18   do
19     >$dir/a.$i
20   done
21 done
22
23 cat >expect <<EOF
24 a.2
25 a.4
26 a.5
27 a.8
28 one/a.3
29 one/a.4
30 one/a.5
31 one/a.7
32 one/two/a.2
33 one/two/a.3
34 one/two/a.5
35 one/two/a.7
36 one/two/a.8
37 three/a.2
38 three/a.3
39 three/a.4
40 three/a.5
41 three/a.8
42 EOF
43
44 echo '.gitignore
45 output
46 expect
47 .gitignore
48 *.7
49 !*.8' >.git/ignore
50
51 echo '*.1
52 /*.3
53 !*.6' >.gitignore
54 echo '*.2
55 two/*.4
56 !*.7
57 *.8' >one/.gitignore
58 echo '!*.2
59 !*.8' >one/two/.gitignore
60
61 test_expect_success \
62     'git ls-files --others with various exclude options.' \
63     'git ls-files --others \
64        --exclude=\*.6 \
65        --exclude-per-directory=.gitignore \
66        --exclude-from=.git/ignore \
67        >output &&
68      test_cmp expect output'
69
70 # Test \r\n (MSDOS-like systems)
71 printf '*.1\r\n/*.3\r\n!*.6\r\n' >.gitignore
72
73 test_expect_success \
74     'git ls-files --others with \r\n line endings.' \
75     'git ls-files --others \
76        --exclude=\*.6 \
77        --exclude-per-directory=.gitignore \
78        --exclude-from=.git/ignore \
79        >output &&
80      test_cmp expect output'
81
82 cat > excludes-file << EOF
83 *.[1-8]
84 e*
85 EOF
86
87 git config core.excludesFile excludes-file
88
89 git status | grep "^#   " > output
90
91 cat > expect << EOF
92 #       .gitignore
93 #       a.6
94 #       one/
95 #       output
96 #       three/
97 EOF
98
99 test_expect_success 'git status honors core.excludesfile' \
100         'test_cmp expect output'
101
102 test_expect_success 'trailing slash in exclude allows directory match(1)' '
103
104         git ls-files --others --exclude=one/ >output &&
105         if grep "^one/" output
106         then
107                 echo Ooops
108                 false
109         else
110                 : happy
111         fi
112
113 '
114
115 test_expect_success 'trailing slash in exclude allows directory match (2)' '
116
117         git ls-files --others --exclude=one/two/ >output &&
118         if grep "^one/two/" output
119         then
120                 echo Ooops
121                 false
122         else
123                 : happy
124         fi
125
126 '
127
128 test_expect_success 'trailing slash in exclude forces directory match (1)' '
129
130         >two
131         git ls-files --others --exclude=two/ >output &&
132         grep "^two" output
133
134 '
135
136 test_expect_success 'trailing slash in exclude forces directory match (2)' '
137
138         git ls-files --others --exclude=one/a.1/ >output &&
139         grep "^one/a.1" output
140
141 '
142
143 test_done