Skip to content
  • Elijah Newren's avatar
    sequencer: fix --allow-empty-message behavior, make it smarter · a3ec9eaf
    Elijah Newren authored and Junio C Hamano's avatar Junio C Hamano committed
    In commit b00bf1c9 ("git-rebase: make --allow-empty-message the
    default", 2018-06-27), several arguments were given for transplanting
    empty commits without halting and asking the user for confirmation on
    each commit.  These arguments were incomplete because the logic clearly
    assumed the only cases under consideration were transplanting of commits
    with empty messages (see the comment about "There are two sources for
    commits with empty messages).  It didn't discuss or even consider
    rewords, squashes, etc. where the user is explicitly asked for a new
    commit message and provides an empty one.  (My bad, I totally should
    have thought about that at the time, but just didn't.)
    
    Rewords and squashes are significantly different, though, as described
    by SZEDER:
    
        Let's suppose you start an interactive rebase, choose a commit to
        squash, save the instruction sheet, rebase fires up your editor, and
        then you notice that you mistakenly chose the wrong commit to
        squash.  What do you do, how do you abort?
    
        Before [that commit] you could clear the commit message, exit the
        editor, and then rebase would say "Aborting commit due to empty
        commit message.", and you get to run 'git rebase --abort', and start
        over.
    
        But [since that commit, ...] saving the commit message as is would
        let rebase continue and create a bunch of unnecessary objects, and
        then you would have to use the reflog to return to the pre-rebase
        state.
    
    Also, he states:
    
        The instructions in the commit message template, which is shown for
        'reword' and 'squash', too, still say...
    
        # Please enter the commit message for your changes. Lines starting
        # with '#' will be ignored, and an empty message aborts the commit.
    
    These are sound arguments that when editing commit messages during a
    sequencer operation, that if the commit message is empty then the
    operation should halt and ask the user to correct.  The arguments in
    commit b00bf1c9
    
     (referenced above) still apply when transplanting
    previously created commits with empty commit messages, so the sequencer
    should not halt for those.
    
    Furthermore, all rationale so far applies equally for cherry-pick as for
    rebase.  Therefore, make the code default to --allow-empty-message when
    transplanting an existing commit, and to default to halting when the
    user is asked to edit a commit message and provides an empty one -- for
    both rebase and cherry-pick.
    
    Signed-off-by: default avatarElijah Newren <newren@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    a3ec9eaf