Re: [RFC PATCH] git-svn does not support intermediate directories?
- From
- Eric Wong <normalperson@yhbt.net>
- Date
- Mar 8, 2009, 04:43 UTC
- Message-ID
- <20090308044318.GA31205@untitled>
- In-Reply-To
- <21fc26450903051612u1400b2b4gd71c3eafa4418e37@mail.gmail.com>
Michael Lai <myllai@gmail.com> wrote:
Show 6 quoted lines
> I did some additional hacking and may have found a slightly cleaner > way of at least fixing the problems with "git svn fetch". The problem > with the wrong paths being initialized for branches and tags is fairly > minor (since you can just edit the config by hand), so I'll probably > address that later, if I have time. Here's the patch (I hope I'm > doing this right):
Hi Michael,
Your patch was whitespace damaged and lacked a proposed commit message. Please read Documentation/SubmittingPatches next time.
Anyhow, I fixed your patch up a bit. Can you sign-off on it if its right to you or let me know if it's broken? Thanks.
From cddc7e5bde060eb963534156ae0daaf41c87c21a Mon Sep 17 00:00:00 2001 From: Eric Wong <normalperson@yhbt.net> Date: Sat, 7 Mar 2009 20:22:29 -0800 Subject: [PATCH] git-svn: support intermediate paths when matching tags/branches MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit
For repositories laid out like the following:
Show 5 quoted lines
> [svn-remote "svn"] > url = http://foo.com/svn/repos/bar > fetch = myproject/trunk:refs/remotes/trunk > branches = bar/myproject/branches/*:refs/remotes/* > tags = bar/myproject/tags/*:refs/remotes/tags/*
The "bar" component above is considered the intermediate path and was not handled correctly.
This patch was originally by Michael Lai (without a commit message) with some minor fixes:
* extraneous slash removed from $intermediate_path,
this was causing tests to fail. * fixed a case where $intermediate_path could be "0" and
considered false by Perl, preventing the necessary
slash from being appended.Signed-off-by: Eric Wong <normalperson@yhbt.net> --- git-svn.perl | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/git-svn.perl b/git-svn.perl index 959eb52..745dd03 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -2351,7 +2351,11 @@ sub match_paths { if (my $path = $paths->{"/$self->{path}"}) { return ($path->{action} eq 'D') ? 0 : 1; } - $self->{path_regex} ||= qr/^\/\Q$self->{path}\E\//; + my $repos_root = $self->ra->{repos_root}; + my $intermediate_path = $self->{url}; + $intermediate_path =~ s#^\Q$repos_root\E(/|$)##; + $intermediate_path .= '/' if length($intermediate_path) > 0; + $self->{path_regex} ||= qr/^\/\Q$intermediate_path$self->{path}\E\//; if (grep /$self->{path_regex}/, keys %$paths) { return 1; }
-- Eric Wong