3 . "$(dirname "$0")/fixtures/migrate.sh"
4 . "$(dirname "$0")/testlib.sh"
6 begin_test "migrate info (default branch)"
10 setup_multiple_local_branches
12 original_head="$(git rev-parse HEAD)"
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%
19 migrated_head="$(git rev-parse HEAD)"
21 assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
25 begin_test "migrate info (bare repository)"
29 setup_multiple_remote_branches
31 git lfs migrate info --everything
35 begin_test "migrate info (given branch)"
39 setup_multiple_local_branches
41 original_master="$(git rev-parse refs/heads/master)"
42 original_feature="$(git rev-parse refs/heads/my-feature)"
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%
49 migrated_master="$(git rev-parse refs/heads/master)"
50 migrated_feature="$(git rev-parse refs/heads/my-feature)"
52 assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
53 assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
57 begin_test "migrate info (default branch with filter)"
61 setup_multiple_local_branches
63 original_head="$(git rev-parse HEAD)"
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%
69 migrated_head="$(git rev-parse HEAD)"
71 assert_ref_unmoved "refs/heads/master" "$original_head" "$migrated_head"
75 begin_test "migrate info (given branch with filter)"
79 setup_multiple_local_branches
81 original_master="$(git rev-parse refs/heads/master)"
82 original_feature="$(git rev-parse refs/heads/my-feature)"
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%
88 migrated_master="$(git rev-parse refs/heads/master)"
89 migrated_feature="$(git rev-parse refs/heads/my-feature)"
91 assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
92 assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
96 begin_test "migrate info (default branch, exclude remote refs)"
100 setup_single_remote_branch
104 original_remote="$(git rev-parse refs/remotes/origin/master)"
105 original_master="$(git rev-parse refs/heads/master)"
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%
112 migrated_remote="$(git rev-parse refs/remotes/origin/master)"
113 migrated_master="$(git rev-parse refs/heads/master)"
115 assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
116 assert_ref_unmoved "refs/remotes/origin/master" "$original_remote" "$migrated_remote"
120 begin_test "migrate info (given branch, exclude remote refs)"
124 setup_multiple_remote_branches
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)"
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%
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)"
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"
145 begin_test "migrate info (given ref, --skip-fetch)"
149 setup_single_remote_branch
151 original_remote="$(git rev-parse refs/remotes/origin/master)"
152 original_master="$(git rev-parse refs/heads/master)"
154 git tag pseudo-remote "$original_remote"
155 # Remove the refs/remotes/origin/master ref, and instruct 'git lfs migrate' to
157 git update-ref -d refs/remotes/origin/master
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%
164 migrated_remote="$(git rev-parse pseudo-remote)"
165 migrated_master="$(git rev-parse refs/heads/master)"
167 assert_ref_unmoved "refs/remotes/origin/master" "$original_remote" "$migrated_remote"
168 assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
172 begin_test "migrate info (include/exclude ref)"
176 setup_multiple_remote_branches
178 original_master="$(git rev-parse refs/heads/master)"
179 original_feature="$(git rev-parse refs/heads/my-feature)"
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%
188 migrated_master="$(git rev-parse refs/heads/master)"
189 migrated_feature="$(git rev-parse refs/heads/my-feature)"
191 assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
192 assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
196 begin_test "migrate info (include/exclude ref args)"
200 setup_multiple_remote_branches
202 original_master="$(git rev-parse refs/heads/master)"
203 original_feature="$(git rev-parse refs/heads/my-feature)"
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%
211 migrated_master="$(git rev-parse refs/heads/master)"
212 migrated_feature="$(git rev-parse refs/heads/my-feature)"
214 assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
215 assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
219 begin_test "migrate info (include/exclude ref with filter)"
223 setup_multiple_remote_branches
225 original_master="$(git rev-parse refs/heads/master)"
226 original_feature="$(git rev-parse refs/heads/my-feature)"
228 diff -u <(git lfs migrate info \
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%
235 migrated_master="$(git rev-parse refs/heads/master)"
236 migrated_feature="$(git rev-parse refs/heads/my-feature)"
238 assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
239 assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
243 begin_test "migrate info (nested sub-trees, no filter)"
247 setup_single_local_branch_deep_trees
249 original_master="$(git rev-parse refs/heads/master)"
251 diff -u <(git lfs migrate info 2>/dev/null) <(cat <<-EOF
252 *.txt 120 B 1/1 files(s) 100%
255 migrated_master="$(git rev-parse refs/heads/master)"
257 assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
261 begin_test "migrate info (above threshold)"
265 setup_multiple_local_branches
267 original_head="$(git rev-parse HEAD)"
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%
273 migrated_head="$(git rev-parse HEAD)"
275 assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
279 begin_test "migrate info (above threshold, top)"
283 setup_multiple_local_branches
285 original_head="$(git rev-parse HEAD)"
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%
291 migrated_head="$(git rev-parse HEAD)"
293 assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
297 begin_test "migrate info (given unit)"
301 setup_multiple_local_branches
303 original_head="$(git rev-parse HEAD)"
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%
310 migrated_head="$(git rev-parse HEAD)"
312 assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
316 begin_test "migrate info (doesn't show empty info entries)"
320 setup_multiple_local_branches
322 original_head="$(git rev-parse HEAD)"
324 [ "0" -eq "$(git lfs migrate info --above=1mb 2>/dev/null | wc -l)" ]
326 migrated_head="$(git rev-parse HEAD)"
328 assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
332 begin_test "migrate info (empty set)"
336 setup_multiple_local_branches
338 migrate="$(git lfs migrate info \
339 --include-ref=refs/heads/master \
340 --exclude-ref=refs/heads/master 2>/dev/null
343 [ "0" -eq "$(echo -n "$migrate" | wc -l | awk '{ print $1 }')" ]
347 begin_test "migrate info (--everything)"
351 setup_multiple_local_branches
354 original_master="$(git rev-parse refs/heads/master)"
355 original_feature="$(git rev-parse refs/heads/my-feature)"
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%
362 migrated_master="$(git rev-parse refs/heads/master)"
363 migrated_feature="$(git rev-parse refs/heads/my-feature)"
365 assert_ref_unmoved "refs/heads/master" "$original_master" "$migrated_master"
366 assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
370 begin_test "migrate info (ambiguous reference)"
374 setup_multiple_local_branches
376 # Create an ambiguously named reference sharing the name as the SHA-1 of
378 sha="$(git rev-parse HEAD)"
381 git lfs migrate info --everything
385 begin_test "migrate info (--everything with args)"
389 setup_multiple_local_branches
391 [ "$(git lfs migrate info --everything master 2>&1)" = \
392 "fatal: cannot use --everything with explicit reference arguments" ]
396 begin_test "migrate info (--everything with --include-ref)"
400 setup_multiple_local_branches
402 [ "$(git lfs migrate info --everything --include-ref=refs/heads/master 2>&1)" = \
403 "fatal: cannot use --everything with --include-ref or --exclude-ref" ]
409 begin_test "migrate info (--everything with --exclude-ref)"
413 setup_multiple_local_branches
415 [ "$(git lfs migrate info --everything --exclude-ref=refs/heads/master 2>&1)" = \
416 "fatal: cannot use --everything with --include-ref or --exclude-ref" ]