git-svn: introduce add_path_to_url function
[gitweb.git] / perl / Git / SVN.pm
index 6a2a52e8086027ac7f26ae160be12f79e13e51c7..ec5e826468e1c64d82bb4261c3f83dd17c96a486 100644 (file)
@@ -29,6 +29,7 @@ package Git::SVN;
        join_paths
        canonicalize_path
        canonicalize_url
+       add_path_to_url
 );
 
 my $can_use_yaml;
@@ -564,8 +565,7 @@ sub _set_svm_vars {
                # username is of no interest
                $src =~ s{(^[a-z\+]*://)[^/@]*@}{$1};
 
-               my $replace = $ra->url;
-               $replace .= "/$path" if length $path;
+               my $replace = add_path_to_url($ra->url, $path);
 
                my $section = "svn-remote.$self->{repo_id}";
                tmp_config("$section.svm-source", $src);
@@ -582,7 +582,7 @@ sub _set_svm_vars {
        my $path = $self->path;
        my %tried;
        while (length $path) {
-               my $try = $self->url . "/$path";
+               my $try = add_path_to_url($self->url, $path);
                unless ($tried{$try}) {
                        return $ra if $self->read_svm_props($ra, $path, $r);
                        $tried{$try} = 1;
@@ -591,7 +591,7 @@ sub _set_svm_vars {
        }
        die "Path: '$path' should be ''\n" if $path ne '';
        return $ra if $self->read_svm_props($ra, $path, $r);
-       $tried{$self->url."/$path"} = 1;
+       $tried{ add_path_to_url($self->url, $path) } = 1;
 
        if ($ra->{repos_root} eq $self->url) {
                die @err, (map { "  $_\n" } keys %tried), "\n";
@@ -603,7 +603,7 @@ sub _set_svm_vars {
        $path = $ra->{svn_path};
        $ra = Git::SVN::Ra->new($ra->{repos_root});
        while (length $path) {
-               my $try = $ra->url ."/$path";
+               my $try = add_path_to_url($ra->url, $path);
                unless ($tried{$try}) {
                        $ok = $self->read_svm_props($ra, $path, $r);
                        last if $ok;
@@ -613,7 +613,7 @@ sub _set_svm_vars {
        }
        die "Path: '$path' should be ''\n" if $path ne '';
        $ok ||= $self->read_svm_props($ra, $path, $r);
-       $tried{$ra->url ."/$path"} = 1;
+       $tried{ add_path_to_url($ra->url, $path) } = 1;
        if (!$ok) {
                die @err, (map { "  $_\n" } keys %tried), "\n";
        }
@@ -933,20 +933,19 @@ sub rewrite_uuid {
 
 sub metadata_url {
        my ($self) = @_;
-       ($self->rewrite_root || $self->url) .
-          (length $self->path ? '/' . $self->path : '');
+       my $url = $self->rewrite_root || $self->url;
+       return add_path_to_url( $url, $self->path );
 }
 
 sub full_url {
        my ($self) = @_;
-       $self->url . (length $self->path ? '/' . $self->path : '');
+       return add_path_to_url( $self->url, $self->path );
 }
 
 sub full_pushurl {
        my ($self) = @_;
        if ($self->{pushurl}) {
-               return $self->{pushurl} . (length $self->path ? '/' .
-                      $self->path : '');
+               return add_path_to_url( $self->{pushurl}, $self->path );
        } else {
                return $self->full_url;
        }
@@ -1114,7 +1113,7 @@ sub find_parent_branch {
        my $r = $i->{copyfrom_rev};
        my $repos_root = $self->ra->{repos_root};
        my $url = $self->ra->url;
-       my $new_url = $url . $branch_from;
+       my $new_url = add_path_to_url( $url, $branch_from );
        print STDERR  "Found possible branch point: ",
                      "$new_url => ", $self->full_url, ", $r\n"
                      unless $::_q > 1;
@@ -1443,12 +1442,11 @@ sub find_extra_svk_parents {
        for my $ticket ( @tickets ) {
                my ($uuid, $path, $rev) = split /:/, $ticket;
                if ( $uuid eq $self->ra_uuid ) {
-                       my $url = $self->url;
-                       my $repos_root = $url;
+                       my $repos_root = $self->url;
                        my $branch_from = $path;
                        $branch_from =~ s{^/}{};
-                       my $gs = $self->other_gs($repos_root."/".$branch_from,
-                                                $url,
+                       my $gs = $self->other_gs(add_path_to_url( $repos_root, $branch_from ),
+                                                $repos_root,
                                                 $branch_from,
                                                 $rev,
                                                 $self->{ref_id});
@@ -1871,8 +1869,7 @@ sub make_log_entry {
                $email ||= "$author\@$uuid";
                $commit_email ||= "$author\@$uuid";
        } elsif ($self->use_svnsync_props) {
-               my $full_url = $self->svnsync->{url};
-               $full_url .= "/".$self->path if length $self->path;
+               my $full_url = add_path_to_url( $self->svnsync->{url}, $self->path );
                remove_username($full_url);
                my $uuid = $self->svnsync->{uuid};
                $log_entry{metadata} = "$full_url\@$rev $uuid";