path: root/perl/Git
diff options
authorAmmon Riley <>2012-08-30 22:53:57 (GMT)
committerEric Wong <>2012-10-05 22:48:12 (GMT)
commit9478b11968d61085bb4c4343395b6f52ce06380f (patch)
treeb137728212e05436c4e2f4d3a45678f9e143d1f0 /perl/Git
parenta967cb15d3eee0d4992f92edab50da0ddbb97738 (diff)
Make git-svn branch patterns match complete URL
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 <> Signed-off-by: Eric Wong <>
Diffstat (limited to 'perl/Git')
1 files changed, 3 insertions, 1 deletions
diff --git a/perl/Git/SVN/ b/perl/Git/SVN/
index 96cfd98..c95f5d7 100644
--- a/perl/Git/SVN/
+++ b/perl/Git/SVN/
@@ -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;