add commit count options to git-shortlog
This patch does 3 things: 1) Output the number of commits along with the name for each author (nice to know for long lists spending more than a screen worth of commit lines). 2) Provide a switch (-n) to sort authors according to their number of commits instead of author alphabetic order. 3) Provide a switch (-s) to supress commit lines and only keep a summary of authors and the number of commits for each of them. And for good measure a short usage is displayed with -h. Signed-off-by: Nicolas Pitre <nico@cam.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
96779be48a
commit
4e27fb06f0
@ -7,16 +7,29 @@ git-shortlog - Summarize 'git log' output
|
|||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
git-log --pretty=short | 'git-shortlog'
|
git-log --pretty=short | 'git-shortlog' [-h] [-n] [-s]
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
Summarizes 'git log' output in a format suitable for inclusion
|
Summarizes 'git log' output in a format suitable for inclusion
|
||||||
in release announcements. Each commit will be grouped by author
|
in release announcements. Each commit will be grouped by author and
|
||||||
the first line of the commit message will be shown.
|
the first line of the commit message will be shown.
|
||||||
|
|
||||||
Additionally, "[PATCH]" will be stripped from the commit description.
|
Additionally, "[PATCH]" will be stripped from the commit description.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
-h::
|
||||||
|
Print a short usage message and exit.
|
||||||
|
|
||||||
|
-n::
|
||||||
|
Sort output according to the number of commits per author instead
|
||||||
|
of author alphabetic order.
|
||||||
|
|
||||||
|
-s:
|
||||||
|
Supress commit description and Provide a commit count summary only.
|
||||||
|
|
||||||
FILES
|
FILES
|
||||||
-----
|
-----
|
||||||
'.mailmap'::
|
'.mailmap'::
|
||||||
|
@ -1,6 +1,18 @@
|
|||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use Getopt::Std;
|
||||||
|
use File::Basename qw(basename dirname);
|
||||||
|
|
||||||
|
our ($opt_h, $opt_n, $opt_s);
|
||||||
|
getopts('hns');
|
||||||
|
|
||||||
|
$opt_h && usage();
|
||||||
|
|
||||||
|
sub usage {
|
||||||
|
print STDERR "Usage: ${\basename $0} [-h] [-n] [-s] < <log_data>\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
my (%mailmap);
|
my (%mailmap);
|
||||||
my (%email);
|
my (%email);
|
||||||
@ -38,16 +50,38 @@ sub by_name($$) {
|
|||||||
|
|
||||||
uc($a) cmp uc($b);
|
uc($a) cmp uc($b);
|
||||||
}
|
}
|
||||||
|
sub by_nbentries($$) {
|
||||||
|
my ($a, $b) = @_;
|
||||||
|
my $a_entries = $map{$a};
|
||||||
|
my $b_entries = $map{$b};
|
||||||
|
|
||||||
|
@$b_entries - @$a_entries || by_name $a, $b;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $sort_method = $opt_n ? \&by_nbentries : \&by_name;
|
||||||
|
|
||||||
|
sub summary_output {
|
||||||
|
my ($obj, $num, $key);
|
||||||
|
|
||||||
|
foreach $key (sort $sort_method keys %map) {
|
||||||
|
$obj = $map{$key};
|
||||||
|
$num = @$obj;
|
||||||
|
printf "%s: %u\n", $key, $num;
|
||||||
|
$n_output += $num;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub shortlog_output {
|
sub shortlog_output {
|
||||||
my ($obj, $key, $desc);
|
my ($obj, $num, $key, $desc);
|
||||||
|
|
||||||
|
foreach $key (sort $sort_method keys %map) {
|
||||||
|
$obj = $map{$key};
|
||||||
|
$num = @$obj;
|
||||||
|
|
||||||
foreach $key (sort by_name keys %map) {
|
|
||||||
# output author
|
# output author
|
||||||
printf "%s:\n", $key;
|
printf "%s (%u):\n", $key, $num;
|
||||||
|
|
||||||
# output author's 1-line summaries
|
# output author's 1-line summaries
|
||||||
$obj = $map{$key};
|
|
||||||
foreach $desc (reverse @$obj) {
|
foreach $desc (reverse @$obj) {
|
||||||
print " $desc\n";
|
print " $desc\n";
|
||||||
$n_output++;
|
$n_output++;
|
||||||
@ -152,7 +186,7 @@ sub finalize {
|
|||||||
|
|
||||||
&setup_mailmap;
|
&setup_mailmap;
|
||||||
&changelog_input;
|
&changelog_input;
|
||||||
&shortlog_output;
|
$opt_s ? &summary_output : &shortlog_output;
|
||||||
&finalize;
|
&finalize;
|
||||||
exit(0);
|
exit(0);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user