diff options
author | Nicolas Pitre <nico@cam.org> | 2006-10-06 15:39:09 -0400 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-10-09 20:23:09 -0700 |
commit | 4e27fb06f0fe4206606172f94a18e08d7d87c070 (patch) | |
tree | 058f0fb02a5e583283c72458988b95f549fb2e5d | |
parent | 96779be48a8e5d3a50a07e0fcab942e7066235a9 (diff) | |
download | git-4e27fb06f0fe4206606172f94a18e08d7d87c070.tar.gz |
add commit count options to git-shortlogv1.4.3-rc2
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>
-rw-r--r-- | Documentation/git-shortlog.txt | 17 | ||||
-rwxr-xr-x | git-shortlog.perl | 44 |
2 files changed, 54 insertions, 7 deletions
diff --git a/Documentation/git-shortlog.txt b/Documentation/git-shortlog.txt index 7486ebe785..1601d2267c 100644 --- a/Documentation/git-shortlog.txt +++ b/Documentation/git-shortlog.txt @@ -7,16 +7,29 @@ git-shortlog - Summarize 'git log' output SYNOPSIS -------- -git-log --pretty=short | 'git-shortlog' +git-log --pretty=short | 'git-shortlog' [-h] [-n] [-s] DESCRIPTION ----------- 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. 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 ----- '.mailmap':: diff --git a/git-shortlog.perl b/git-shortlog.perl index 0b14f833ee..334fec7477 100755 --- a/git-shortlog.perl +++ b/git-shortlog.perl @@ -1,6 +1,18 @@ #!/usr/bin/perl -w 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 (%email); @@ -38,16 +50,38 @@ sub by_name($$) { 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 { - 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 - printf "%s:\n", $key; + printf "%s (%u):\n", $key, $num; # output author's 1-line summaries - $obj = $map{$key}; foreach $desc (reverse @$obj) { print " $desc\n"; $n_output++; @@ -152,7 +186,7 @@ sub finalize { &setup_mailmap; &changelog_input; -&shortlog_output; +$opt_s ? &summary_output : &shortlog_output; &finalize; exit(0); |