Re: [PATCH] git-gui: remove lines starting with the comment character
- From
Pratyush Yadav <me@yadavpratyush.com>
- Date
- Feb 3, 2021, 11:54 UTC
- Message-ID
- <20210203115453.5ahqba63kvxtdfyb@yadavpratyush.com>
- In-Reply-To
- <CAPig+cT+n3=o9AVyK6FUQ=88aqdnoCfSAxmAO0Xe9S84a9RBqw@mail.gmail.com>
On 02/02/21 05:26PM, Eric Sunshine wrote:
Show 57 quoted lines
> On Tue, Feb 2, 2021 at 3:07 PM Pratyush Yadav <me@yadavpratyush.com> 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@yadavpratyush.com>
> > ---
> > 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 {} msgGood catch!
Show 7 quoted lines
> > 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