Re: [PATCH] rebase -i: Remember merge options beyond continue actions
On Mon, Jun 9, 2014 at 8:02 PM, Fabian Ruch <bafain@gmail.com> wrote:
> If the user explicitly specified a merge strategy or strategy options,
> "rebase --interactive" started using the default merge strategy again
> after "rebase --continue".
For reference, this problem was reported as far back as 2013-08-09 [1].
[1]: http://article.gmane.org/gmane.comp.version-control.git/232013
Show 6 quoted lines
> 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".
Show 63 quoted lines
> ---
> 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