62a8de07aea9eab6216457622ac95243b7cc5d49
[scm/test.git] / test / test-migrate-info.sh
1 #!/usr/bin/env bash
2
3 . "test/test-migrate-fixtures.sh"
4 . "test/testlib.sh"
5
6 begin_test "migrate info (default branch)"
7 (
8   set -e
9
10   setup_multiple_local_branches
11
12   original_head="$(git rev-parse HEAD)"
13
14   diff -u <(git lfs migrate info 2>&1 | tail -n 2) <(cat <<-EOF
15         *.md    140 B   1/1 files(s)    100%
16         *.txt   120 B   1/1 files(s)    100%
17         EOF)
18
19   migrated_head="$(git rev-parse HEAD)"
20
21   assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
22 )
23 end_test
24
25 begin_test "migrate info (bare repository)"
26 (
27   set -e
28
29   setup_multiple_remote_branches
30
31   git lfs migrate info --everything
32 )
33 end_test
34
35 begin_test "migrate info (given branch)"
36 (
37   set -e
38
39   setup_multiple_local_branches
40
41   original_master="$(git rev-parse refs/heads/master)"
42   original_feature="$(git rev-parse refs/heads/my-feature)"
43
44   diff -u <(git lfs migrate info my-feature 2>&1 | tail -n 2) <(cat <<-EOF
45         *.md    170 B   2/2 files(s)    100%
46         *.txt   120 B   1/1 files(s)    100%
47         EOF)
48
49   migrated_master="$(git rev-parse refs/heads/master)"
50   migrated_feature="$(git rev-parse refs/heads/my-feature)"
51
52   assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
53   assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
54 )
55 end_test
56
57 begin_test "migrate info (default branch with filter)"
58 (
59   set -e
60
61   setup_multiple_local_branches
62
63   original_head="$(git rev-parse HEAD)"
64
65   diff -u <(git lfs migrate info --include "*.md" 2>&1 | tail -n 1) <(cat <<-EOF
66         *.md    140 B   1/1 files(s)    100%
67         EOF)
68
69   migrated_head="$(git rev-parse HEAD)"
70
71   assert_ref_unmoved "refs/heads/master" "$original_head" "$migrated_head"
72 )
73 end_test
74
75 begin_test "migrate info (given branch with filter)"
76 (
77   set -e
78
79   setup_multiple_local_branches
80
81   original_master="$(git rev-parse refs/heads/master)"
82   original_feature="$(git rev-parse refs/heads/my-feature)"
83
84   diff -u <(git lfs migrate info --include "*.md" my-feature 2>&1 | tail -n 1) <(cat <<-EOF
85         *.md    170 B   2/2 files(s)    100%
86         EOF)
87
88   migrated_master="$(git rev-parse refs/heads/master)"
89   migrated_feature="$(git rev-parse refs/heads/my-feature)"
90
91   assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
92   assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
93 )
94 end_test
95
96 begin_test "migrate info (default branch, exclude remote refs)"
97 (
98   set -e
99
100   setup_single_remote_branch
101
102   git show-ref
103
104   original_remote="$(git rev-parse refs/remotes/origin/master)"
105   original_master="$(git rev-parse refs/heads/master)"
106
107   diff -u <(git lfs migrate info 2>&1 | tail -n 2) <(cat <<-EOF
108         *.md    50 B    1/1 files(s)    100%
109         *.txt   30 B    1/1 files(s)    100%
110         EOF)
111
112   migrated_remote="$(git rev-parse refs/remotes/origin/master)"
113   migrated_master="$(git rev-parse refs/heads/master)"
114
115   assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
116   assert_ref_unmoved "refs/remotes/origin/master" "$original_remote" "$migrated_remote"
117 )
118 end_test
119
120 begin_test "migrate info (given branch, exclude remote refs)"
121 (
122   set -e
123
124   setup_multiple_remote_branches
125
126   original_remote="$(git rev-parse refs/remotes/origin/master)"
127   original_master="$(git rev-parse refs/heads/master)"
128   original_feature="$(git rev-parse refs/heads/my-feature)"
129
130   diff -u <(git lfs migrate info my-feature 2>&1 | tail -n 2) <(cat <<-EOF
131         *.md    52 B    2/2 files(s)    100%
132         *.txt   50 B    2/2 files(s)    100%
133         EOF)
134
135   migrated_remote="$(git rev-parse refs/remotes/origin/master)"
136   migrated_master="$(git rev-parse refs/heads/master)"
137   migrated_feature="$(git rev-parse refs/heads/my-feature)"
138
139   assert_ref_unmoved "refs/remotes/origin/master" "$original_remote" "$migrated_remote"
140   assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
141   assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
142 )
143 end_test
144
145 begin_test "migrate info (given ref, --skip-fetch)"
146 (
147   set -e
148
149   setup_single_remote_branch
150
151   original_remote="$(git rev-parse refs/remotes/origin/master)"
152   original_master="$(git rev-parse refs/heads/master)"
153
154   git tag pseudo-remote "$original_remote"
155   # Remove the refs/remotes/origin/master ref, and instruct 'git lfs migrate' to
156   # not fetch it.
157   git update-ref -d refs/remotes/origin/master
158
159   diff -u <(git lfs migrate info --skip-fetch 2>&1 | tail -n 2) <(cat <<-EOF
160         *.md    190 B   2/2 files(s)    100%
161         *.txt   150 B   2/2 files(s)    100%
162         EOF)
163
164   migrated_remote="$(git rev-parse pseudo-remote)"
165   migrated_master="$(git rev-parse refs/heads/master)"
166
167   assert_ref_unmoved "refs/remotes/origin/master" "$original_remote" "$migrated_remote"
168   assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
169 )
170 end_test
171
172 begin_test "migrate info (include/exclude ref)"
173 (
174   set -e
175
176   setup_multiple_remote_branches
177
178   original_master="$(git rev-parse refs/heads/master)"
179   original_feature="$(git rev-parse refs/heads/my-feature)"
180
181   diff -u <(git lfs migrate info \
182     --include-ref=refs/heads/my-feature \
183     --exclude-ref=refs/heads/master 2>&1 | tail -n 2) <(cat <<-EOF
184         *.md    31 B    1/1 files(s)    100%
185         *.txt   30 B    1/1 files(s)    100%
186         EOF)
187
188   migrated_master="$(git rev-parse refs/heads/master)"
189   migrated_feature="$(git rev-parse refs/heads/my-feature)"
190
191   assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
192   assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
193 )
194 end_test
195
196 begin_test "migrate info (include/exclude ref args)"
197 (
198   set -e
199
200   setup_multiple_remote_branches
201
202   original_master="$(git rev-parse refs/heads/master)"
203   original_feature="$(git rev-parse refs/heads/my-feature)"
204
205   diff -u <(git lfs migrate info \
206     my-feature ^master 2>&1 | tail -n 2) <(cat <<-EOF
207         *.md    31 B    1/1 files(s)    100%
208         *.txt   30 B    1/1 files(s)    100%
209         EOF)
210
211   migrated_master="$(git rev-parse refs/heads/master)"
212   migrated_feature="$(git rev-parse refs/heads/my-feature)"
213
214   assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
215   assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
216 )
217 end_test
218
219 begin_test "migrate info (include/exclude ref with filter)"
220 (
221   set -e
222
223   setup_multiple_remote_branches
224
225   original_master="$(git rev-parse refs/heads/master)"
226   original_feature="$(git rev-parse refs/heads/my-feature)"
227
228   diff -u <(git lfs migrate info \
229     --include="*.txt" \
230     --include-ref=refs/heads/my-feature \
231     --exclude-ref=refs/heads/master 2>&1 | tail -n 1) <(cat <<-EOF
232         *.txt   30 B    1/1 files(s)    100%
233         EOF)
234
235   migrated_master="$(git rev-parse refs/heads/master)"
236   migrated_feature="$(git rev-parse refs/heads/my-feature)"
237
238   assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
239   assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
240 )
241 end_test
242
243 begin_test "migrate info (nested sub-trees, no filter)"
244 (
245   set -e
246
247   setup_single_local_branch_deep_trees
248
249   original_master="$(git rev-parse refs/heads/master)"
250
251   diff -u <(git lfs migrate info 2>/dev/null) <(cat <<-EOF
252         *.txt   120 B   1/1 files(s)    100%
253         EOF)
254
255   migrated_master="$(git rev-parse refs/heads/master)"
256
257   assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
258 )
259 end_test
260
261 begin_test "migrate info (above threshold)"
262 (
263   set -e
264
265   setup_multiple_local_branches
266
267   original_head="$(git rev-parse HEAD)"
268
269   diff -u <(git lfs migrate info --above=130B 2>&1 | tail -n 1) <(cat <<-EOF
270         *.md    140 B   1/1 files(s)    100%
271         EOF)
272
273   migrated_head="$(git rev-parse HEAD)"
274
275   assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
276 )
277 end_test
278
279 begin_test "migrate info (above threshold, top)"
280 (
281   set -e
282
283   setup_multiple_local_branches
284
285   original_head="$(git rev-parse HEAD)"
286
287   diff -u <(git lfs migrate info --above=130B --top=1 2>&1 | tail -n 1) <(cat <<-EOF
288         *.md    140 B   1/1 files(s)    100%
289         EOF)
290
291   migrated_head="$(git rev-parse HEAD)"
292
293   assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
294 )
295 end_test
296
297 begin_test "migrate info (given unit)"
298 (
299   set -e
300
301   setup_multiple_local_branches
302
303   original_head="$(git rev-parse HEAD)"
304
305   diff -u <(git lfs migrate info --unit=kb 2>&1 | tail -n 2) <(cat <<-EOF
306         *.md    0.1     1/1 files(s)    100%
307         *.txt   0.1     1/1 files(s)    100%
308         EOF)
309
310   migrated_head="$(git rev-parse HEAD)"
311
312   assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
313 )
314 end_test
315
316 begin_test "migrate info (doesn't show empty info entries)"
317 (
318   set -e
319
320   setup_multiple_local_branches
321
322   original_head="$(git rev-parse HEAD)"
323
324   [ "0" -eq "$(git lfs migrate info --above=1mb 2>/dev/null | wc -l)" ]
325
326   migrated_head="$(git rev-parse HEAD)"
327
328   assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
329 )
330 end_test
331
332 begin_test "migrate info (empty set)"
333 (
334   set -e
335
336   setup_multiple_local_branches
337
338   migrate="$(git lfs migrate info \
339     --include-ref=refs/heads/master \
340     --exclude-ref=refs/heads/master 2>/dev/null
341   )"
342
343   [ "0" -eq "$(echo -n "$migrate" | wc -l | awk '{ print $1 }')" ]
344 )
345 end_test
346
347 begin_test "migrate info (--everything)"
348 (
349   set -e
350
351   setup_multiple_local_branches
352   git checkout master
353
354   original_master="$(git rev-parse refs/heads/master)"
355   original_feature="$(git rev-parse refs/heads/my-feature)"
356
357   diff -u <(git lfs migrate info --everything 2>&1 | tail -n 2) <(cat <<-EOF
358         *.md    170 B   2/2 files(s)    100%
359         *.txt   120 B   1/1 files(s)    100%
360         EOF)
361
362   migrated_master="$(git rev-parse refs/heads/master)"
363   migrated_feature="$(git rev-parse refs/heads/my-feature)"
364
365   assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
366   assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
367 )
368 end_test
369
370 begin_test "migrate info (ambiguous reference)"
371 (
372   set -e
373
374   setup_multiple_local_branches
375
376   # Create an ambiguously named reference sharing the name as the SHA-1 of
377   # "HEAD".
378   sha="$(git rev-parse HEAD)"
379   git tag "$sha"
380
381   git lfs migrate info --everything
382 )
383 end_test
384
385 begin_test "migrate info (--everything with args)"
386 (
387   set -e
388
389   setup_multiple_local_branches
390
391   [ "$(git lfs migrate info --everything master 2>&1)" = \
392     "fatal: cannot use --everything with explicit reference arguments" ]
393 )
394 end_test
395
396 begin_test "migrate info (--everything with --include-ref)"
397 (
398   set -e
399
400   setup_multiple_local_branches
401
402   [ "$(git lfs migrate info --everything --include-ref=refs/heads/master 2>&1)" = \
403     "fatal: cannot use --everything with --include-ref or --exclude-ref" ]
404 )
405 end_test
406
407 exit 0
408
409 begin_test "migrate info (--everything with --exclude-ref)"
410 (
411   set -e
412
413   setup_multiple_local_branches
414
415   [ "$(git lfs migrate info --everything --exclude-ref=refs/heads/master 2>&1)" = \
416     "fatal: cannot use --everything with --include-ref or --exclude-ref" ]
417 )
418 end_test