From a22741ce1d382c0eb911631603ee448b500cb093 Mon Sep 17 00:00:00 2001 From: Martin von Zweigbergk Date: Tue, 28 Dec 2010 10:30:43 +0100 Subject: [PATCH] rebase: remember strategy and strategy options 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 -X", 2010-11-11). Signed-off-by: Martin von Zweigbergk Signed-off-by: Junio C Hamano --- 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 78099320a..0763ef562 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 e5be7e5dd..d19203804 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 1d90191e5..5469546c3 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 -- 2.30.2