From: Eric Wong Date: Sun, 08 Mar 2009 04:43:18 GMT Subject: Re: [RFC PATCH] git-svn does not support intermediate directories? Message-ID: <20090308044318.GA31205@untitled> In-Reply-To: <21fc26450903051612u1400b2b4gd71c3eafa4418e37@mail.gmail.com> Michael Lai wrote: > 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 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: > [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 --- 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