[PATCH 26/31] rebase: remember strategy and strategy options

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Martin von Zweigbergk
Date: Tuesday, December 28, 2010 - 2:30 am

When a rebase is resumed, interactive rebase remembers any merge
strategy passed when the rebase was initated. Make non-interactive
rebase remember any merge strategy as well. Also make non-interactive
rebase remember any merge strategy options.

To be able to resume a rebase that was initiated with an older version
of git (older than this commit), make sure not to expect the saved
option files to exist.

Test case idea taken from Junio's 71fc224 (t3402: test "rebase
-s<strategy> -X<opt>", 2010-11-11).

Signed-off-by: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>
---

How to add support for strategy options to interactive rebase?

 git-rebase--interactive.sh |    2 --
 git-rebase.sh              |    6 ++++++
 t/t3418-rebase-continue.sh |   29 +++++++++++++++++++++++++++++
 3 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index 7809932..0763ef5 100755
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -584,7 +584,6 @@ skip_unnecessary_picks () {
 
 get_saved_options () {
 	test -d "$REWRITTEN" && preserve_merges=t
-	test -f "$state_dir"/strategy && strategy="$(cat "$state_dir"/strategy)"
 	test -f "$state_dir"/rebase-root && rebase_root=t
 }
 
@@ -713,7 +712,6 @@ case "$rebase_root" in
 *)
 	: >"$state_dir"/rebase-root ;;
 esac
-test -z "$strategy" || echo "$strategy" > "$state_dir"/strategy
 if test t = "$preserve_merges"
 then
 	if test -z "$rebase_root"
diff --git a/git-rebase.sh b/git-rebase.sh
index e5be7e5..d192038 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -78,6 +78,9 @@ read_basic_state () {
 	fi &&
 	GIT_QUIET=$(cat "$state_dir"/quiet) &&
 	test -f "$state_dir"/verbose && verbose=t
+	test -f "$state_dir"/strategy && strategy="$(cat "$state_dir"/strategy)"
+	test -f "$state_dir"/strategy_opts &&
+		strategy_opts="$(cat "$state_dir"/strategy_opts)"
 }
 
 write_basic_state () {
@@ -91,6 +94,9 @@ write_basic_state () {
 	fi &&
 	echo "$GIT_QUIET" > "$state_dir"/quiet &&
 	test t = "$verbose" && : > "$state_dir"/verbose
+	test -n "$strategy" && echo "$strategy" > "$state_dir"/strategy
+	test -n "$strategy_opts" && echo "$strategy_opts" > \
+		"$state_dir"/strategy_opts
 }
 
 output () {
diff --git a/t/t3418-rebase-continue.sh b/t/t3418-rebase-continue.sh
index 1d90191..5469546 100755
--- a/t/t3418-rebase-continue.sh
+++ b/t/t3418-rebase-continue.sh
@@ -45,4 +45,33 @@ test_expect_success 'rebase --continue can not be used with other options' '
 	test_must_fail git rebase --continue -v
 '
 
+test_expect_success 'rebase --continue remembers merge strategy and options' '
+	rm -fr .git/rebase-* &&
+	git reset --hard commit-new-file-F2-on-topic-branch &&
+	test_commit "commit-new-file-F3-on-topic-branch" F3 32 &&
+	test_when_finished "rm -fr test-bin funny.was.run" &&
+	mkdir test-bin &&
+	cat >test-bin/git-merge-funny <<-EOF
+	#!$SHELL_PATH
+	case "\$1" in --opt) ;; *) exit 2 ;; esac
+	shift &&
+	>funny.was.run &&
+	exec git merge-recursive "\$@"
+	EOF
+	chmod +x test-bin/git-merge-funny &&
+	(
+		PATH=./test-bin:$PATH
+		test_must_fail git rebase -s funny -Xopt master topic
+	) &&
+	test -f funny.was.run &&
+	rm funny.was.run &&
+	echo "Resolved" >F2 &&
+	git add F2 &&
+	(
+		PATH=./test-bin:$PATH
+		git rebase --continue
+	) &&
+	test -f funny.was.run
+'
+
 test_done
