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>
This commit is contained in:
Adam Roben 2007-04-27 11:57:53 -07:00 committed by Junio C Hamano
parent bb924cb331
commit 26e60160a0
2 changed files with 29 additions and 0 deletions

View File

@ -159,6 +159,11 @@ New features:
Any other arguments are passed directly to `git log' 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':: 'set-tree'::
You should consider using 'dcommit' instead of this command. You should consider using 'dcommit' instead of this command.
Commit specified commit or tree objects to SVN. This relies on Commit specified commit or tree objects to SVN. This relies on

View File

@ -141,6 +141,8 @@ my %cmd = (
'color' => \$Git::SVN::Log::color, 'color' => \$Git::SVN::Log::color,
'pager=s' => \$Git::SVN::Log::pager, '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", 'rebase' => [ \&cmd_rebase, "Fetch and rebase your working directory",
{ 'merge|m|M' => \$_merge, { 'merge|m|M' => \$_merge,
'verbose|v' => \$_verbose, 'verbose|v' => \$_verbose,
@ -428,6 +430,28 @@ sub cmd_dcommit {
command_noisy(@finish, $gs->refname); 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 { sub cmd_rebase {
command_noisy(qw/update-index --refresh/); command_noisy(qw/update-index --refresh/);
my ($url, $rev, $uuid, $gs) = working_head_info('HEAD'); my ($url, $rev, $uuid, $gs) = working_head_info('HEAD');