diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt index a35b9de3bf..62d7ef8be4 100644 --- a/Documentation/git-svn.txt +++ b/Documentation/git-svn.txt @@ -161,8 +161,9 @@ 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. + corresponding git commit hash (this can optionally be followed by a + tree-ish to specify which branch should be searched). When given a + tree-ish, returns the corresponding SVN revision number. 'set-tree':: You should consider using 'dcommit' instead of this command. diff --git a/git-svn.perl b/git-svn.perl index 6f509f85e4..6657e100fb 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -434,17 +434,16 @@ 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; - } + my $head = shift; + $head ||= 'HEAD'; + my @refs; + my (undef, undef, undef, $gs) = working_head_info($head, \@refs); + unless ($gs) { + die "Unable to determine upstream SVN information from ", + "$head history\n"; } - command_close_pipe($fh, $ctx); + my $desired_revision = substr($revision_or_hash, 1); + $result = $gs->rev_db_get($desired_revision); } else { my (undef, $rev, undef) = cmt_metadata($revision_or_hash); $result = $rev;