Skip to content

Commit

Permalink
add commit count options to git-shortlog
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Nicolas Pitre authored and Junio C Hamano committed Oct 10, 2006
1 parent 96779be commit 4e27fb0
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 7 deletions.
17 changes: 15 additions & 2 deletions Documentation/git-shortlog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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'::
Expand Down
44 changes: 39 additions & 5 deletions git-shortlog.perl
Original file line number Diff line number Diff line change
@@ -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);
Expand Down Expand Up @@ -38,16 +50,38 @@ ($$)

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++;
Expand Down Expand Up @@ -152,7 +186,7 @@ sub finalize {

&setup_mailmap;
&changelog_input;
&shortlog_output;
$opt_s ? &summary_output : &shortlog_output;
&finalize;
exit(0);

Expand Down

0 comments on commit 4e27fb0

Please sign in to comment.