summaryrefslogtreecommitdiff
path: root/t/t3101-ls-tree-dirname.sh
blob: 54103683480eb5f2a18ceac3f1018769ea31b18f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#!/bin/sh
#
# Copyright (c) 2005 Junio C Hamano
# Copyright (c) 2005 Robert Fitzsimons
#
 
test_description='git-ls-tree directory and filenames handling.
 
This test runs git-ls-tree with the following in a tree.
 
    1.txt              - a file
    2.txt              - a file
    path0/a/b/c/1.txt  - a file in a directory
    path1/b/c/1.txt    - a file in a directory
    path2/1.txt        - a file in a directory
    path3/1.txt        - a file in a directory
    path3/2.txt        - a file in a directory
 
Test the handling of mulitple directories which have matching file
entries.  Also test odd filename and missing entries handling.
'
. ./test-lib.sh
 
test_expect_success \
    'setup' \
    'echo 111 >1.txt &&
     echo 222 >2.txt &&
     mkdir path0 path0/a path0/a/b path0/a/b/c &&
     echo 111 >path0/a/b/c/1.txt &&
     mkdir path1 path1/b path1/b/c &&
     echo 111 >path1/b/c/1.txt &&
     mkdir path2 &&
     echo 111 >path2/1.txt &&
     mkdir path3 &&
     echo 111 >path3/1.txt &&
     echo 222 >path3/2.txt &&
     find *.txt path* \( -type f -o -type l \) -print |
     xargs git-update-index --add &&
     tree=`git-write-tree` &&
     echo $tree'
 
_x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
_x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
test_output () {
    sed -e "s/ $_x40	/ X	/" <current >check
    diff -u expected check
}
 
test_expect_success \
    'ls-tree plain' \
    'git-ls-tree $tree >current &&
     cat >expected <<\EOF &&
100644 blob X	1.txt
100644 blob X	2.txt
040000 tree X	path0
040000 tree X	path1
040000 tree X	path2
040000 tree X	path3
EOF
     test_output'
 
test_expect_success \
    'ls-tree recursive' \
    'git-ls-tree -r $tree >current &&
     cat >expected <<\EOF &&
100644 blob X	1.txt
100644 blob X	2.txt
040000 tree X	path0
040000 tree X	path0/a
040000 tree X	path0/a/b
040000 tree X	path0/a/b/c
100644 blob X	path0/a/b/c/1.txt
040000 tree X	path1
040000 tree X	path1/b
040000 tree X	path1/b/c
100644 blob X	path1/b/c/1.txt
040000 tree X	path2
100644 blob X	path2/1.txt
040000 tree X	path3
100644 blob X	path3/1.txt
100644 blob X	path3/2.txt
EOF
     test_output'
 
test_expect_success \
    'ls-tree filter 1.txt' \
    'git-ls-tree $tree 1.txt >current &&
     cat >expected <<\EOF &&
100644 blob X	1.txt
EOF
     test_output'
 
test_expect_success \
    'ls-tree filter path1/b/c/1.txt' \
    'git-ls-tree $tree path1/b/c/1.txt >current &&
     cat >expected <<\EOF &&
100644 blob X	path1/b/c/1.txt
EOF
     test_output'
 
test_expect_success \
    'ls-tree filter all 1.txt files' \
    'git-ls-tree $tree 1.txt path0/a/b/c/1.txt path1/b/c/1.txt path2/1.txt path3/1.txt >current &&
     cat >expected <<\EOF &&
100644 blob X	1.txt
100644 blob X	path0/a/b/c/1.txt
100644 blob X	path1/b/c/1.txt
100644 blob X	path2/1.txt
100644 blob X	path3/1.txt
EOF
     test_output'
 
test_expect_success \
    'ls-tree filter directories' \
    'git-ls-tree $tree path3 path2 path0/a/b/c path1/b/c path0/a >current &&
     cat >expected <<\EOF &&
040000 tree X	path3
100644 blob X	path3/1.txt
100644 blob X	path3/2.txt
040000 tree X	path2
100644 blob X	path2/1.txt
040000 tree X	path0/a/b/c
100644 blob X	path0/a/b/c/1.txt
040000 tree X	path1/b/c
100644 blob X	path1/b/c/1.txt
040000 tree X	path0/a
040000 tree X	path0/a/b
EOF
     test_output'
 
test_expect_success \
    'ls-tree filter odd names' \
    'git-ls-tree $tree 1.txt /1.txt //1.txt path3/1.txt /path3/1.txt //path3//1.txt path3 /path3/ path3// >current &&
     cat >expected <<\EOF &&
100644 blob X	1.txt
100644 blob X	1.txt
100644 blob X	1.txt
100644 blob X	path3/1.txt
100644 blob X	path3/1.txt
100644 blob X	path3/1.txt
040000 tree X	path3
100644 blob X	path3/1.txt
100644 blob X	path3/2.txt
040000 tree X	path3
100644 blob X	path3/1.txt
100644 blob X	path3/2.txt
040000 tree X	path3
100644 blob X	path3/1.txt
100644 blob X	path3/2.txt
EOF
     test_output'
 
test_expect_success \
    'ls-tree filter missing files and extra slashes' \
    'git-ls-tree $tree 1.txt/ abc.txt path3//23.txt path3/2.txt/// >current &&
     cat >expected <<\EOF &&
EOF
     test_output'
 
test_done