On Sat, Nov 17, 2018 at 05:06:43PM +0900, Junio C Hamano wrote:
> Are we already sometimes adding a scissors line in that file?  The
> impression I was getting was that the change in the step 2/2 is the
> only reason why this becomes necessary.  In which case this change
> makes no sense as a standalone patch and requires 2/2 to be a
> sensible change, no?
> 

My mistake, I guess I went a little overboard trying to split my
contribution into digestable patches.

> > @@ -798,7 +807,8 @@ static int prepare_to_commit(const char *index_file, 
> > const char *prefix,
> >             struct ident_split ci, ai;
> >  
> >             if (whence != FROM_COMMIT) {
> > -                   if (cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS)
> > +                   if (cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS &&
> > +                           !merge_contains_scissors)
> >                             wt_status_add_cut_line(s->fp);
> >                     status_printf_ln(s, GIT_COLOR_NORMAL,
> >                         whence == FROM_MERGE
> 
> This one is done before we show a block of text, which looks correct.
> 
> > @@ -824,7 +834,8 @@ static int prepare_to_commit(const char *index_file, 
> > const char *prefix,
> >                               " Lines starting\nwith '%c' will be ignored, 
> > and an empty"
> >                               " message aborts the commit.\n"), 
> > comment_line_char);
> >             else if (cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS &&
> > -                    whence == FROM_COMMIT)
> > +                    whence == FROM_COMMIT &&
> > +                    !merge_contains_scissors)
> >                     wt_status_add_cut_line(s->fp);
> >             else /* COMMIT_MSG_CLEANUP_SPACE, that is. */
> >                     status_printf(s, GIT_COLOR_NORMAL,
> 
> The correctness of this one in an if/elseif/else cascade is less
> clear.  When "contains scissors" logic does not kick in, we just
> have a scissors line here (i.e. the original behaviour).  Now when
> the new logic kicks in, we not just omit the (extra) scissors line,
> but also say "Please enter the commit message..." which is the
> message used with the "comment line char" mode of the clean-up.
> 
> I wonder if this is what you really meant to have instead:
> 
> >             else if (cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS &&
> > -                    whence == FROM_COMMIT)
> > -                   wt_status_add_cut_line(s->fp);
> > +                    whence == FROM_COMMIT) {
> > +                    if (!merge_contains_scissors)
> > +                           wt_status_add_cut_line(s->fp);
> > +           }
> >             else /* COMMIT_MSG_CLEANUP_SPACE, that is. */
> >                     status_printf(s, GIT_COLOR_NORMAL,
> 
> That is, the only behaviour change in "merge contains scissors"
> mode is to omit the cut line and nothing else.

Thanks for catching this. I noticed that the originally behaviour is
buggy too: in the case where we're merging a commit and scissors are
printed from the `if (whence != FROM_COMMIT)` block, the original
behaviour would drop us into the else (COMMIT_MSG_CLEANUP_SPACE)
statement, which is undesired. With this fix, the message about `#`
_not_ being removed is now silenced in both cases.

Changes since V1:
        * Only check MERGE_MSG for a scissors line instead of all prepended
          files
        * Make a variable static in merge where appropriate
        * Add passthrough options in pull
        * Add documentation for the new option
        * Add tests to ensure desired behaviour

Changes since V2:
        * Merge both patches into one patch
        * Fix bug in help message printing logic

Denton Liu (1):
  merge: add scissors line on merge conflict

 Documentation/merge-options.txt |  6 +++++
 builtin/commit.c                | 20 ++++++++++----
 builtin/merge.c                 | 16 +++++++++++
 builtin/pull.c                  |  6 +++++
 t/t7600-merge.sh                | 48 +++++++++++++++++++++++++++++++++
 5 files changed, 91 insertions(+), 5 deletions(-)

-- 
2.19.1

Reply via email to