threads / patch / 31391

patchMake git-svn branch patterns match complete URL

Subject: [PATCH] Make git-svn branch patterns match complete URL

## tl;dr

2 messages between Aug 30, 2012 and Sep 14, 2012. Diffs are folded; open one to read it.

replies: 1people: 2as markdown or json

Ammon Riley· Aug 30, 2012, 22:53 UTC · lore

When using the {word,[...]} style of configuration for tags and branches, it appears the intent is to only match whole path parts, since the words in the {} pattern are meta-character quoted.

When the pattern word appears in the beginning or middle of the url, it's matched completely, since the left side, pattern, and (non-empty) right side are joined together with path separators.

However, when the pattern word appears at the end of the URL, the right side is an empty pattern, and the resulting regex matches more than just the specified pattern.

For example, if you specify something along the lines of
    branches = branches/project/{release_1,release_2}

and your repository also contains "branches/project/release_1_2", you will also get the release_1_2 branch. By restricting the match regex with anchors, this is avoided.

Signed-off-by: Ammon Riley <ammon.riley@gmail.com>
---
Tested with Subversion 1.6; applies against maint, and master.
 perl/Git/SVN/GlobSpec.pm      | 4 +++-
 t/t9154-git-svn-fancy-glob.sh | 9 +++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)
Show changes to 2 files +12 −1

perl/Git/SVN/GlobSpec.pm, t/t9154-git-svn-fancy-glob.sh

diff --git a/perl/Git/SVN/GlobSpec.pm b/perl/Git/SVN/GlobSpec.pm
index 96cfd98..c95f5d7 100644
--- a/perl/Git/SVN/GlobSpec.pm
+++ b/perl/Git/SVN/GlobSpec.pm
@@ -44,7 +44,9 @@ sub new {
 	my $right = join('/', @right);
 	$re = join('/', @patterns);
 	$re = join('\/',
-		   grep(length, quotemeta($left), "($re)", quotemeta($right)));
+		   grep(length, quotemeta($left),
+                                "($re)(?=/|\$)",
+                                quotemeta($right)));
 	my $left_re = qr/^\/\Q$left\E(\/|$)/;
 	bless { left => $left, right => $right, left_regex => $left_re,
 	        regex => qr/$re/, glob => $glob, depth => $depth }, $class;
diff --git a/t/t9154-git-svn-fancy-glob.sh b/t/t9154-git-svn-fancy-glob.sh
index a6a56a6..b780e0e 100755
--- a/t/t9154-git-svn-fancy-glob.sh
+++ b/t/t9154-git-svn-fancy-glob.sh
@@ -21,6 +21,15 @@ test_expect_success 'add red branch' "
 	test_must_fail git rev-parse refs/remotes/blue
 	"
 
+test_expect_success 'add gre branch' "
+	GIT_CONFIG=.git/svn/.metadata git config --unset svn-remote.svn.branches-maxRev &&
+	git config svn-remote.svn.branches 'branches/{red,gre}:refs/remotes/*' &&
+	git svn fetch &&
+	git rev-parse refs/remotes/red &&
+	test_must_fail git rev-parse refs/remotes/green &&
+	test_must_fail git rev-parse refs/remotes/blue
+	"
+
 test_expect_success 'add green branch' "
 	GIT_CONFIG=.git/svn/.metadata git config --unset svn-remote.svn.branches-maxRev &&
 	git config svn-remote.svn.branches 'branches/{red,green}:refs/remotes/*' &&
-- 
1.7.11.3
Eric Wong· Sep 14, 2012, 21:45 UTC · lore

Re: [PATCH] Make git-svn branch patterns match complete URL

Junio C Hamano <gitster@pobox.com> wrote:
> Any comment from "git svn" stakeholders on this one?
Looks good to me.
Signed-off-by: Eric Wong <normalperson@yhbt.net>

Pushed to master of git://bogomips.org/git-svn.git (commit 059058765ea2b0abd88001ea1f0f866daf7d0e4c)

  Ammon Riley (1):
        Make git-svn branch patterns match complete URL
  Robert Luberda (1):
        t9164: Add missing quotes in test
  Steven Walter (2):
        git-svn.perl: consider all ranges for a given merge, instead of only tip-by-tip
        git-svn.perl: keep processing all commits in parents_exclude
Will followup on some other pending patches soon...

← back to recent threads