зеркало из https://github.com/microsoft/git.git
Use Ryan's git-annotate instead of jsannotate
Since Ryan's git-annotate is much faster, and has support for renames, it is likely it goes into the mainstream git soon. Adapt it a little to work with gitcvs, and actually use it. Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Родитель
c65e898754
Коммит
4788d11a0d
|
@ -8,10 +8,26 @@
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use Getopt::Std;
|
||||
use POSIX qw(strftime gmtime);
|
||||
|
||||
sub usage() {
|
||||
print STDERR 'Usage: ${\basename $0} [-s] [-S revs-file] file
|
||||
|
||||
-l show long rev
|
||||
-r follow renames
|
||||
-S commit use revs from revs-file instead of calling git-rev-list
|
||||
';
|
||||
|
||||
exit(1);
|
||||
}
|
||||
|
||||
our ($opt_h, $opt_l, $opt_r, $opt_S);
|
||||
getopts("hlrS:") or usage();
|
||||
$opt_h && usage();
|
||||
|
||||
my $filename = shift @ARGV;
|
||||
|
||||
|
||||
my @stack = (
|
||||
{
|
||||
'rev' => "HEAD",
|
||||
|
@ -41,12 +57,19 @@ while (my $bound = pop @stack) {
|
|||
my ($rev, @parents) = @$revinst;
|
||||
$head ||= $rev;
|
||||
|
||||
if (!defined($rev)) {
|
||||
$rev = "";
|
||||
}
|
||||
$revs{$rev}{'filename'} = $bound->{'filename'};
|
||||
if (scalar @parents > 0) {
|
||||
$revs{$rev}{'parents'} = \@parents;
|
||||
next;
|
||||
}
|
||||
|
||||
if (!$opt_r) {
|
||||
next;
|
||||
}
|
||||
|
||||
my $newbound = find_parent_renames($rev, $bound->{'filename'});
|
||||
if ( exists $newbound->{'filename'} && $newbound->{'filename'} ne $bound->{'filename'}) {
|
||||
push @stack, $newbound;
|
||||
|
@ -65,7 +88,7 @@ foreach my $l (@filelines) {
|
|||
my ($output, $rev, $committer, $date);
|
||||
if (ref $l eq 'ARRAY') {
|
||||
($output, $rev, $committer, $date) = @$l;
|
||||
if (length($rev) > 8) {
|
||||
if (!$opt_l && length($rev) > 8) {
|
||||
$rev = substr($rev,0,8);
|
||||
}
|
||||
} else {
|
||||
|
@ -73,7 +96,8 @@ foreach my $l (@filelines) {
|
|||
($rev, $committer, $date) = ('unknown', 'unknown', 'unknown');
|
||||
}
|
||||
|
||||
printf("(%8s %10s %10s %d)%s\n", $rev, $committer, $date, $i++, $output);
|
||||
printf("%s\t(%10s\t%10s\t%d)%s\n", $rev, $committer,
|
||||
format_date($date), $i++, $output);
|
||||
}
|
||||
|
||||
sub init_claim {
|
||||
|
@ -119,8 +143,12 @@ sub handle_rev {
|
|||
sub git_rev_list {
|
||||
my ($rev, $file) = @_;
|
||||
|
||||
open(P,"-|","git-rev-list","--parents","--remove-empty",$rev,"--",$file)
|
||||
or die "Failed to exec git-rev-list: $!";
|
||||
if ($opt_S) {
|
||||
open(P, '<' . $opt_S);
|
||||
} else {
|
||||
open(P,"-|","git-rev-list","--parents","--remove-empty",$rev,"--",$file)
|
||||
or die "Failed to exec git-rev-list: $!";
|
||||
}
|
||||
|
||||
my @revs;
|
||||
while(my $line = <P>) {
|
||||
|
@ -319,3 +347,10 @@ sub git_commit_info {
|
|||
|
||||
return %info;
|
||||
}
|
||||
|
||||
sub format_date {
|
||||
my ($timestamp, $timezone) = split(' ', $_[0]);
|
||||
|
||||
return strftime("%Y-%m-%d %H:%M:%S " . $timezone, gmtime($timestamp));
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче