Re: [PATCH] git-gui: remove lines starting with the comment character

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 02/02/21 05:26PM, Eric Sunshine wrote:
> On Tue, Feb 2, 2021 at 3:07 PM Pratyush Yadav <me@xxxxxxxxxxxxxxxxx> wrote:
> > The comment character is specified by the config variable
> > 'core.commentchar'. Any lines starting with this character is considered
> > a comment and should not be included in the final commit message.
> >
> > Teach git-gui to filter out lines in the commit message that start with
> > the comment character. If the config is not set, '#' is taken as the
> > default.
> 
> Thanks. This shortcoming has bugged me for a long time. A few comments below...
> 
> > Signed-off-by: Pratyush Yadav <me@xxxxxxxxxxxxxxxxx>
> > ---
> > diff --git a/lib/commit.tcl b/lib/commit.tcl
> > @@ -209,6 +209,28 @@ You must stage at least 1 file before you can commit.
> >         set msg [string trim [$ui_comm get 1.0 end]]
> >         regsub -all -line {[ \t\r]+$} $msg {} msg
> > +
> > +       # Remove lines starting with the comment character.
> > +       set comment_char [get_config core.commentchar]
> > +       if {[string length $comment_char] > 1} {
> > +               error_popup [mc "core.commitchar should only be one character."]
> > +               unlock_index
> > +               return
> > +       }
> > +
> > +       if {$comment_char eq {}} {
> > +               set comment_char "#"
> > +       }
> > +
> > +       # If the comment character is not alphabetical, then we need to escape it
> > +       # with a backslash to make sure it is not interpreted as a special character
> > +       # in the regex.
> > +       if {![string is alpha $comment_char]} {
> > +               set comment_char "\\$comment_char"
> > +       }
> > +
> > +       regsub -all -line "$comment_char.*(\\n|\\Z)" $msg {} msg
> 
> This regular expression is too loose. It will incorrectly change:
> 
>     line one
>     line # two
>     # line three
>     line four
> 
> into:
> 
>     line one
>     line
>     line four
> 
> You could fix it by anchoring the start of the match while being
> careful not to lose the newline at the start of line. Perhaps like
> this:
> 
>     regsub -all -line "(^|\\A)$comment_char.*(\\n|\\Z)" $msg {} msg

Good catch!

> 
> However, an even better approach than doing this manipulation manually
> might be to pass the commit message through `git stripspace
> --strip-comments` which will do the exact normalization that Git
> itself does. That way, you don't have to worry about weird corner
> cases. Also, using git-stripspace may allow you to get rid of the
> existing `trim` and `regsub` which precede the new code you added.

This is exactly what I was looking for when I was writing the patch but 
didn't manage to find it. Will re-roll. Thanks.

-- 
Regards,
Pratyush Yadav



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux