Merge branch 'js/fix-merge-arg-quoting-in-rebase-p'
authorJunio C Hamano <gitster@pobox.com>
Wed, 10 Jan 2018 22:01:24 +0000 (14:01 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 10 Jan 2018 22:01:24 +0000 (14:01 -0800)
"git rebase -p -X<option>" did not propagate the option properly
down to underlying merge strategy backend.

* js/fix-merge-arg-quoting-in-rebase-p:
rebase -p: fix quoting when calling `git merge`

git-rebase--interactive.sh
t/t3418-rebase-continue.sh
index b7f95672bd90ba04564e1446c97be887645706de..d47bd29593ad8711448293f3b6bf2e059323ff78 100644 (file)
@@ -392,9 +392,12 @@ pick_one_preserving_merges () {
                        new_parents=${new_parents# $first_parent}
                        merge_args="--no-log --no-ff"
                        if ! do_with_author output eval \
-                       'git merge ${gpg_sign_opt:+"$gpg_sign_opt"} \
-                               $allow_rerere_autoupdate $merge_args \
-                               $strategy_args -m "$msg_content" $new_parents'
+                               git merge ${gpg_sign_opt:+$(git rev-parse \
+                                       --sq-quote "$gpg_sign_opt")} \
+                               $allow_rerere_autoupdate "$merge_args" \
+                               "$strategy_args" \
+                               -m $(git rev-parse --sq-quote "$msg_content") \
+                               "$new_parents"
                        then
                                printf "%s\n" "$msg_content" > "$GIT_DIR"/MERGE_MSG
                                die_with_patch $sha1 "$(eval_gettext "Error redoing merge \$sha1")"
index fcfdd197bd352a9dca10233c2ba6d2aa4a66149e..7c91a85f43a7a11295819adc5da5f8e5fca9e4ea 100755 (executable)
@@ -74,6 +74,20 @@ test_expect_success 'rebase --continue remembers merge strategy and options' '
        test -f funny.was.run
 '
 
+test_expect_success 'rebase passes merge strategy options correctly' '
+       rm -fr .git/rebase-* &&
+       git reset --hard commit-new-file-F3-on-topic-branch &&
+       test_commit theirs-to-merge &&
+       git reset --hard HEAD^ &&
+       test_commit some-commit &&
+       test_tick &&
+       git merge --no-ff theirs-to-merge &&
+       FAKE_LINES="1 edit 2 3" git rebase -i -f -p -m \
+               -s recursive --strategy-option=theirs HEAD~2 &&
+       test_commit force-change &&
+       git rebase --continue
+'
+
 test_expect_success 'setup rerere database' '
        rm -fr .git/rebase-* &&
        git reset --hard commit-new-file-F3-on-topic-branch &&