rebase -i: correctly remember --root flag across --continue
d911d14 (rebase -i: learn to rebase root commit, 2009-01-02) tried to
remember the --root flag across a merge conflict in a broken way.
Introduce a flag file $DOTEST/rebase-root to fix and clarify.
While at it, also make sure $UPSTREAM is always initialized to guard
against existing values in the environment.
[tr: added tests]
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
							parent
							
								
									f7d9d04e3b
								
							
						
					
					
						commit
						a6c7a27691
					
				|  | @ -456,7 +456,7 @@ get_saved_options () { | |||
| 	test -d "$REWRITTEN" && PRESERVE_MERGES=t | ||||
| 	test -f "$DOTEST"/strategy && STRATEGY="$(cat "$DOTEST"/strategy)" | ||||
| 	test -f "$DOTEST"/verbose && VERBOSE=t | ||||
| 	test ! -s "$DOTEST"/upstream && REBASE_ROOT=t | ||||
| 	test -f "$DOTEST"/rebase-root && REBASE_ROOT=t | ||||
| } | ||||
|  | ||||
| while test $# != 0 | ||||
|  | @ -586,6 +586,7 @@ first and then run 'git rebase --continue' again." | |||
| 			test -z "$ONTO" && ONTO=$UPSTREAM | ||||
| 			shift | ||||
| 		else | ||||
| 			UPSTREAM= | ||||
| 			UPSTREAM_ARG=--root | ||||
| 			test -z "$ONTO" && | ||||
| 				die "You must specify --onto when using --root" | ||||
|  | @ -612,7 +613,12 @@ first and then run 'git rebase --continue' again." | |||
| 			echo "detached HEAD" > "$DOTEST"/head-name | ||||
|  | ||||
| 		echo $HEAD > "$DOTEST"/head | ||||
| 		echo $UPSTREAM > "$DOTEST"/upstream | ||||
| 		case "$REBASE_ROOT" in | ||||
| 		'') | ||||
| 			rm -f "$DOTEST"/rebase-root ;; | ||||
| 		*) | ||||
| 			: >"$DOTEST"/rebase-root ;; | ||||
| 		esac | ||||
| 		echo $ONTO > "$DOTEST"/onto | ||||
| 		test -z "$STRATEGY" || echo "$STRATEGY" > "$DOTEST"/strategy | ||||
| 		test t = "$VERBOSE" && : > "$DOTEST"/verbose | ||||
|  |  | |||
|  | @ -184,4 +184,98 @@ test_expect_success 'pre-rebase hook stops rebase -i' ' | |||
| 	test 0 = $(git rev-list other...stops2 | wc -l) | ||||
| ' | ||||
|  | ||||
| test_expect_success 'remove pre-rebase hook' ' | ||||
| 	rm -f .git/hooks/pre-rebase | ||||
| ' | ||||
|  | ||||
| test_expect_success 'set up a conflict' ' | ||||
| 	git checkout master && | ||||
| 	echo conflict > B && | ||||
| 	git add B && | ||||
| 	git commit -m conflict | ||||
| ' | ||||
|  | ||||
| test_expect_success 'rebase --root with conflict (first part)' ' | ||||
| 	git checkout -b conflict1 other && | ||||
| 	test_must_fail git rebase --root --onto master && | ||||
| 	git ls-files -u | grep "B$" | ||||
| ' | ||||
|  | ||||
| test_expect_success 'fix the conflict' ' | ||||
| 	echo 3 > B && | ||||
| 	git add B | ||||
| ' | ||||
|  | ||||
| cat > expect-conflict <<EOF | ||||
| 6 | ||||
| 5 | ||||
| 4 | ||||
| 3 | ||||
| conflict | ||||
| 2 | ||||
| 1 | ||||
| EOF | ||||
|  | ||||
| test_expect_success 'rebase --root with conflict (second part)' ' | ||||
| 	git rebase --continue && | ||||
| 	git log --pretty=tformat:"%s" > conflict1 && | ||||
| 	test_cmp expect-conflict conflict1 | ||||
| ' | ||||
|  | ||||
| test_expect_success 'rebase -i --root with conflict (first part)' ' | ||||
| 	git checkout -b conflict2 other && | ||||
| 	GIT_EDITOR=: test_must_fail git rebase -i --root --onto master && | ||||
| 	git ls-files -u | grep "B$" | ||||
| ' | ||||
|  | ||||
| test_expect_success 'fix the conflict' ' | ||||
| 	echo 3 > B && | ||||
| 	git add B | ||||
| ' | ||||
|  | ||||
| test_expect_success 'rebase -i --root with conflict (second part)' ' | ||||
| 	git rebase --continue && | ||||
| 	git log --pretty=tformat:"%s" > conflict2 && | ||||
| 	test_cmp expect-conflict conflict2 | ||||
| ' | ||||
|  | ||||
| cat >expect-conflict-p <<\EOF | ||||
| commit conflict3 conflict3~1 conflict3^2 | ||||
| Merge branch 'third' into other | ||||
| commit conflict3^2 conflict3~4 | ||||
| 6 | ||||
| commit conflict3~1 conflict3~2 conflict3~1^2 | ||||
| Merge branch 'side' into other | ||||
| commit conflict3~1^2 conflict3~3 | ||||
| 5 | ||||
| commit conflict3~2 conflict3~3 | ||||
| 4 | ||||
| commit conflict3~3 conflict3~4 | ||||
| 3 | ||||
| commit conflict3~4 conflict3~5 | ||||
| conflict | ||||
| commit conflict3~5 conflict3~6 | ||||
| 2 | ||||
| commit conflict3~6 | ||||
| 1 | ||||
| EOF | ||||
|  | ||||
| test_expect_success 'rebase -i -p --root with conflict (first part)' ' | ||||
| 	git checkout -b conflict3 other && | ||||
| 	GIT_EDITOR=: test_must_fail git rebase -i -p --root --onto master && | ||||
| 	git ls-files -u | grep "B$" | ||||
| ' | ||||
|  | ||||
| test_expect_success 'fix the conflict' ' | ||||
| 	echo 3 > B && | ||||
| 	git add B | ||||
| ' | ||||
|  | ||||
| test_expect_success 'rebase -i -p --root with conflict (second part)' ' | ||||
| 	git rebase --continue && | ||||
| 	git rev-list --topo-order --parents --pretty="tformat:%s" HEAD | | ||||
| 	git name-rev --stdin --name-only --refs=refs/heads/conflict3 >out && | ||||
| 	test_cmp expect-conflict-p out | ||||
| ' | ||||
|  | ||||
| test_done | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano