| #!/bin/sh | 
 |  | 
 | test_description='subtree merge strategy' | 
 |  | 
 | . ./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 master && | 
 | 	for i in mundo $s; do echo $i; done >hello && | 
 | 	git add hello && | 
 | 	git commit -m master | 
 |  | 
 | ' | 
 |  | 
 | 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' ' | 
 | 	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 gui/master && | 
 | 	git read-tree --prefix=git-gui/ -u gui/master && | 
 | 	git commit -m "Merge git-gui as our subdirectory" && | 
 | 	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 commit -m "update git-gui" && | 
 | 	cd ../git && | 
 | 	git pull -s subtree gui master && | 
 | 	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_done |