Browse Source

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>
maint v1.4.3-rc2
Nicolas Pitre 19 years ago committed by Junio C Hamano
parent
commit
4e27fb06f0
  1. 17
      Documentation/git-shortlog.txt
  2. 44
      git-shortlog.perl

17
Documentation/git-shortlog.txt

@ -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'::

44
git-shortlog.perl

@ -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…
Cancel
Save