diff options
author | Johannes Schindelin <Johannes.Schindelin@gmx.de> | 2006-02-20 16:20:10 +0100 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-02-22 02:06:42 -0800 |
commit | 4788d11a0d2ff872d25840768b2266e936a0b1fc (patch) | |
tree | 09c29dbb9a56365af0e0627fa770b1b5ab9e6eb9 /git-annotate.perl | |
parent | c65e898754ef68a5520b2791890dda51753d00c6 (diff) | |
download | git-4788d11a0d2ff872d25840768b2266e936a0b1fc.tar.gz git-4788d11a0d2ff872d25840768b2266e936a0b1fc.tar.xz |
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>
Diffstat (limited to 'git-annotate.perl')
-rwxr-xr-x | git-annotate.perl | 45 |
1 files changed, 40 insertions, 5 deletions
diff --git a/git-annotate.perl b/git-annotate.perl index 8f984318a..3800c4654 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 = <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)); +} + |