Skip to content

Commit

Permalink
Do not ignore merge options in interactive rebase
Browse files Browse the repository at this point in the history
Merge strategy and its options can be specified in `git rebase`,
but with `--interactive`, they were completely ignored.

Signed-off-by: Arnaud Fontaine <arnau@debian.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Arnaud Fontaine authored and gitster committed Jul 2, 2013
1 parent 9832cb9 commit db2b3b8
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 5 deletions.
21 changes: 16 additions & 5 deletions git-rebase--interactive.sh
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,18 @@ 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

GIT_CHERRY_PICK_HELP="$resolvemsg"
export GIT_CHERRY_PICK_HELP

Expand Down Expand Up @@ -239,7 +251,7 @@ pick_one () {

test -d "$rewritten" &&
pick_one_preserving_merges "$@" && return
output git cherry-pick $empty_args $ff "$@"
output eval git cherry-pick "$strategy_args" $empty_args $ff "$@"
}

pick_one_preserving_merges () {
Expand Down Expand Up @@ -340,17 +352,16 @@ pick_one_preserving_merges () {
msg_content="$(commit_message $sha1)"
# No point in merging the first parent, that's HEAD
new_parents=${new_parents# $first_parent}
if ! do_with_author output \
git merge --no-ff ${strategy:+-s $strategy} -m \
"$msg_content" $new_parents
if ! do_with_author output eval \
'git merge --no-ff $strategy_args -m "$msg_content" $new_parents'
then
printf "%s\n" "$msg_content" > "$GIT_DIR"/MERGE_MSG
die_with_patch $sha1 "Error redoing merge $sha1"
fi
echo "$sha1 $(git rev-parse HEAD^0)" >> "$rewritten_list"
;;
*)
output git cherry-pick "$@" ||
output eval git cherry-pick "$strategy_args" "$@" ||
die_with_patch $sha1 "Could not pick $sha1"
;;
esac
Expand Down
11 changes: 11 additions & 0 deletions t/t3404-rebase-interactive.sh
Original file line number Diff line number Diff line change
Expand Up @@ -950,4 +950,15 @@ test_expect_success 'rebase -i, with <onto> and <upstream> specified as :/quuxer
git checkout branch1
'

test_expect_success 'rebase -i with --strategy and -X' '
git checkout -b conflict-merge-use-theirs conflict-branch &&
git reset --hard HEAD^ &&
echo five >conflict &&
echo Z >file1 &&
git commit -a -m "one file conflict" &&
EDITOR=true git rebase -i --strategy=recursive -Xours conflict-branch &&
test $(git show conflict-branch:conflict) = $(cat conflict) &&
test $(cat file1) = Z
'

test_done

0 comments on commit db2b3b8

Please sign in to comment.