summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Roben <aroben@apple.com>2007-04-27 18:57:53 (GMT)
committerJunio C Hamano <junkio@cox.net>2007-04-28 06:18:15 (GMT)
commit26e60160a074747fbe8866ddac4e0c7660c17ff6 (patch)
tree98b7553a7bd84994e1ad6839245fffa4791f5036
parentbb924cb331c143eaf92ba8d86b65caff15252543 (diff)
downloadgit-26e60160a074747fbe8866ddac4e0c7660c17ff6.zip
git-26e60160a074747fbe8866ddac4e0c7660c17ff6.tar.gz
git-26e60160a074747fbe8866ddac4e0c7660c17ff6.tar.bz2
git-svn: Added 'find-rev' command
This patch adds a new 'find-rev' command to git-svn that lets you easily translate between SVN revision numbers and git tree-ish. Signed-off-by: Adam Roben <aroben@apple.com> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r--Documentation/git-svn.txt5
-rwxr-xr-xgit-svn.perl24
2 files changed, 29 insertions, 0 deletions
diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt
index a0d34e0..a35b9de 100644
--- a/Documentation/git-svn.txt
+++ b/Documentation/git-svn.txt
@@ -159,6 +159,11 @@ New features:
Any other arguments are passed directly to `git log'
--
+'find-rev'::
+ When given an SVN revision number of the form 'rN', returns the
+ corresponding git commit hash. When given a tree-ish, returns the
+ corresponding SVN revision number.
+
'set-tree'::
You should consider using 'dcommit' instead of this command.
Commit specified commit or tree objects to SVN. This relies on
diff --git a/git-svn.perl b/git-svn.perl
index 7b5f8ab..4be8576 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -141,6 +141,8 @@ my %cmd = (
'color' => \$Git::SVN::Log::color,
'pager=s' => \$Git::SVN::Log::pager,
} ],
+ 'find-rev' => [ \&cmd_find_rev, "Translate between SVN revision numbers and tree-ish",
+ { } ],
'rebase' => [ \&cmd_rebase, "Fetch and rebase your working directory",
{ 'merge|m|M' => \$_merge,
'verbose|v' => \$_verbose,
@@ -428,6 +430,28 @@ sub cmd_dcommit {
command_noisy(@finish, $gs->refname);
}
+sub cmd_find_rev {
+ my $revision_or_hash = shift;
+ my $result;
+ if ($revision_or_hash =~ /^r\d+$/) {
+ my $desired_revision = substr($revision_or_hash, 1);
+ my ($fh, $ctx) = command_output_pipe('rev-list', 'HEAD');
+ while (my $hash = <$fh>) {
+ chomp($hash);
+ my (undef, $rev, undef) = cmt_metadata($hash);
+ if ($rev && $rev eq $desired_revision) {
+ $result = $hash;
+ last;
+ }
+ }
+ command_close_pipe($fh, $ctx);
+ } else {
+ my (undef, $rev, undef) = cmt_metadata($revision_or_hash);
+ $result = $rev;
+ }
+ print "$result\n" if $result;
+}
+
sub cmd_rebase {
command_noisy(qw/update-index --refresh/);
my ($url, $rev, $uuid, $gs) = working_head_info('HEAD');