diff options
Diffstat (limited to 't/t7402-submodule-rebase.sh')
| -rwxr-xr-x | t/t7402-submodule-rebase.sh | 92 | 
1 files changed, 92 insertions, 0 deletions
| diff --git a/t/t7402-submodule-rebase.sh b/t/t7402-submodule-rebase.sh new file mode 100755 index 0000000000..5becb3ec54 --- /dev/null +++ b/t/t7402-submodule-rebase.sh @@ -0,0 +1,92 @@ +#!/bin/sh +# +# Copyright (c) 2008 Johannes Schindelin +# + +test_description='Test rebasing and stashing with dirty submodules' + +. ./test-lib.sh + +test_expect_success setup ' + +	echo file > file && +	git add file && +	test_tick && +	git commit -m initial && +	git clone . submodule && +	git add submodule && +	test_tick && +	git commit -m submodule && +	echo second line >> file && +	(cd submodule && git pull) && +	test_tick && +	git commit -m file-and-submodule -a + +' + +test_expect_success 'rebase with a dirty submodule' ' + +	(cd submodule && +	 echo 3rd line >> file && +	 test_tick && +	 git commit -m fork -a) && +	echo unrelated >> file2 && +	git add file2 && +	test_tick && +	git commit -m unrelated file2 && +	echo other line >> file && +	test_tick && +	git commit -m update file && +	CURRENT=$(cd submodule && git rev-parse HEAD) && +	EXPECTED=$(git rev-parse HEAD~2:submodule) && +	GIT_TRACE=1 git rebase --onto HEAD~2 HEAD^ && +	STORED=$(git rev-parse HEAD:submodule) && +	test $EXPECTED = $STORED && +	test $CURRENT = $(cd submodule && git rev-parse HEAD) + +' + +cat > fake-editor.sh << \EOF +#!/bin/sh +echo $EDITOR_TEXT +EOF +chmod a+x fake-editor.sh + +test_expect_success 'interactive rebase with a dirty submodule' ' + +	test submodule = $(git diff --name-only) && +	HEAD=$(git rev-parse HEAD) && +	GIT_EDITOR="\"$(pwd)/fake-editor.sh\"" EDITOR_TEXT="pick $HEAD" \ +		git rebase -i HEAD^ && +	test submodule = $(git diff --name-only) + +' + +test_expect_success 'rebase with dirty file and submodule fails' ' + +	echo yet another line >> file && +	test_tick && +	git commit -m next file && +	echo rewrite > file && +	test_tick && +	git commit -m rewrite file && +	echo dirty > file && +	! git rebase --onto HEAD~2 HEAD^ + +' + +test_expect_success 'stash with a dirty submodule' ' + +	echo new > file && +	CURRENT=$(cd submodule && git rev-parse HEAD) && +	git stash && +	test new != $(cat file) && +	test submodule = $(git diff --name-only) && +	test $CURRENT = $(cd submodule && git rev-parse HEAD) && +	git stash apply && +	test new = $(cat file) && +	test $CURRENT = $(cd submodule && git rev-parse HEAD) + +' + +test_done | 
