diff options
Diffstat (limited to 't/t6409-merge-subtree.sh')
-rwxr-xr-x | t/t6409-merge-subtree.sh | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/t/t6409-merge-subtree.sh b/t/t6409-merge-subtree.sh new file mode 100755 index 0000000000..d406b2343c --- /dev/null +++ b/t/t6409-merge-subtree.sh @@ -0,0 +1,155 @@ +#!/bin/sh + +test_description='subtree merge strategy' + +GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main +export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME + +. ./test-lib.sh + +test_expect_success setup ' + + s="1 2 3 4 5 6 7 8" && + for i in $s; do echo $i; done >hello && + git add hello && + git commit -m initial && + git checkout -b side && + echo >>hello world && + git add hello && + git commit -m second && + git checkout main && + for i in mundo $s; do echo $i; done >hello && + git add hello && + git commit -m main + +' + +test_expect_success 'subtree available and works like recursive' ' + + git merge -s subtree side && + for i in mundo $s world; do echo $i; done >expect && + test_cmp expect hello + +' + +test_expect_success 'setup branch sub' ' + git checkout --orphan sub && + git rm -rf . && + test_commit foo +' + +test_expect_success 'setup topic branch' ' + git checkout -b topic main && + git merge -s ours --no-commit --allow-unrelated-histories sub && + git read-tree --prefix=dir/ -u sub && + git commit -m "initial merge of sub into topic" && + test_path_is_file dir/foo.t && + test_path_is_file hello +' + +test_expect_success 'update branch sub' ' + git checkout sub && + test_commit bar +' + +test_expect_success 'update topic branch' ' + git checkout topic && + git merge -s subtree sub -m "second merge of sub into topic" && + test_path_is_file dir/bar.t && + test_path_is_file dir/foo.t && + test_path_is_file hello +' + +test_expect_success 'setup' ' + mkdir git-gui && + cd git-gui && + git init && + echo git-gui > git-gui.sh && + o1=$(git hash-object git-gui.sh) && + git add git-gui.sh && + git commit -m "initial git-gui" && + cd .. && + mkdir git && + cd git && + git init && + echo git >git.c && + o2=$(git hash-object git.c) && + git add git.c && + git commit -m "initial git" +' + +test_expect_success 'initial merge' ' + git remote add -f gui ../git-gui && + git merge -s ours --no-commit --allow-unrelated-histories gui/main && + git read-tree --prefix=git-gui/ -u gui/main && + git commit -m "Merge git-gui as our subdirectory" && + git checkout -b work && + git ls-files -s >actual && + ( + echo "100644 $o1 0 git-gui/git-gui.sh" && + echo "100644 $o2 0 git.c" + ) >expected && + test_cmp expected actual +' + +test_expect_success 'merge update' ' + cd ../git-gui && + echo git-gui2 > git-gui.sh && + o3=$(git hash-object git-gui.sh) && + git add git-gui.sh && + git checkout -b topic_2 && + git commit -m "update git-gui" && + cd ../git && + git pull -s subtree gui topic_2 && + git ls-files -s >actual && + ( + echo "100644 $o3 0 git-gui/git-gui.sh" && + echo "100644 $o2 0 git.c" + ) >expected && + test_cmp expected actual +' + +test_expect_success 'initial ambiguous subtree' ' + cd ../git && + git reset --hard main && + git checkout -b topic_2 && + git merge -s ours --no-commit gui/main && + git read-tree --prefix=git-gui2/ -u gui/main && + git commit -m "Merge git-gui2 as our subdirectory" && + git checkout -b work2 && + git ls-files -s >actual && + ( + echo "100644 $o1 0 git-gui/git-gui.sh" && + echo "100644 $o1 0 git-gui2/git-gui.sh" && + echo "100644 $o2 0 git.c" + ) >expected && + test_cmp expected actual +' + +test_expect_success 'merge using explicit' ' + cd ../git && + git reset --hard topic_2 && + git pull -Xsubtree=git-gui gui topic_2 && + git ls-files -s >actual && + ( + echo "100644 $o3 0 git-gui/git-gui.sh" && + echo "100644 $o1 0 git-gui2/git-gui.sh" && + echo "100644 $o2 0 git.c" + ) >expected && + test_cmp expected actual +' + +test_expect_success 'merge2 using explicit' ' + cd ../git && + git reset --hard topic_2 && + git pull -Xsubtree=git-gui2 gui topic_2 && + git ls-files -s >actual && + ( + echo "100644 $o1 0 git-gui/git-gui.sh" && + echo "100644 $o3 0 git-gui2/git-gui.sh" && + echo "100644 $o2 0 git.c" + ) >expected && + test_cmp expected actual +' + +test_done |