summaryrefslogtreecommitdiff
path: root/perl
diff options
context:
space:
mode:
Diffstat (limited to 'perl')
-rw-r--r--perl/Git/SVN.pm10
-rw-r--r--perl/Git/SVN/Utils.pm32
2 files changed, 38 insertions, 4 deletions
diff --git a/perl/Git/SVN.pm b/perl/Git/SVN.pm
index fc1ac07..ff74782 100644
--- a/perl/Git/SVN.pm
+++ b/perl/Git/SVN.pm
@@ -23,7 +23,11 @@ use Git qw(
command_output_pipe
command_close_pipe
);
-use Git::SVN::Utils qw(fatal can_compress);
+use Git::SVN::Utils qw(
+ fatal
+ can_compress
+ join_paths
+);
my $can_use_yaml;
BEGIN {
@@ -316,9 +320,7 @@ sub init_remote_config {
}
my $old_path = $self->path;
$url =~ s!^\Q$min_url\E(/|$)!!;
- if (length $old_path) {
- $url .= "/$old_path";
- }
+ $url = join_paths($url, $old_path);
$self->path($url);
$url = $min_url;
}
diff --git a/perl/Git/SVN/Utils.pm b/perl/Git/SVN/Utils.pm
index 4925410..4005da9 100644
--- a/perl/Git/SVN/Utils.pm
+++ b/perl/Git/SVN/Utils.pm
@@ -12,6 +12,7 @@ our @EXPORT_OK = qw(
can_compress
canonicalize_path
canonicalize_url
+ join_paths
);
@@ -134,4 +135,35 @@ sub _canonicalize_url_ourselves {
}
+=head3 join_paths
+
+ my $new_path = join_paths(@paths);
+
+Appends @paths together into a single path. Any empty paths are ignored.
+
+=cut
+
+sub join_paths {
+ my @paths = @_;
+
+ @paths = grep { defined $_ && length $_ } @paths;
+
+ return '' unless @paths;
+ return $paths[0] if @paths == 1;
+
+ my $new_path = shift @paths;
+ $new_path =~ s{/+$}{};
+
+ my $last_path = pop @paths;
+ $last_path =~ s{^/+}{};
+
+ for my $path (@paths) {
+ $path =~ s{^/+}{};
+ $path =~ s{/+$}{};
+ $new_path .= "/$path";
+ }
+
+ return $new_path .= "/$last_path";
+}
+
1;