From 4788d11a0d2ff872d25840768b2266e936a0b1fc Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Mon, 20 Feb 2006 16:20:10 +0100 Subject: [PATCH] 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 Signed-off-by: Junio C Hamano --- git-annotate.perl | 45 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/git-annotate.perl b/git-annotate.perl index 8f984318af..3800c4654b 100755 --- a/git-annotate.perl +++ b/git-annotate.perl @@ -8,9 +8,25 @@ use warnings; use strict; +use Getopt::Std; +use POSIX qw(strftime gmtime); -my $filename = shift @ARGV; +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 = ( { @@ -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 =

) { @@ -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)); +} +