Merge branch 'js/fix-merge-arg-quoting-in-rebase-p' into next
authorJunio C Hamano <gitster@pobox.com>
Wed, 14 Feb 2018 21:34:29 +0000 (13:34 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 14 Feb 2018 21:34:30 +0000 (13:34 -0800)
"git rebase -p" mangled log messages of a merge commit, which is
now fixed.

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

1  2 
git-rebase--interactive.sh
index 81c5b42875771ab98ca86e718e14a5a393aa1a86,b0402cf739c7b9ecbc77b21a2bc3cbbd889e1781..637bb3ecd5bd25222b725c10619cd3a078fd95b4
@@@ -281,7 -281,7 +281,7 @@@ pick_one () 
  
        test -d "$rewritten" &&
                pick_one_preserving_merges "$@" && return
 -      output eval git cherry-pick $allow_rerere_autoupdate \
 +      output eval git cherry-pick $allow_rerere_autoupdate $allow_empty_message \
                        ${gpg_sign_opt:+$(git rev-parse --sq-quote "$gpg_sign_opt")} \
                        "$strategy_args" $empty_args $ff "$@"
  
@@@ -396,7 -396,7 +396,7 @@@ pick_one_preserving_merges () 
                                        --sq-quote "$gpg_sign_opt")} \
                                $allow_rerere_autoupdate "$merge_args" \
                                "$strategy_args" \
-                               -m $(git rev-parse --sq-quote "$msg_content") \
+                               -m "$(git rev-parse --sq-quote "$msg_content")" \
                                "$new_parents"
                        then
                                printf "%s\n" "$msg_content" > "$GIT_DIR"/MERGE_MSG
                        ;;
                *)
                        output eval git cherry-pick $allow_rerere_autoupdate \
 +                              $allow_empty_message \
                                ${gpg_sign_opt:+$(git rev-parse --sq-quote "$gpg_sign_opt")} \
                                "$strategy_args" "$@" ||
                                die_with_patch $sha1 "$(eval_gettext "Could not pick \$sha1")"
@@@ -560,8 -559,7 +560,8 @@@ do_next () 
  
                mark_action_done
                do_pick $sha1 "$rest"
 -              git commit --amend --no-post-rewrite ${gpg_sign_opt:+"$gpg_sign_opt"} || {
 +              git commit --amend --no-post-rewrite ${gpg_sign_opt:+"$gpg_sign_opt"} \
 +                      $allow_empty_message || {
                        warn "$(eval_gettext "\
  Could not amend commit after successfully picking \$sha1... \$rest
  This is most likely due to an empty commit message, or the pre-commit hook
@@@ -609,7 -607,7 +609,7 @@@ you are able to reword the commit.")
                        # This is an intermediate commit; its message will only be
                        # used in case of trouble.  So use the long version:
                        do_with_author output git commit --amend --no-verify -F "$squash_msg" \
 -                              ${gpg_sign_opt:+"$gpg_sign_opt"} ||
 +                              ${gpg_sign_opt:+"$gpg_sign_opt"} $allow_empty_message ||
                                die_failed_squash $sha1 "$rest"
                        ;;
                *)
                        if test -f "$fixup_msg"
                        then
                                do_with_author git commit --amend --no-verify -F "$fixup_msg" \
 -                                      ${gpg_sign_opt:+"$gpg_sign_opt"} ||
 +                                      ${gpg_sign_opt:+"$gpg_sign_opt"} $allow_empty_message ||
                                        die_failed_squash $sha1 "$rest"
                        else
                                cp "$squash_msg" "$GIT_DIR"/SQUASH_MSG || exit
                                rm -f "$GIT_DIR"/MERGE_MSG
                                do_with_author git commit --amend --no-verify -F "$GIT_DIR"/SQUASH_MSG -e \
 -                                      ${gpg_sign_opt:+"$gpg_sign_opt"} ||
 +                                      ${gpg_sign_opt:+"$gpg_sign_opt"} $allow_empty_message ||
                                        die_failed_squash $sha1 "$rest"
                        fi
                        rm -f "$squash_msg" "$fixup_msg"
@@@ -727,6 -725,27 +727,6 @@@ collapse_todo_ids() 
        git rebase--helper --shorten-ids
  }
  
 -# Add commands after a pick or after a squash/fixup series
 -# in the todo list.
 -add_exec_commands () {
 -      {
 -              first=t
 -              while read -r insn rest
 -              do
 -                      case $insn in
 -                      pick)
 -                              test -n "$first" ||
 -                              printf "%s" "$cmd"
 -                              ;;
 -                      esac
 -                      printf "%s %s\n" "$insn" "$rest"
 -                      first=
 -              done
 -              printf "%s" "$cmd"
 -      } <"$1" >"$1.new" &&
 -      mv "$1.new" "$1"
 -}
 -
  # Switch to the branch in $into and notify it in the reflog
  checkout_onto () {
        GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name"
@@@ -756,8 -775,7 +756,8 @@@ case "$action" i
  continue)
        if test ! -d "$rewritten"
        then
 -              exec git rebase--helper ${force_rebase:+--no-ff} --continue
 +              exec git rebase--helper ${force_rebase:+--no-ff} $allow_empty_message \
 +                      --continue
        fi
        # do we have anything to commit?
        if git diff-index --cached --quiet HEAD --
@@@ -797,11 -815,11 +797,11 @@@ In both cases, once you're done, contin
  You have uncommitted changes in your working tree. Please commit them
  first and then run 'git rebase --continue' again.")"
                        do_with_author git commit --amend --no-verify -F "$msg" -e \
 -                              ${gpg_sign_opt:+"$gpg_sign_opt"} ||
 +                              ${gpg_sign_opt:+"$gpg_sign_opt"} $allow_empty_message ||
                                die "$(gettext "Could not commit staged changes.")"
                else
                        do_with_author git commit --no-verify -F "$msg" -e \
 -                              ${gpg_sign_opt:+"$gpg_sign_opt"} ||
 +                              ${gpg_sign_opt:+"$gpg_sign_opt"} $allow_empty_message ||
                                die "$(gettext "Could not commit staged changes.")"
                fi
        fi
@@@ -820,8 -838,7 +820,8 @@@ skip
  
        if test ! -d "$rewritten"
        then
 -              exec git rebase--helper ${force_rebase:+--no-ff} --continue
 +              exec git rebase--helper ${force_rebase:+--no-ff} $allow_empty_message \
 +                      --continue
        fi
        do_rest
        return 0
@@@ -900,8 -917,7 +900,8 @@@ f
  if test t != "$preserve_merges"
  then
        git rebase--helper --make-script ${keep_empty:+--keep-empty} \
 -              $revisions ${restrict_revision+^$restrict_revision} >"$todo"
 +              $revisions ${restrict_revision+^$restrict_revision} >"$todo" ||
 +      die "$(gettext "Could not generate todo list")"
  else
        format=$(git config --get rebase.instructionFormat)
        # the 'rev-list .. | sed' requires %m to parse; the instruction requires %H to parse
@@@ -969,7 -985,7 +969,7 @@@ f
  
  test -s "$todo" || echo noop >> "$todo"
  test -z "$autosquash" || git rebase--helper --rearrange-squash || exit
 -test -n "$cmd" && add_exec_commands "$todo"
 +test -n "$cmd" && git rebase--helper --add-exec-commands "$cmd"
  
  todocount=$(git stripspace --strip-comments <"$todo" | wc -l)
  todocount=${todocount##* }
@@@ -1020,8 -1036,7 +1020,8 @@@ checkout_ont
  if test -z "$rebase_root" && test ! -d "$rewritten"
  then
        require_clean_work_tree "rebase"
 -      exec git rebase--helper ${force_rebase:+--no-ff} --continue
 +      exec git rebase--helper ${force_rebase:+--no-ff} $allow_empty_message \
 +              --continue
  fi
  do_rest