github.com/2lambda123/git-lfs@v2.5.2+incompatible/t/t-migrate-import.sh (about) 1 #!/usr/bin/env bash 2 3 . "$(dirname "$0")/fixtures/migrate.sh" 4 . "$(dirname "$0")/testlib.sh" 5 6 begin_test "migrate import (default branch)" 7 ( 8 set -e 9 10 setup_multiple_local_branches 11 12 md_oid="$(calc_oid "$(git cat-file -p :a.md)")" 13 txt_oid="$(calc_oid "$(git cat-file -p :a.txt)")" 14 md_feature_oid="$(calc_oid "$(git cat-file -p my-feature:a.md)")" 15 16 git lfs migrate import 17 18 assert_pointer "refs/heads/master" "a.md" "$md_oid" "140" 19 assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "120" 20 21 assert_local_object "$md_oid" "140" 22 assert_local_object "$txt_oid" "120" 23 refute_local_object "$md_feature_oid" "30" 24 25 master="$(git rev-parse refs/heads/master)" 26 feature="$(git rev-parse refs/heads/my-feature)" 27 28 master_attrs="$(git cat-file -p "$master:.gitattributes")" 29 [ ! $(git cat-file -p "$feature:.gitattributes") ] 30 31 echo "$master_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs" 32 echo "$master_attrs" | grep -q "*.txt filter=lfs diff=lfs merge=lfs" 33 ) 34 end_test 35 36 begin_test "migrate import (bare repository)" 37 ( 38 set -e 39 40 setup_multiple_remote_branches 41 42 git lfs migrate import --everything 43 ) 44 end_test 45 46 begin_test "migrate import (given branch)" 47 ( 48 set -e 49 50 setup_multiple_local_branches 51 52 md_oid="$(calc_oid "$(git cat-file -p :a.md)")" 53 txt_oid="$(calc_oid "$(git cat-file -p :a.txt)")" 54 md_feature_oid="$(calc_oid "$(git cat-file -p my-feature:a.md)")" 55 56 git lfs migrate import my-feature 57 58 assert_pointer "refs/heads/my-feature" "a.md" "$md_feature_oid" "30" 59 assert_pointer "refs/heads/my-feature" "a.txt" "$txt_oid" "120" 60 assert_pointer "refs/heads/master" "a.md" "$md_oid" "140" 61 assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "120" 62 63 assert_local_object "$md_oid" "140" 64 assert_local_object "$md_feature_oid" "30" 65 assert_local_object "$txt_oid" "120" 66 67 master="$(git rev-parse refs/heads/master)" 68 feature="$(git rev-parse refs/heads/my-feature)" 69 70 master_attrs="$(git cat-file -p "$master:.gitattributes")" 71 feature_attrs="$(git cat-file -p "$feature:.gitattributes")" 72 73 echo "$master_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs" 74 echo "$master_attrs" | grep -q "*.txt filter=lfs diff=lfs merge=lfs" 75 echo "$feature_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs" 76 echo "$feature_attrs" | grep -q "*.txt filter=lfs diff=lfs merge=lfs" 77 ) 78 end_test 79 80 begin_test "migrate import (default branch with filter)" 81 ( 82 set -e 83 84 setup_multiple_local_branches 85 86 md_oid="$(calc_oid "$(git cat-file -p :a.md)")" 87 txt_oid="$(calc_oid "$(git cat-file -p :a.txt)")" 88 md_feature_oid="$(calc_oid "$(git cat-file -p my-feature:a.md)")" 89 90 git lfs migrate import --include "*.md" 91 92 assert_pointer "refs/heads/master" "a.md" "$md_oid" "140" 93 94 assert_local_object "$md_oid" "140" 95 refute_local_object "$txt_oid" "120" 96 refute_local_object "$md_feature_oid" "30" 97 98 master="$(git rev-parse refs/heads/master)" 99 feature="$(git rev-parse refs/heads/my-feature)" 100 101 master_attrs="$(git cat-file -p "$master:.gitattributes")" 102 [ ! $(git cat-file -p "$feature:.gitattributes") ] 103 104 echo "$master_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs" 105 echo "$master_attrs" | grep -vq "*.txt filter=lfs diff=lfs merge=lfs" 106 ) 107 end_test 108 109 begin_test "migrate import (given branch with filter)" 110 ( 111 set -e 112 113 setup_multiple_local_branches 114 115 md_oid="$(calc_oid "$(git cat-file -p :a.md)")" 116 txt_oid="$(calc_oid "$(git cat-file -p :a.txt)")" 117 md_feature_oid="$(calc_oid "$(git cat-file -p my-feature:a.md)")" 118 119 git lfs migrate import --include "*.md" my-feature 120 121 assert_pointer "refs/heads/my-feature" "a.md" "$md_feature_oid" "30" 122 assert_pointer "refs/heads/my-feature~1" "a.md" "$md_oid" "140" 123 124 assert_local_object "$md_oid" "140" 125 assert_local_object "$md_feature_oid" "30" 126 refute_local_object "$txt_oid" "120" 127 128 master="$(git rev-parse refs/heads/master)" 129 feature="$(git rev-parse refs/heads/my-feature)" 130 131 master_attrs="$(git cat-file -p "$master:.gitattributes")" 132 feature_attrs="$(git cat-file -p "$feature:.gitattributes")" 133 134 echo "$master_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs" 135 echo "$master_attrs" | grep -vq "*.txt filter=lfs diff=lfs merge=lfs" 136 echo "$feature_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs" 137 echo "$feature_attrs" | grep -vq "*.txt filter=lfs diff=lfs merge=lfs" 138 ) 139 end_test 140 141 begin_test "migrate import (default branch, exclude remote refs)" 142 ( 143 set -e 144 145 setup_single_remote_branch 146 147 md_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/master:a.md")")" 148 txt_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/master:a.txt")")" 149 md_oid="$(calc_oid "$(git cat-file -p "refs/heads/master:a.md")")" 150 txt_oid="$(calc_oid "$(git cat-file -p "refs/heads/master:a.txt")")" 151 152 git lfs migrate import 153 154 assert_pointer "refs/heads/master" "a.md" "$md_oid" "50" 155 assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "30" 156 157 assert_local_object "$md_oid" "50" 158 assert_local_object "$txt_oid" "30" 159 refute_local_object "$md_remote_oid" "140" 160 refute_local_object "$txt_remote_oid" "120" 161 162 master="$(git rev-parse refs/heads/master)" 163 remote="$(git rev-parse refs/remotes/origin/master)" 164 165 master_attrs="$(git cat-file -p "$master:.gitattributes")" 166 [ ! $(git cat-file -p "$remote:.gitattributes") ] 167 168 echo "$master_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs" 169 echo "$master_attrs" | grep -vq "*.txt filter=lfs diff=lfs merge=lfs" 170 ) 171 end_test 172 173 begin_test "migrate import (given branch, exclude remote refs)" 174 ( 175 set -e 176 177 setup_multiple_remote_branches 178 179 md_master_oid="$(calc_oid "$(git cat-file -p "refs/heads/master:a.md")")" 180 md_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/master:a.md")")" 181 md_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.md")")" 182 txt_master_oid="$(calc_oid "$(git cat-file -p "refs/heads/master:a.txt")")" 183 txt_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/master:a.txt")")" 184 txt_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.txt")")" 185 186 git lfs migrate import my-feature 187 188 assert_pointer "refs/heads/master" "a.md" "$md_master_oid" "21" 189 assert_pointer "refs/heads/my-feature" "a.md" "$md_feature_oid" "31" 190 assert_pointer "refs/heads/master" "a.txt" "$txt_master_oid" "20" 191 assert_pointer "refs/heads/my-feature" "a.txt" "$txt_feature_oid" "30" 192 193 assert_local_object "$md_feature_oid" "31" 194 assert_local_object "$md_master_oid" "21" 195 assert_local_object "$txt_feature_oid" "30" 196 assert_local_object "$txt_master_oid" "20" 197 refute_local_object "$md_remote_oid" "11" 198 refute_local_object "$txt_remote_oid" "10" 199 200 master="$(git rev-parse refs/heads/master)" 201 feature="$(git rev-parse refs/heads/my-feature)" 202 remote="$(git rev-parse refs/remotes/origin/master)" 203 204 master_attrs="$(git cat-file -p "$master:.gitattributes")" 205 [ ! $(git cat-file -p "$remote:.gitattributes") ] 206 feature_attrs="$(git cat-file -p "$feature:.gitattributes")" 207 208 echo "$master_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs" 209 echo "$master_attrs" | grep -q "*.txt filter=lfs diff=lfs merge=lfs" 210 echo "$feature_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs" 211 echo "$feature_attrs" | grep -vq "*.txt filter=lfs diff=lfs merge=lfs" 212 ) 213 end_test 214 215 begin_test "migrate import (given ref, --skip-fetch)" 216 ( 217 set -e 218 219 setup_single_remote_branch 220 221 md_master_oid="$(calc_oid "$(git cat-file -p "refs/heads/master:a.md")")" 222 md_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/master:a.md")")" 223 txt_master_oid="$(calc_oid "$(git cat-file -p "refs/heads/master:a.txt")")" 224 txt_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/master:a.txt")")" 225 226 git tag pseudo-remote "$(git rev-parse refs/remotes/origin/master)" 227 # Remove the refs/remotes/origin/master ref, and instruct 'git lfs migrate' to 228 # not fetch it. 229 git update-ref -d refs/remotes/origin/master 230 231 git lfs migrate import --skip-fetch 232 233 assert_pointer "refs/heads/master" "a.md" "$md_master_oid" "50" 234 assert_pointer "pseudo-remote" "a.md" "$md_remote_oid" "140" 235 assert_pointer "refs/heads/master" "a.txt" "$txt_master_oid" "30" 236 assert_pointer "pseudo-remote" "a.txt" "$txt_remote_oid" "120" 237 238 assert_local_object "$md_master_oid" "50" 239 assert_local_object "$txt_master_oid" "30" 240 assert_local_object "$md_remote_oid" "140" 241 assert_local_object "$txt_remote_oid" "120" 242 243 master="$(git rev-parse refs/heads/master)" 244 remote="$(git rev-parse pseudo-remote)" 245 246 master_attrs="$(git cat-file -p "$master:.gitattributes")" 247 remote_attrs="$(git cat-file -p "$remote:.gitattributes")" 248 249 echo "$master_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs" 250 echo "$master_attrs" | grep -q "*.txt filter=lfs diff=lfs merge=lfs" 251 echo "$remote_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs" 252 echo "$remote_attrs" | grep -q "*.txt filter=lfs diff=lfs merge=lfs" 253 ) 254 end_test 255 256 begin_test "migrate import (un-annotated tags)" 257 ( 258 set -e 259 260 setup_single_local_branch_with_tags 261 262 txt_master_oid="$(calc_oid "$(git cat-file -p "refs/heads/master:a.txt")")" 263 264 git lfs migrate import --everything 265 266 assert_pointer "refs/heads/master" "a.txt" "$txt_master_oid" "2" 267 assert_local_object "$txt_master_oid" "2" 268 269 git tag --points-at "$(git rev-parse HEAD)" | grep -q "v1.0.0" 270 ) 271 end_test 272 273 begin_test "migrate import (annotated tags)" 274 ( 275 set -e 276 277 setup_single_local_branch_with_annotated_tags 278 279 txt_master_oid="$(calc_oid "$(git cat-file -p "refs/heads/master:a.txt")")" 280 281 git lfs migrate import --everything 282 283 assert_pointer "refs/heads/master" "a.txt" "$txt_master_oid" "2" 284 assert_local_object "$txt_master_oid" "2" 285 286 git tag --points-at "$(git rev-parse HEAD)" | grep -q "v1.0.0" 287 ) 288 end_test 289 290 begin_test "migrate import (include/exclude ref)" 291 ( 292 set -e 293 294 setup_multiple_remote_branches 295 296 md_master_oid="$(calc_oid "$(git cat-file -p "refs/heads/master:a.md")")" 297 md_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/master:a.md")")" 298 md_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.md")")" 299 txt_master_oid="$(calc_oid "$(git cat-file -p "refs/heads/master:a.txt")")" 300 txt_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/master:a.txt")")" 301 txt_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.txt")")" 302 303 git lfs migrate import \ 304 --include-ref=refs/heads/my-feature \ 305 --exclude-ref=refs/heads/master 306 307 assert_pointer "refs/heads/my-feature" "a.md" "$md_feature_oid" "31" 308 assert_pointer "refs/heads/my-feature" "a.txt" "$txt_feature_oid" "30" 309 310 assert_local_object "$md_feature_oid" "31" 311 refute_local_object "$md_master_oid" "21" 312 assert_local_object "$txt_feature_oid" "30" 313 refute_local_object "$txt_master_oid" "20" 314 refute_local_object "$md_remote_oid" "11" 315 refute_local_object "$txt_remote_oid" "10" 316 317 master="$(git rev-parse refs/heads/master)" 318 feature="$(git rev-parse refs/heads/my-feature)" 319 remote="$(git rev-parse refs/remotes/origin/master)" 320 321 [ ! $(git cat-file -p "$master:.gitattributes") ] 322 [ ! $(git cat-file -p "$remote:.gitattributes") ] 323 feature_attrs="$(git cat-file -p "$feature:.gitattributes")" 324 325 echo "$feature_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs" 326 echo "$feature_attrs" | grep -q "*.txt filter=lfs diff=lfs merge=lfs" 327 ) 328 end_test 329 330 begin_test "migrate import (include/exclude ref args)" 331 ( 332 set -e 333 334 setup_multiple_remote_branches 335 336 md_master_oid="$(calc_oid "$(git cat-file -p "refs/heads/master:a.md")")" 337 md_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/master:a.md")")" 338 md_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.md")")" 339 txt_master_oid="$(calc_oid "$(git cat-file -p "refs/heads/master:a.txt")")" 340 txt_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/master:a.txt")")" 341 txt_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.txt")")" 342 343 git lfs migrate import my-feature ^master 344 345 assert_pointer "refs/heads/my-feature" "a.md" "$md_feature_oid" "31" 346 assert_pointer "refs/heads/my-feature" "a.txt" "$txt_feature_oid" "30" 347 348 assert_local_object "$md_feature_oid" "31" 349 refute_local_object "$md_master_oid" "21" 350 assert_local_object "$txt_feature_oid" "30" 351 refute_local_object "$txt_master_oid" "20" 352 refute_local_object "$md_remote_oid" "11" 353 refute_local_object "$txt_remote_oid" "10" 354 355 master="$(git rev-parse refs/heads/master)" 356 feature="$(git rev-parse refs/heads/my-feature)" 357 remote="$(git rev-parse refs/remotes/origin/master)" 358 359 [ ! $(git cat-file -p "$master:.gitattributes") ] 360 [ ! $(git cat-file -p "$remote:.gitattributes") ] 361 feature_attrs="$(git cat-file -p "$feature:.gitattributes")" 362 363 echo "$feature_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs" 364 echo "$feature_attrs" | grep -q "*.txt filter=lfs diff=lfs merge=lfs" 365 ) 366 end_test 367 368 begin_test "migrate import (include/exclude ref with filter)" 369 ( 370 set -e 371 372 setup_multiple_remote_branches 373 374 md_master_oid="$(calc_oid "$(git cat-file -p "refs/heads/master:a.md")")" 375 md_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/master:a.md")")" 376 md_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.md")")" 377 txt_master_oid="$(calc_oid "$(git cat-file -p "refs/heads/master:a.txt")")" 378 txt_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/master:a.txt")")" 379 txt_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.txt")")" 380 381 git lfs migrate import \ 382 --include="*.txt" \ 383 --include-ref=refs/heads/my-feature \ 384 --exclude-ref=refs/heads/master 385 386 assert_pointer "refs/heads/my-feature" "a.txt" "$txt_feature_oid" "30" 387 388 refute_local_object "$md_feature_oid" "31" 389 refute_local_object "$md_master_oid" "21" 390 assert_local_object "$txt_feature_oid" "30" 391 refute_local_object "$txt_master_oid" "20" 392 refute_local_object "$md_remote_oid" "11" 393 refute_local_object "$txt_remote_oid" "10" 394 395 master="$(git rev-parse refs/heads/master)" 396 feature="$(git rev-parse refs/heads/my-feature)" 397 remote="$(git rev-parse refs/remotes/origin/master)" 398 399 [ ! $(git cat-file -p "$master:.gitattributes") ] 400 [ ! $(git cat-file -p "$remote:.gitattributes") ] 401 feature_attrs="$(git cat-file -p "$feature:.gitattributes")" 402 403 echo "$feature_attrs" | grep -vq "*.md filter=lfs diff=lfs merge=lfs" 404 echo "$feature_attrs" | grep -q "*.txt filter=lfs diff=lfs merge=lfs" 405 ) 406 end_test 407 408 begin_test "migrate import (existing .gitattributes)" 409 ( 410 set -e 411 412 setup_local_branch_with_gitattrs 413 414 pwd 415 416 master="$(git rev-parse refs/heads/master)" 417 418 txt_master_oid="$(calc_oid "$(git cat-file -p "$master:a.txt")")" 419 420 git lfs migrate import --yes --include-ref=refs/heads/master --include="*.txt" 421 422 assert_local_object "$txt_master_oid" "120" 423 424 master="$(git rev-parse refs/heads/master)" 425 prev="$(git rev-parse refs/heads/master^1)" 426 427 diff -u <(git cat-file -p $master:.gitattributes) <(cat <<-EOF 428 *.txt filter=lfs diff=lfs merge=lfs -text 429 *.other filter=lfs diff=lfs merge=lfs -text 430 EOF) 431 432 diff -u <(git cat-file -p $prev:.gitattributes) <(cat <<-EOF 433 *.txt filter=lfs diff=lfs merge=lfs -text 434 EOF) 435 ) 436 end_test 437 438 begin_test "migrate import (bare repository)" 439 ( 440 set -e 441 442 setup_multiple_local_branches 443 make_bare 444 445 git lfs migrate import \ 446 --include-ref=master 447 ) 448 end_test 449 450 begin_test "migrate import (nested sub-trees, no filter)" 451 ( 452 set -e 453 454 setup_single_local_branch_deep_trees 455 456 oid="$(calc_oid "$(git cat-file -p :foo/bar/baz/a.txt)")" 457 size="$(git cat-file -p :foo/bar/baz/a.txt | wc -c | awk '{ print $1 }')" 458 459 git lfs migrate import --everything 460 461 assert_local_object "$oid" "$size" 462 ) 463 end_test 464 465 begin_test "migrate import (prefix include(s))" 466 ( 467 set -e 468 469 includes="foo/bar/baz foo/**/baz/a.txt *.txt" 470 for include in $includes; do 471 setup_single_local_branch_deep_trees 472 473 oid="$(calc_oid "$(git cat-file -p :foo/bar/baz/a.txt)")" 474 475 git lfs migrate import --include="$include" 476 477 assert_local_object "$oid" 120 478 479 cd .. 480 done 481 ) 482 end_test 483 484 begin_test "migrate import (--everything)" 485 ( 486 set -e 487 488 setup_multiple_local_branches 489 git checkout master 490 491 master_txt_oid="$(calc_oid "$(git cat-file -p :a.txt)")" 492 master_md_oid="$(calc_oid "$(git cat-file -p :a.md)")" 493 feature_md_oid="$(calc_oid "$(git cat-file -p my-feature:a.md)")" 494 master_txt_size="$(git cat-file -p :a.txt | wc -c | awk '{ print $1 }')" 495 master_md_size="$(git cat-file -p :a.md | wc -c | awk '{ print $1 }')" 496 feature_md_size="$(git cat-file -p my-feature:a.md | wc -c | awk '{ print $1 }')" 497 498 git lfs migrate import --everything 499 500 assert_pointer "master" "a.txt" "$master_txt_oid" "$master_txt_size" 501 assert_pointer "master" "a.md" "$master_md_oid" "$master_md_size" 502 assert_pointer "my-feature" "a.md" "$feature_md_oid" "$feature_md_size" 503 ) 504 end_test 505 506 begin_test "migrate import (ambiguous reference)" 507 ( 508 set -e 509 510 setup_multiple_local_branches 511 512 # Create an ambiguously named reference sharing the name as the SHA-1 of 513 # "HEAD". 514 sha="$(git rev-parse HEAD)" 515 git tag "$sha" 516 517 git lfs migrate import --everything 518 ) 519 end_test 520 521 begin_test "migrate import (--everything with args)" 522 ( 523 set -e 524 525 setup_multiple_local_branches 526 527 [ "$(git lfs migrate import --everything master 2>&1)" = \ 528 "fatal: cannot use --everything with explicit reference arguments" ] 529 ) 530 end_test 531 532 begin_test "migrate import (--everything with --include-ref)" 533 ( 534 set -e 535 536 setup_multiple_local_branches 537 538 [ "$(git lfs migrate import --everything --include-ref=refs/heads/master 2>&1)" = \ 539 "fatal: cannot use --everything with --include-ref or --exclude-ref" ] 540 ) 541 end_test 542 543 begin_test "migrate import (--everything with --exclude-ref)" 544 ( 545 set -e 546 547 setup_multiple_local_branches 548 549 [ "$(git lfs migrate import --everything --exclude-ref=refs/heads/master 2>&1)" = \ 550 "fatal: cannot use --everything with --include-ref or --exclude-ref" ] 551 ) 552 end_test 553 554 begin_test "migrate import (--everything and --include with glob pattern)" 555 ( 556 set -e 557 558 setup_multiple_local_branches 559 560 md_master_oid="$(calc_oid "$(git cat-file -p "refs/heads/master:a.md")")" 561 txt_master_oid="$(calc_oid "$(git cat-file -p "refs/heads/master:a.txt")")" 562 md_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.md")")" 563 txt_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.txt")")" 564 565 git lfs migrate import --verbose --everything --include='*.[mM][dD]' 566 567 assert_pointer "refs/heads/master" "a.md" "$md_master_oid" "140" 568 assert_pointer "refs/heads/my-feature" "a.md" "$md_feature_oid" "30" 569 570 assert_local_object "$md_master_oid" "140" 571 assert_local_object "$md_feature_oid" "30" 572 refute_local_object "$txt_master_oid" 573 refute_local_object "$txt_feature_oid" 574 ) 575 end_test 576 577 begin_test "migrate import (nested sub-trees and --include with wildcard)" 578 ( 579 set -e 580 581 setup_single_local_branch_deep_trees 582 583 oid="$(calc_oid "$(git cat-file -p :foo/bar/baz/a.txt)")" 584 size="$(git cat-file -p :foo/bar/baz/a.txt | wc -c | awk '{ print $1 }')" 585 586 git lfs migrate import --include="**/*ar/**" 587 588 assert_pointer "refs/heads/master" "foo/bar/baz/a.txt" "$oid" "$size" 589 assert_local_object "$oid" "$size" 590 ) 591 end_test 592 593 begin_test "migrate import (handle copies of files)" 594 ( 595 set -e 596 597 setup_single_local_branch_deep_trees 598 599 # add the object from the sub-tree to the root directory 600 cp foo/bar/baz/a.txt a.txt 601 git add a.txt 602 git commit -m "duplicated file" 603 604 oid_root="$(calc_oid "$(git cat-file -p :a.txt)")" 605 oid_tree="$(calc_oid "$(git cat-file -p :foo/bar/baz/a.txt)")" 606 size="$(git cat-file -p :foo/bar/baz/a.txt | wc -c | awk '{ print $1 }')" 607 608 # only import objects under "foo" 609 git lfs migrate import --include="foo/**" 610 611 assert_pointer "refs/heads/master" "foo/bar/baz/a.txt" "$oid_tree" "$size" 612 assert_local_object "$oid_tree" "$size" 613 614 # "a.txt" is not under "foo" and therefore should not be in LFS 615 oid_root_after_migration="$(calc_oid "$(git cat-file -p :a.txt)")" 616 [ "$oid_root" = "$oid_root_after_migration" ] 617 ) 618 end_test 619 620 begin_test "migrate import (--object-map)" 621 ( 622 set -e 623 624 setup_multiple_local_branches 625 626 output_dir=$(mktemp -d) 627 628 git log --all --pretty='format:%H' > "${output_dir}/old_sha.txt" 629 git lfs migrate import --everything --object-map "${output_dir}/object-map.txt" 630 git log --all --pretty='format:%H' > "${output_dir}/new_sha.txt" 631 paste -d',' "${output_dir}/old_sha.txt" "${output_dir}/new_sha.txt" > "${output_dir}/expected-map.txt" 632 633 diff -u <(sort "${output_dir}/expected-map.txt") <(sort "${output_dir}/object-map.txt") 634 ) 635 end_test 636 637 begin_test "migrate import (--include with space)" 638 ( 639 set -e 640 641 setup_local_branch_with_space 642 643 oid="$(calc_oid "$(git cat-file -p :"a file.txt")")" 644 645 git lfs migrate import --include "a file.txt" 646 647 assert_pointer "refs/heads/master" "a file.txt" "$oid" 50 648 cat .gitattributes 649 if [ 1 -ne "$(grep -c "a\[\[:space:\]\]file.txt" .gitattributes)" ]; then 650 echo >&2 "fatal: expected \"a[[:space:]]file.txt\" to appear in .gitattributes" 651 echo >&2 "fatal: got" 652 sed -e 's/^/ /g' < .gitattributes >&2 653 exit 1 654 fi 655 ) 656 end_test 657 658 begin_test "migrate import (handle symbolic link)" 659 ( 660 set -e 661 662 setup_local_branch_with_symlink 663 664 txt_oid="$(calc_oid "$(git cat-file -p :a.txt)")" 665 link_oid="$(calc_oid "$(git cat-file -p :link.txt)")" 666 667 git lfs migrate import --include="*.txt" 668 669 assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "120" 670 671 assert_local_object "$txt_oid" "120" 672 # "link.txt" is a symbolic link so it should be not in LFS 673 refute_local_object "$link_oid" "5" 674 ) 675 end_test 676 677 begin_test "migrate import (commit --allow-empty)" 678 ( 679 set -e 680 681 reponame="migrate---allow-empty" 682 git init "$reponame" 683 cd "$reponame" 684 685 git commit --allow-empty -m "initial commit" 686 687 original_head="$(git rev-parse HEAD)" 688 git lfs migrate import --everything 689 migrated_head="$(git rev-parse HEAD)" 690 691 assert_ref_unmoved "HEAD" "$original_head" "$migrated_head" 692 ) 693 end_test 694 695 begin_test "migrate import (multiple remotes)" 696 ( 697 set -e 698 699 setup_multiple_remotes 700 701 original_master="$(git rev-parse master)" 702 703 git lfs migrate import 704 705 migrated_master="$(git rev-parse master)" 706 707 assert_ref_unmoved "master" "$original_master" "$migrated_master" 708 ) 709 end_test 710 711 begin_test "migrate import (dirty copy, negative answer)" 712 ( 713 set -e 714 715 setup_local_branch_with_dirty_copy 716 717 original_master="$(git rev-parse master)" 718 719 echo "n" | git lfs migrate import --everything 2>&1 | tee migrate.log 720 grep "migrate: working copy must not be dirty" migrate.log 721 722 migrated_master="$(git rev-parse master)" 723 724 assert_ref_unmoved "master" "$original_master" "$migrated_master" 725 ) 726 end_test 727 728 begin_test "migrate import (dirty copy, unknown then negative answer)" 729 ( 730 set -e 731 732 setup_local_branch_with_dirty_copy 733 734 original_master="$(git rev-parse master)" 735 736 echo "x\nn" | git lfs migrate import --everything 2>&1 | tee migrate.log 737 738 cat migrate.log 739 740 [ "2" -eq "$(grep -o "override changes in your working copy" migrate.log \ 741 | wc -l | awk '{ print $1 }')" ] 742 grep "migrate: working copy must not be dirty" migrate.log 743 744 migrated_master="$(git rev-parse master)" 745 746 assert_ref_unmoved "master" "$original_master" "$migrated_master" 747 ) 748 end_test 749 750 begin_test "migrate import (dirty copy, positive answer)" 751 ( 752 set -e 753 754 setup_local_branch_with_dirty_copy 755 756 oid="$(calc_oid "$(git cat-file -p :a.txt)")" 757 758 echo "y" | git lfs migrate import --everything 2>&1 | tee migrate.log 759 grep "migrate: changes in your working copy will be overridden ..." \ 760 migrate.log 761 762 assert_pointer "refs/heads/master" "a.txt" "$oid" "5" 763 assert_local_object "$oid" "5" 764 ) 765 end_test 766 767 begin_test "migrate import (non-standard refs)" 768 ( 769 set -e 770 771 setup_multiple_local_branches_non_standard 772 773 md_oid="$(calc_oid "$(git cat-file -p :a.md)")" 774 txt_oid="$(calc_oid "$(git cat-file -p :a.txt)")" 775 md_feature_oid="$(calc_oid "$(git cat-file -p my-feature:a.md)")" 776 777 git lfs migrate import --everything 778 779 assert_pointer "refs/heads/master" "a.md" "$md_oid" "140" 780 assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "120" 781 assert_pointer "refs/pull/1/base" "a.md" "$md_oid" "140" 782 assert_pointer "refs/pull/1/base" "a.txt" "$txt_oid" "120" 783 784 assert_pointer "refs/heads/my-feature" "a.txt" "$txt_oid" "120" 785 assert_pointer "refs/pull/1/head" "a.txt" "$txt_oid" "120" 786 787 assert_local_object "$md_oid" "140" 788 assert_local_object "$txt_oid" "120" 789 assert_local_object "$md_feature_oid" "30" 790 ) 791 end_test