Skip to content

Commit b04538d

Browse files
LukeShugitster
authored andcommitted
subtree: t7900: add porcelain tests for 'pull' and 'push'
The 'pull' and 'push' subcommands deserve their own sections in the tests. Add some basic tests for them. Signed-off-by: Luke Shumaker <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent b269976 commit b04538d

File tree

1 file changed

+127
-0
lines changed

1 file changed

+127
-0
lines changed

contrib/subtree/t/t7900-subtree.sh

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,133 @@ test_expect_success 'split "sub dir"/ with --branch for an incompatible branch'
427427
)
428428
'
429429

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+
430557
#
431558
# Validity checking
432559
#

0 commit comments

Comments
 (0)