* [PATCH] git-svn: Added 'find-rev' command
@ 2007-04-27 18:57 Adam Roben
2007-04-27 19:30 ` Eric Wong
0 siblings, 1 reply; 5+ messages in thread
From: Adam Roben @ 2007-04-27 18:57 UTC (permalink / raw)
To: Eric Wong; +Cc: git, Adam Roben
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>
---
Documentation/git-svn.txt | 5 +++++
git-svn.perl | 24 ++++++++++++++++++++++++
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');
--
1.5.2.rc0.75.g959b-dirty
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH] git-svn: Added 'find-rev' command
2007-04-27 18:57 [PATCH] git-svn: Added 'find-rev' command Adam Roben
@ 2007-04-27 19:30 ` Eric Wong
2007-04-28 6:13 ` Junio C Hamano
0 siblings, 1 reply; 5+ messages in thread
From: Eric Wong @ 2007-04-27 19:30 UTC (permalink / raw)
To: Adam Roben; +Cc: git
Adam Roben <aroben@apple.com> wrote:
> This patch adds a new 'find-rev' command to git-svn that lets you easily
> translate between SVN revision numbers and git tree-ish.
Looks useful.
Acked-by: Eric Wong <normalperson@yhbt.net>
> Signed-off-by: Adam Roben <aroben@apple.com>
> ---
> Documentation/git-svn.txt | 5 +++++
> git-svn.perl | 24 ++++++++++++++++++++++++
> 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');
> --
> 1.5.2.rc0.75.g959b-dirty
>
--
Eric Wong
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] git-svn: Added 'find-rev' command
2007-04-27 19:30 ` Eric Wong
@ 2007-04-28 6:13 ` Junio C Hamano
2007-04-28 10:50 ` Eric Wong
0 siblings, 1 reply; 5+ messages in thread
From: Junio C Hamano @ 2007-04-28 6:13 UTC (permalink / raw)
To: Eric Wong; +Cc: Adam Roben, git
Eric Wong <normalperson@yhbt.net> writes:
> Adam Roben <aroben@apple.com> wrote:
>> This patch adds a new 'find-rev' command to git-svn that lets you easily
>> translate between SVN revision numbers and git tree-ish.
>
> Looks useful.
>
> Acked-by: Eric Wong <normalperson@yhbt.net>
But looks quite wasteful. Why not run "rev-list -v" or
something instead of running cat-file on revision one-by-one?
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] git-svn: Added 'find-rev' command
2007-04-28 6:13 ` Junio C Hamano
@ 2007-04-28 10:50 ` Eric Wong
2007-04-28 19:22 ` Adam Roben
0 siblings, 1 reply; 5+ messages in thread
From: Eric Wong @ 2007-04-28 10:50 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Adam Roben, git
Junio C Hamano <junkio@cox.net> wrote:
> Eric Wong <normalperson@yhbt.net> writes:
>
> > Adam Roben <aroben@apple.com> wrote:
> >> This patch adds a new 'find-rev' command to git-svn that lets you easily
> >> translate between SVN revision numbers and git tree-ish.
> >
> > Looks useful.
> >
> > Acked-by: Eric Wong <normalperson@yhbt.net>
>
> But looks quite wasteful. Why not run "rev-list -v" or
> something instead of running cat-file on revision one-by-one?
Didn't know about "rev-list -v", but I just checked and it still has the
limited-size buffer that --pretty=raw has.
"git-svn log" only runs cat-file if it can't find a git-svn-id: line at
the bottom. (I used log --abbrev-commit --pretty=raw).
Sorry about the premature Ack, I hadn't had my coffee yet at that point
(and now I'm half awake :x)
Adam:
However, since we're not fetching ranges...
You can do $gs->rev_db_get($rev_nr) to easily find a commit given a
revision. Bonus points if this works independently of the current HEAD
so you can look up revision numbers on different branches. (git-svn log
should be made to support this, too)
--
Eric Wong
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] git-svn: Added 'find-rev' command
2007-04-28 10:50 ` Eric Wong
@ 2007-04-28 19:22 ` Adam Roben
0 siblings, 0 replies; 5+ messages in thread
From: Adam Roben @ 2007-04-28 19:22 UTC (permalink / raw)
To: Eric Wong; +Cc: Junio C Hamano, git
On Apr 28, 2007, at 3:50 AM, Eric Wong wrote:
> Adam:
>
> However, since we're not fetching ranges...
>
> You can do $gs->rev_db_get($rev_nr) to easily find a commit given a
> revision. Bonus points if this works independently of the current
> HEAD
> so you can look up revision numbers on different branches. (git-
> svn log
> should be made to support this, too)
OK, I'll do that and send out a new patch.
-Adam
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2007-04-28 19:23 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-04-27 18:57 [PATCH] git-svn: Added 'find-rev' command Adam Roben
2007-04-27 19:30 ` Eric Wong
2007-04-28 6:13 ` Junio C Hamano
2007-04-28 10:50 ` Eric Wong
2007-04-28 19:22 ` Adam Roben
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).