-- 
1.7.3.2.864.gbbb96

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 00/31] Refactor rebase, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 01/31] rebase: clearer names for directory variables, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 02/31] rebase: refactor reading of state, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 03/31] rebase: read state outside loop, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 04/31] rebase: remove unused rebase state 'prev_head', Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 05/31] rebase: improve detection of rebase in progress, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 06/31] rebase: act on command line outside parsing loop, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 07/31] rebase: stricter check of standalone sub command, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 08/31] rebase: align variable names, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 09/31] rebase: align variable content, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 10/31] rebase: factor out command line option proce ..., Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 11/31] rebase -i: remove now unnecessary directory ..., Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 12/31] rebase: reorder validation steps, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 13/31] rebase: factor out reference parsing, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 14/31] rebase: factor out clean work tree check, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 15/31] rebase: factor out call to pre-rebase hook, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 16/31] rebase -i: support --stat, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 17/31] rebase: remove $branch as synonym for $orig_head, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 18/31] rebase: extract merge code to new source file, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 19/31] rebase: extract am code to new source file, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 20/31] rebase: show consistent conflict resolution hint, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 21/31] rebase -i: align variable names, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 22/31] rebase: make -v a tiny bit more verbose, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 23/31] rebase: factor out sub command handling, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 24/31] rebase: extract code for writing basic state, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 25/31] rebase: remember verbose option, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 26/31] rebase: remember strategy and strategy options, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 27/31] rebase -m: remember allow_rerere_autoupdate ..., Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 28/31] rebase -m: don't print exit code 2 when merg ..., Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 29/31] git-rebase--am: remove unnecessary --3way option, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 30/31] rebase -i: don't read unused variable preser ..., Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 31/31] rebase -i: remove unnecessary state rebase-root, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
Re: [PATCH 16/31] rebase -i: support --stat, Martin von Zweigbergk, (Tue Dec 28, 6:24 am)
Re: [PATCH 16/31] rebase -i: support --stat, Johannes Schindelin, (Tue Dec 28, 10:59 am)
Re: [PATCH 05/31] rebase: improve detection of rebase in p ..., Martin von Zweigbergk, (Tue Dec 28, 1:35 pm)
Re: [PATCH 01/31] rebase: clearer names for directory vari ..., Martin von Zweigbergk, (Tue Dec 28, 1:53 pm)
Re: [PATCH 02/31] rebase: refactor reading of state, Junio C Hamano, (Tue Dec 28, 4:08 pm)
Re: [PATCH 16/31] rebase -i: support --stat, Junio C Hamano, (Tue Dec 28, 4:36 pm)
Re: [PATCH 16/31] rebase -i: support --stat, Johannes Schindelin, (Tue Dec 28, 4:44 pm)
Re: [PATCH 02/31] rebase: refactor reading of state, Martin von Zweigbergk, (Wed Dec 29, 1:09 am)
Re: [PATCH 18/31] rebase: extract merge code to new source ..., Martin von Zweigbergk, (Wed Dec 29, 3:24 pm)
Re: [PATCH 31/31] rebase -i: remove unnecessary state reba ..., Martin von Zweigbergk, (Wed Dec 29, 3:31 pm)
Re: [PATCH 31/31] rebase -i: remove unnecessary state reba ..., Christian Couder, (Thu Dec 30, 10:41 pm)
Re: [PATCH 18/31] rebase: extract merge code to new source ..., Martin von Zweigbergk, (Fri Dec 31, 7:05 am)
Re: [PATCH 08/31] rebase: align variable names, Thomas Rast, (Tue Jan 4, 12:12 pm)
Re: [PATCH 00/31] Refactor rebase, Thomas Rast, (Tue Jan 4, 12:57 pm)