git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] rebase -i: Remember merge options beyond continue actions

From
Fabian Ruch <bafain@gmail.com>
Date
Jun 10, 2014, 00:37 UTC
Message-ID
<53965334.3030206@gmail.com>
In-Reply-To
<CAPig+cSHFFPUEQz8==HLQr0My2Bfsth_F16wVf9giytqGwzZww@mail.gmail.com>
Hi Eric,
thanks a lot for the reference.
I added the Reported-by: and Signed-off-by: lines to the commit message.
   Fabian
-- >8 --
Subject: rebase -i: Remember merge options beyond continue actions

If the user explicitly specified a merge strategy or strategy options, "rebase --interactive" started using the default merge strategy again after "rebase --continue".

This problem gets fixed by this commit. Add test.

Since the "rebase" options "-s" and "-X" imply "--merge", we can simply remove the "do_merge" guard in the interactive mode and always compile the "cherry-pick" arguments from the "rebase" state variables "strategy" and "strategy_opts".

Reported-by: Diogo de Campos <campos@esss.com.br>
Signed-off-by: Fabian Ruch <bafain@gmail.com>
---
 git-rebase--interactive.sh    | 18 +++++++-----------
 t/t3404-rebase-interactive.sh | 16 ++++++++++++++++
 2 files changed, 23 insertions(+), 11 deletions(-)
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index 6ec9d3c..817c933 100644
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -77,17 +77,13 @@ amend="$state_dir"/amend
 rewritten_list="$state_dir"/rewritten-list
 rewritten_pending="$state_dir"/rewritten-pending
 
-strategy_args=
-if test -n "$do_merge"
-then
-	strategy_args=${strategy:+--strategy=$strategy}
-	eval '
-		for strategy_opt in '"$strategy_opts"'
-		do
-			strategy_args="$strategy_args -X$(git rev-parse --sq-quote "${strategy_opt#--}")"
-		done
-	'
-fi
+strategy_args=${strategy:+--strategy=$strategy}
+eval '
+	for strategy_opt in '"$strategy_opts"'
+	do
+		strategy_args="$strategy_args -X$(git rev-parse --sq-quote "${strategy_opt#--}")"
+	done
+'
 
 GIT_CHERRY_PICK_HELP="$resolvemsg"
 export GIT_CHERRY_PICK_HELP
diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
index c0023a5..73849f1 100755
--- a/t/t3404-rebase-interactive.sh
+++ b/t/t3404-rebase-interactive.sh
@@ -998,6 +998,22 @@ test_expect_success 'rebase -i with --strategy and -X' '
 	test $(cat file1) = Z
 '
 
+test_expect_success 'interrupted rebase -i with --strategy and -X' '
+	git checkout -b conflict-merge-use-theirs-interrupted conflict-branch &&
+	git reset --hard HEAD^ &&
+	>breakpoint &&
+	git add breakpoint &&
+	git commit -m "breakpoint for interactive mode" &&
+	echo five >conflict &&
+	echo Z >file1 &&
+	git commit -a -m "one file conflict" &&
+	set_fake_editor &&
+	FAKE_LINES="edit 1 2" git rebase -i --strategy=recursive -Xours conflict-branch &&
+	git rebase --continue &&
+	test $(git show conflict-branch:conflict) = $(cat conflict) &&
+	test $(cat file1) = Z
+'
+
 test_expect_success 'rebase -i error on commits with \ in message' '
 	current_head=$(git rev-parse HEAD)
 	test_when_finished "git rebase --abort; git reset --hard $current_head; rm -f error" &&
-- 
2.0.0
Previous: Eric SunshineNext: Michael Haggerty
Message 3 of 8 in “rebase -i: Remember merge options beyond continue actions”
  1. rebase -i: Remember merge options beyond continue actionsFabian Ruch, Jun 10, 2014
  2. Eric SunshineJun 10, 2014
  3. Fabian RuchJun 10, 2014
  4. Michael HaggertyJun 11, 2014
  5. Ralf ThielowJul 18, 2014
  6. rebase -i: remember merge options beyond continue actionsRalf Thielow, Dec 11, 2015
  7. Junio C HamanoDec 11, 2015
  8. rebase -i: remember merge options beyond continue actionsRalf Thielow, Dec 11, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.