d5974ef0029e75bb030ae8bf94f1b93eba6b5f5d
[scm/test.git] / test / test-ls-files.sh
1 #!/usr/bin/env bash
2
3 . "test/testlib.sh"
4
5 begin_test "ls-files"
6 (
7   set -e
8
9   mkdir repo
10   cd repo
11   git init
12   git lfs track "*.dat" | grep "Tracking \"\*.dat\""
13   echo "some data" > some.dat
14   echo "some text" > some.txt
15   echo "missing" > missing.dat
16   git add missing.dat
17   git commit -m "add missing file"
18   [ "6bbd052ab0 * missing.dat" = "$(git lfs ls-files)" ]
19
20   git rm missing.dat
21   git add some.dat some.txt
22   git commit -m "added some files, removed missing one"
23
24   git lfs ls-files | tee ls.log
25   grep some.dat ls.log
26   [ `wc -l < ls.log` = 1 ]
27
28   diff -u <(git lfs ls-files --debug) <(cat <<-EOF
29 filepath: some.dat
30     size: 10
31 checkout: true
32 download: true
33      oid: sha256 5aa03f96c77536579166fba147929626cc3a97960e994057a9d80271a736d10f
34  version: https://git-lfs.github.com/spec/v1
35
36 EOF)
37 )
38 end_test
39
40 begin_test "ls-files: --size"
41 (
42   set -e
43
44   reponame="ls-files-size"
45   git init "$reponame"
46   cd "$reponame"
47
48   git lfs track "*.dat"
49   git add .gitattributes
50   git commit -m "initial commit"
51
52   contents="contents"
53   size="$(printf "$contents" | wc -c | awk '{ print $1 }')"
54   printf "$contents" > a.dat
55
56   git add a.dat
57   git commit -m "add a.dat"
58
59   git lfs ls-files --size 2>&1 | tee ls.log
60   [ "d1b2a59fbe * a.dat (8 B)" = "$(cat ls.log)" ]
61 )
62 end_test
63
64 begin_test "ls-files: indexed files without tree"
65 (
66   set -e
67
68   reponame="ls-files-indexed-files-without-tree"
69   git init "$reponame"
70   cd "$reponame"
71
72   git lfs track '*.dat'
73   git add .gitattributes
74
75   contents="a"
76   oid="$(calc_oid "$contents")"
77   printf "$contents" > a.dat
78
79   [ "" = "$(git lfs ls-files)" ]
80
81   git add a.dat
82
83   [ "${oid:0:10} * a.dat" = "$(git lfs ls-files)" ]
84 )
85 end_test
86
87 begin_test "ls-files: indexed file with tree"
88 (
89   set -e
90
91   reponame="ls-files-indexed-files-with-tree"
92   git init "$reponame"
93   cd "$reponame"
94
95   git lfs track '*.dat'
96   git add .gitattributes
97   git commit -m "initial commit"
98
99   tree_contents="a"
100   tree_oid="$(calc_oid "$tree_contents")"
101
102   printf "$tree_contents" > a.dat
103   git add a.dat
104   git commit -m "add a.dat"
105
106   index_contents="b"
107   index_oid="$(calc_oid "$index_contents")"
108
109   printf "$index_contents" > a.dat
110   git add a.dat
111
112   [ "${index_oid:0:10} * a.dat" = "$(git lfs ls-files)" ]
113 )
114 end_test
115
116 begin_test "ls-files: outside git repository"
117 (
118   set +e
119   git lfs ls-files 2>&1 > ls-files.log
120   res=$?
121
122   set -e
123   if [ "$res" = "0" ]; then
124     echo "Passes because $GIT_LFS_TEST_DIR is unset."
125     exit 0
126   fi
127   [ "$res" = "128" ]
128   grep "Not in a git repository" ls-files.log
129 )
130 end_test
131
132 begin_test "ls-files: --include"
133 (
134   set -e
135
136   git init ls-files-include
137   cd ls-files-include
138
139   git lfs track "*.dat" "*.bin"
140   echo "a" > a.dat
141   echo "b" > b.dat
142   echo "c" > c.bin
143
144   git add *.gitattributes a.dat b.dat c.bin
145   git commit -m "initial commit"
146
147   git lfs ls-files --include="*.dat" 2>&1 | tee ls-files.log
148
149   [ "0" -eq "$(grep -c "\.bin" ls-files.log)" ]
150   [ "2" -eq "$(grep -c "\.dat" ls-files.log)" ]
151 )
152 end_test
153
154 begin_test "ls-files: --exclude"
155 (
156   set -e
157
158   git init ls-files-exclude
159   cd ls-files-exclude
160
161   mkdir dir
162
163   git lfs track "*.dat"
164   echo "a" > a.dat
165   echo "b" > b.dat
166   echo "c" > dir/c.dat
167
168   git add *.gitattributes a.dat b.dat dir/c.dat
169   git commit -m "initial commit"
170
171   git lfs ls-files --exclude="dir/" 2>&1 | tee ls-files.log
172
173   [ "0" -eq "$(grep -c "dir" ls-files.log)" ]
174   [ "2" -eq "$(grep -c "\.dat" ls-files.log)" ]
175 )
176 end_test
177
178 begin_test "ls-files: before first commit"
179 (
180   set -e
181
182   reponame="ls-files-before-first-commit"
183   git init "$reponame"
184   cd "$reponame"
185
186   if [ 0 -ne $(git lfs ls-files | wc -l) ]; then
187     echo >&2 "fatal: expected \`git lfs ls-files\` to produce no output"
188     exit 1
189   fi
190 )
191 end_test
192
193 begin_test "ls-files: show duplicate files"
194 (
195   set -e
196
197   mkdir dupRepoShort
198   cd dupRepoShort
199   git init
200
201   git lfs track "*.tgz" | grep "Tracking \"\*.tgz\""
202   echo "test content" > one.tgz
203   echo "test content" > two.tgz
204   git add one.tgz
205   git add two.tgz
206   git commit -m "add duplicate files"
207
208   expected="$(echo "a1fff0ffef * one.tgz
209 a1fff0ffef * two.tgz")"
210
211   [ "$expected" = "$(git lfs ls-files)" ]
212 )
213 end_test
214
215 begin_test "ls-files: show duplicate files with long OID"
216 (
217   set -e
218
219   mkdir dupRepoLong
220   cd dupRepoLong
221   git init
222
223   git lfs track "*.tgz" | grep "Tracking \"\*.tgz\""
224   echo "test content" > one.tgz
225   echo "test content" > two.tgz
226   git add one.tgz
227   git add two.tgz
228   git commit -m "add duplicate files with long OID"
229
230   expected="$(echo "a1fff0ffefb9eace7230c24e50731f0a91c62f9cefdfe77121c2f607125dffae * one.tgz
231 a1fff0ffefb9eace7230c24e50731f0a91c62f9cefdfe77121c2f607125dffae * two.tgz")"
232
233   [ "$expected" = "$(git lfs ls-files --long)" ]
234 )
235 end_test
236
237 begin_test "ls-files: history with --all"
238 (
239   set -e
240
241   reponame="ls-files-history-with-all"
242   git init "$reponame"
243   cd "$reponame"
244
245   git lfs track '*.dat'
246   printf "a" > a.dat
247   printf "b" > b.dat
248
249   git add .gitattributes a.dat b.dat
250   git commit -m "initial commit"
251
252   rm b.dat
253   git add b.dat
254   git commit -m "remove b.dat"
255
256   git lfs ls-files 2>&1 | tee ls-files.log
257   [ 1 -eq $(grep -c "a\.dat" ls-files.log) ]
258   [ 0 -eq $(grep -c "b\.dat" ls-files.log) ]
259
260   git lfs ls-files --all 2>&1 | tee ls-files-all.log
261   [ 1 -eq $(grep -c "a\.dat" ls-files-all.log) ]
262   [ 1 -eq $(grep -c "b\.dat" ls-files-all.log) ]
263 )
264 end_test
265
266 begin_test "ls-files: --all with argument(s)"
267 (
268   set -e
269
270   reponame="ls-files-all-with-arguments"
271   git init "$reponame"
272   cd "$reponame"
273
274   git lfs ls-files --all master 2>&1 | tee ls-files.log
275
276   if [ "0" -eq "${PIPESTATUS[0]}" ]; then
277     echo >&2 "fatal: \`git lfs ls-files --all master\` to fail"
278     exit 1
279   fi
280
281   [ "fatal: cannot use --all with explicit reference" = "$(cat ls-files.log)" ]
282 )
283 end_test
284
285 begin_test "ls-files: reference with --deleted"
286 (
287   set -e
288
289   reponame="ls-files-reference-with-deleted"
290   git init "$reponame"
291   cd "$reponame"
292
293   git lfs track "*.dat"
294   printf "a" > a.dat
295   git add .gitattributes a.dat
296   git commit -m "initial commit"
297
298   rm a.dat
299   git add a.dat
300   git commit -m "a.dat: remove a.dat"
301
302   git lfs ls-files 2>&1 | tee ls-files.log
303   git lfs ls-files --deleted 2>&1 | tee ls-files-deleted.log
304
305   [ 0 -eq $(grep -c "a\.dat" ls-files.log) ]
306   [ 1 -eq $(grep -c "a\.dat" ls-files-deleted.log) ]
307 )
308 end_test