зеркало из https://github.com/microsoft/git.git
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:
Родитель
96779be48a
Коммит
4e27fb06f0
|
@ -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'::
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче