From b29e2c22710b965ec942dcc33f0b26e08ad76b50 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Fri, 10 Sep 2021 17:10:15 -0400 Subject: Add git comment --pretty option --- bin/git-comment.pl | 37 +++++++++++++++++-------------------- bin/man1/git-comment.1 | 31 +++++++++++++++++++++++++++---- 2 files changed, 44 insertions(+), 24 deletions(-) diff --git a/bin/git-comment.pl b/bin/git-comment.pl index f7d288ca..a46f43fe 100644 --- a/bin/git-comment.pl +++ b/bin/git-comment.pl @@ -28,6 +28,7 @@ my ($all, $minGroup, $minRepeat, $noRepeat) = (0, 2, 30, 0); my $commentStart = $repo->config('comment.start') // "/*"; my $commentLead = $repo->config('comment.lead') // " *"; my $commentEnd = $repo->config('comment.end') // " */"; +my $pretty = $repo->config('comment.pretty') // 'format:%h %s%n%n%-b'; GetOptions( 'all' => \$all, 'comment-start=s' => \$commentStart, @@ -36,13 +37,14 @@ GetOptions( 'min-group=i' => \$minGroup, 'min-repeat=i' => \$minRepeat, 'no-repeat' => \$noRepeat, + 'pretty=s' => \$pretty, ) or die; sub printComment { - my ($indent, $abbrev, $summary, @body) = @_; - print "$indent$commentStart $abbrev $summary"; + my ($indent, $summary, @body) = @_; + print "$indent$commentStart $summary"; if (@body) { - print "\n$indent$commentLead\n"; + print "\n"; foreach (@body) { print "$indent$commentLead"; print " $_" if $_; @@ -56,37 +58,32 @@ sub printComment { my ($pipe, $ctx) = $repo->command_output_pipe('blame', '--porcelain', @ARGV); -my ($commit, $nr, $group, $printed, %abbrev, %summary, %body, %nrs); +my ($commit, $nr, $group, $printed, %message, %nrs); while (<$pipe>) { chomp; if (/^([[:xdigit:]]+) \d+ (\d+) (\d+)/) { ($commit, $nr, $group, $printed) = ($1, $2, $3, 0); - $abbrev{$commit} = 'dirty' if $commit =~ /^0+$/; - next if $abbrev{$commit}; - my @body = $repo->command( - 'show', '--no-patch', '--pretty=format:%h%n%b', $commit + next if $message{$commit}; + if ($commit =~ /^0+$/) { + $message{$commit} = ['Not committed yet']; + next; + } + my @message = $repo->command( + 'show', '--no-patch', "--pretty=$pretty", $commit ); - $abbrev{$commit} = shift @body; - $body{$commit} = \@body; - - } elsif (/^summary (.*)/) { - $summary{$commit} = $1; - + $message{$commit} = \@message; } elsif (/^\t(\s*)(.*)/) { my ($indent, $line) = ($1, $2); - unless ($printed || $line =~ /^}?$/) { + unless ($printed || $line =~ /^}?;?$/) { $printed = 1; if ( $group >= $minGroup && !($noRepeat && $nrs{$commit}) && !($nrs{$commit} && $nr < $nrs{$commit} + $minRepeat) && - ($all || @{$body{$commit}}) + ($all || @{$message{$commit}} > 1) ) { $nrs{$commit} = $nr; - printComment( - $indent, $abbrev{$commit}, $summary{$commit}, - @{$body{$commit}} - ); + printComment($indent, @{$message{$commit}}); } } print "$indent$line\n"; diff --git a/bin/man1/git-comment.1 b/bin/man1/git-comment.1 index a981f839..8e958f30 100644 --- a/bin/man1/git-comment.1 +++ b/bin/man1/git-comment.1 @@ -1,4 +1,4 @@ -.Dd September 8, 2021 +.Dd September 10, 2021 .Dt GIT-COMMENT 1 .Os . @@ -15,16 +15,26 @@ .Op Fl \-min-group Ar lines .Op Fl \-min-repeat Ar lines .Op Fl \-no-repeat +.Op Fl \-pretty Ar format .Op Ar options ... .Op Fl \- .Ar file . .Sh DESCRIPTION -Annotates the given file with comments -containing the commit messages -of the revisions +The +.Nm +command +adds comments to a file +showing the commit messages which last modified each group of lines. +By default only commit messages with bodies +and which modified groups of at least 2 lines +are added. +Each comment contains +the abbreviated commit hash +and the commit summary, +followed by the commit body. . .Pp .Nm @@ -75,6 +85,16 @@ The default is 30 lines. . .It Fl \-no-repeat Avoid repeating comments entirely. +. +.It Fl \-pretty Ar format +Set the pretty-print format +to use for commit messages. +The default is the value of +.Cm comment.pretty +or +.Ql format:%h\ %s%n%n%-b . +See +.Xr git-show 1 . .El . .Sh EXAMPLES @@ -92,3 +112,6 @@ Add as many comments as possible: .Bd -literal -offset indent git comment --all --min-group 1 --min-repeat 1 .Ed +. +.Sh SEE ALSO +.Xr git-blame 1 -- cgit 1.4.1