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

@ -161,6 +161,13 @@ New features:
+ +
Any other arguments are passed directly to `git log' Any other arguments are passed directly to `git log'
'blame'::
Show what revision and author last modified each line of a file. This is
identical to `git blame', but SVN revision numbers are shown instead of git
commit hashes.
+
All arguments are passed directly to `git blame'.
-- --
'find-rev':: 'find-rev'::
When given an SVN revision number of the form 'rN', returns the When given an SVN revision number of the form 'rN', returns the

View File

@ -186,6 +186,9 @@ my %cmd = (
"Show info about the latest SVN revision "Show info about the latest SVN revision
on the current branch", on the current branch",
{ 'url' => \$_url, } ], { 'url' => \$_url, } ],
'blame' => [ \&Git::SVN::Log::cmd_blame,
"Show what revision and author last modified each line of a file",
{} ],
); );
my $cmd; my $cmd;
@ -4448,6 +4451,24 @@ out:
print commit_log_separator unless $incremental || $oneline; 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; package Git::SVN::Migration;
# these version numbers do NOT correspond to actual version numbers # these version numbers do NOT correspond to actual version numbers
# of git nor git-svn. They are just relative. # of git nor git-svn. They are just relative.