summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: bcd8ee5)
raw | patch | inline | side by side (parent: bcd8ee5)
author | Adam Roben <aroben@apple.com> | |
Sun, 29 Apr 2007 08:35:27 +0000 (01:35 -0700) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Mon, 30 Apr 2007 22:58:37 +0000 (15:58 -0700) |
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>
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>
Documentation/git-svn.txt | patch | blob | history | |
git-svn.perl | patch | blob | history |
index a35b9de3bfde036391b0ac869bf927361d3d4c67..62d7ef8be4ef7d8f9f7c200db0e50bb732f5385e 100644 (file)
--
'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 6f509f85e45beb03ff9030ce76d36dbd23aefaee..6657e100fbbc3bd83e805b2440b1a7b61780c5f4 100755 (executable)
--- a/git-svn.perl
+++ b/git-svn.perl
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;