@@ -427,6 +427,133 @@ test_expect_success 'split "sub dir"/ with --branch for an incompatible branch'
427
427
)
428
428
'
429
429
430
+ #
431
+ # Tests for 'git subtree pull'
432
+ #
433
+
434
+ test_expect_success ' pull requires option --prefix' '
435
+ subtree_test_create_repo "$test_count" &&
436
+ subtree_test_create_repo "$test_count/sub proj" &&
437
+ test_create_commit "$test_count" main1 &&
438
+ test_create_commit "$test_count/sub proj" sub1 &&
439
+ (
440
+ cd "$test_count" &&
441
+ git fetch ./"sub proj" HEAD &&
442
+ git subtree add --prefix="sub dir" FETCH_HEAD
443
+ ) &&
444
+ test_create_commit "$test_count/sub proj" sub2 &&
445
+ (
446
+ cd "$test_count" &&
447
+ test_must_fail git subtree pull ./"sub proj" HEAD >out 2>err &&
448
+
449
+ echo "You must provide the --prefix option." >expected &&
450
+ test_must_be_empty out &&
451
+ test_cmp expected err
452
+ )
453
+ '
454
+
455
+ test_expect_success ' pull requires path given by option --prefix must exist' '
456
+ subtree_test_create_repo "$test_count" &&
457
+ subtree_test_create_repo "$test_count/sub proj" &&
458
+ test_create_commit "$test_count" main1 &&
459
+ test_create_commit "$test_count/sub proj" sub1 &&
460
+ (
461
+ test_must_fail git subtree pull --prefix="sub dir" ./"sub proj" HEAD >out 2>err &&
462
+
463
+ echo "' \' ' sub dir' \' ' does not exist; use ' \' ' git subtree add' \' ' " >expected &&
464
+ test_must_be_empty out &&
465
+ test_cmp expected err
466
+ )
467
+ '
468
+
469
+ test_expect_success ' pull basic operation' '
470
+ subtree_test_create_repo "$test_count" &&
471
+ subtree_test_create_repo "$test_count/sub proj" &&
472
+ test_create_commit "$test_count" main1 &&
473
+ test_create_commit "$test_count/sub proj" sub1 &&
474
+ (
475
+ cd "$test_count" &&
476
+ git fetch ./"sub proj" HEAD &&
477
+ git subtree add --prefix="sub dir" FETCH_HEAD
478
+ ) &&
479
+ test_create_commit "$test_count/sub proj" sub2 &&
480
+ (
481
+ cd "$test_count" &&
482
+ exp=$(git -C "sub proj" rev-parse --verify HEAD:) &&
483
+ git subtree pull --prefix="sub dir" ./"sub proj" HEAD &&
484
+ act=$(git rev-parse --verify HEAD:"sub dir") &&
485
+ test "$act" = "$exp"
486
+ )
487
+ '
488
+
489
+ #
490
+ # Tests for 'git subtree push'
491
+ #
492
+
493
+ test_expect_success ' push requires option --prefix' '
494
+ subtree_test_create_repo "$test_count" &&
495
+ subtree_test_create_repo "$test_count/sub proj" &&
496
+ test_create_commit "$test_count" main1 &&
497
+ test_create_commit "$test_count/sub proj" sub1 &&
498
+ (
499
+ cd "$test_count" &&
500
+ git fetch ./"sub proj" HEAD &&
501
+ git subtree add --prefix="sub dir" FETCH_HEAD &&
502
+ echo "You must provide the --prefix option." >expected &&
503
+ test_must_fail git subtree push "./sub proj" from-mainline >actual 2>&1 &&
504
+ test_debug "printf ' " expected: " ' " &&
505
+ test_debug "cat expected" &&
506
+ test_debug "printf ' " actual: " ' " &&
507
+ test_debug "cat actual" &&
508
+ test_cmp expected actual
509
+ )
510
+ '
511
+
512
+ test_expect_success ' push requires path given by option --prefix must exist' '
513
+ subtree_test_create_repo "$test_count" &&
514
+ subtree_test_create_repo "$test_count/sub proj" &&
515
+ test_create_commit "$test_count" main1 &&
516
+ test_create_commit "$test_count/sub proj" sub1 &&
517
+ (
518
+ cd "$test_count" &&
519
+ git fetch ./"sub proj" HEAD &&
520
+ git subtree add --prefix="sub dir" FETCH_HEAD &&
521
+ echo "' \' ' non-existent-directory' \' ' does not exist; use ' \' ' git subtree add' \' ' " >expected &&
522
+ test_must_fail git subtree push --prefix=non-existent-directory "./sub proj" from-mainline >actual 2>&1 &&
523
+ test_debug "printf ' " expected: " ' " &&
524
+ test_debug "cat expected" &&
525
+ test_debug "printf ' " actual: " ' " &&
526
+ test_debug "cat actual" &&
527
+ test_cmp expected actual
528
+ )
529
+ '
530
+
531
+ test_expect_success ' push basic operation' '
532
+ subtree_test_create_repo "$test_count" &&
533
+ subtree_test_create_repo "$test_count/sub proj" &&
534
+ test_create_commit "$test_count" main1 &&
535
+ test_create_commit "$test_count/sub proj" sub1 &&
536
+ (
537
+ cd "$test_count" &&
538
+ git fetch ./"sub proj" HEAD &&
539
+ git subtree add --prefix="sub dir" FETCH_HEAD
540
+ ) &&
541
+ test_create_commit "$test_count" "sub dir"/main-sub1 &&
542
+ test_create_commit "$test_count" main2 &&
543
+ test_create_commit "$test_count/sub proj" sub2 &&
544
+ test_create_commit "$test_count" "sub dir"/main-sub2 &&
545
+ (
546
+ cd "$test_count" &&
547
+ git fetch ./"sub proj" HEAD &&
548
+ git subtree merge --prefix="sub dir" FETCH_HEAD &&
549
+ before=$(git rev-parse --verify HEAD) &&
550
+ split_hash=$(git subtree split --prefix="sub dir") &&
551
+ git subtree push --prefix="sub dir" ./"sub proj" from-mainline &&
552
+ test "$before" = "$(git rev-parse --verify HEAD)" &&
553
+ test "$split_hash" = "$(git -C "sub proj" rev-parse --verify refs/heads/from-mainline)"
554
+ )
555
+ '
556
+
430
557
#
431
558
# Validity checking
432
559
#
0 commit comments