156 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			156 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/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
 |