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>
use warnings;
use strict;
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 ($rev, @parents) = @$revinst;
$head ||= $rev;
my ($rev, @parents) = @$revinst;
$head ||= $rev;
+ if (!defined($rev)) {
+ $rev = "";
+ }
$revs{$rev}{'filename'} = $bound->{'filename'};
if (scalar @parents > 0) {
$revs{$rev}{'parents'} = \@parents;
next;
}
$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;
my $newbound = find_parent_renames($rev, $bound->{'filename'});
if ( exists $newbound->{'filename'} && $newbound->{'filename'} ne $bound->{'filename'}) {
push @stack, $newbound;
my ($output, $rev, $committer, $date);
if (ref $l eq 'ARRAY') {
($output, $rev, $committer, $date) = @$l;
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 {
$rev = substr($rev,0,8);
}
} else {
($rev, $committer, $date) = ('unknown', 'unknown', 'unknown');
}
($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 git_rev_list {
my ($rev, $file) = @_;
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>) {
my @revs;
while(my $line = <P>) {
+
+sub format_date {
+ my ($timestamp, $timezone) = split(' ', $_[0]);
+
+ return strftime("%Y-%m-%d %H:%M:%S " . $timezone, gmtime($timestamp));
+}
+