Add `git svn blame' command

This command is identical to `git blame', but it shows SVN revision
numbers instead of git commit hashes.

[ew: support "^initial commit" and minor formatting fixes]

Signed-off-by: Tim Stoakes <tim@stoakes.net>
Acked-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Tim Stoakes
2008-02-10 15:21:08 +10:30
committed by Junio C Hamano
parent 04f32cf1b3
commit 6fb5375ede
2 changed files with 28 additions and 0 deletions

View File

@ -186,6 +186,9 @@ my %cmd = (
"Show info about the latest SVN revision
on the current branch",
{ 'url' => \$_url, } ],
'blame' => [ \&Git::SVN::Log::cmd_blame,
"Show what revision and author last modified each line of a file",
{} ],
);
my $cmd;
@ -4448,6 +4451,24 @@ out:
print commit_log_separator unless $incremental || $oneline;
}
sub cmd_blame {
my $path = shift;
config_pager();
run_pager();
my ($fh, $ctx) = command_output_pipe('blame', @_, $path);
while (my $line = <$fh>) {
if ($line =~ /^\^?([[:xdigit:]]+)\s/) {
my (undef, $rev, undef) = ::cmt_metadata($1);
$rev = sprintf('%-10s', $rev);
$line =~ s/^\^?[[:xdigit:]]+(\s)/$rev$1/;
}
print $line;
}
command_close_pipe($fh, $ctx);
}
package Git::SVN::Migration;
# these version numbers do NOT correspond to actual version numbers
# of git nor git-svn. They are just relative.