* [PATCH] [svn] Add `git svn blame' command
@ 2008-02-10 4:51 Tim Stoakes
2008-02-11 2:37 ` Eric Wong
0 siblings, 1 reply; 2+ messages in thread
From: Tim Stoakes @ 2008-02-10 4:51 UTC (permalink / raw)
To: git; +Cc: gitster, normalperson, Tim Stoakes
This command is identical to `git blame', but it shows SVN revision
numbers instead of git commit hashes.
Signed-off-by: Tim Stoakes <tim@stoakes.net>
---
Documentation/git-svn.txt | 7 +++++++
git-svn.perl | 21 +++++++++++++++++++++
2 files changed, 28 insertions(+), 0 deletions(-)
diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt
index b1d527f..340f1be 100644
--- a/Documentation/git-svn.txt
+++ b/Documentation/git-svn.txt
@@ -161,6 +161,13 @@ New features:
+
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'::
When given an SVN revision number of the form 'rN', returns the
diff --git a/git-svn.perl b/git-svn.perl
index 7889cce..4437ed5 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -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.
--
1.5.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] [svn] Add `git svn blame' command
2008-02-10 4:51 [PATCH] [svn] Add `git svn blame' command Tim Stoakes
@ 2008-02-11 2:37 ` Eric Wong
0 siblings, 0 replies; 2+ messages in thread
From: Eric Wong @ 2008-02-11 2:37 UTC (permalink / raw)
To: Tim Stoakes; +Cc: git, gitster
Thanks Tim,
Minor fixes below:
>From 1209255c50d5437da0b88796519bc2ab1b907c0a Mon Sep 17 00:00:00 2001
From: Tim Stoakes <tim@stoakes.net>
Date: Sun, 10 Feb 2008 15:21:08 +1030
Subject: [PATCH] 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>
---
Documentation/git-svn.txt | 7 +++++++
git-svn.perl | 21 +++++++++++++++++++++
2 files changed, 28 insertions(+), 0 deletions(-)
diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt
index b1d527f..340f1be 100644
--- a/Documentation/git-svn.txt
+++ b/Documentation/git-svn.txt
@@ -161,6 +161,13 @@ New features:
+
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'::
When given an SVN revision number of the form 'rN', returns the
diff --git a/git-svn.perl b/git-svn.perl
index 7889cce..05fb358 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -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.
--
Eric Wong
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2008-02-11 2:38 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-10 4:51 [PATCH] [svn] Add `git svn blame' command Tim Stoakes
2008-02-11 2:37 ` Eric Wong
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).