]> Pileus Git - ~andy/git/blobdiff - git-svn.perl
git svn: avoid escaping '/' when renaming/copying files
[~andy/git] / git-svn.perl
index 10b77ad34c1103fc8dd390db9937496e41716fdf..fd7232cf6d6fcff0042a8251bbe604d02245a9a5 100755 (executable)
@@ -666,9 +666,22 @@ sub cmd_branch {
                        }
                }
                unless (defined $glob) {
-                       die "Unknown ",
-                           $_tag ? "tag" : "branch",
-                           " destination $_branch_dest\n";
+                       my $dest_re = qr/\b\Q$_branch_dest\E\b/;
+                       foreach my $g (@{$allglobs}) {
+                               $g->{path}->{left} =~ /$dest_re/ or next;
+                               if (defined $glob) {
+                                       die "Ambiguous destination: ",
+                                           $_branch_dest, "\nmatches both '",
+                                           $glob->{path}->{left}, "' and '",
+                                           $g->{path}->{left}, "'\n";
+                               }
+                               $glob = $g;
+                       }
+                       unless (defined $glob) {
+                               die "Unknown ",
+                                   $_tag ? "tag" : "branch",
+                                   " destination $_branch_dest\n";
+                       }
                }
        }
        my ($lft, $rgt) = @{ $glob->{path} }{qw/left right/};
@@ -3992,7 +4005,7 @@ sub repo_path {
 sub url_path {
        my ($self, $path) = @_;
        if ($self->{url} =~ m#^https?://#) {
-               $path =~ s/([^~a-zA-Z0-9_.-])/uc sprintf("%%%02x",ord($1))/eg;
+               $path =~ s!([^~a-zA-Z0-9_./-])!uc sprintf("%%%02x",ord($1))!eg;
        }
        $self->{url} . '/' . $self->repo_path($path);
 }