git-svn: split the path from the url correctly with limited perms
This version of the splitter (that only affects SVN:: library users) works when one only has limited read-permissions to the repository they're fetching from. Updated from the original patch to workaround some SVN bug somewhere, which only seems to happen against file:// repositories... Here's the diff against the original patch I submitted: @@ -1159,8 +1159,8 @@ sub repo_path_split { } if ($_use_lib) { - $SVN = libsvn_connect($full_url); - my $url = $SVN->get_repos_root; + my $tmp = libsvn_connect($full_url); + my $url = $tmp->get_repos_root; $full_url =~ s#^\Q$url\E/*##; push @repo_path_split_cache, qr/^(\Q$url\E)/; return ($url, $full_url); Somehow connecting to a repository with the full url makes the returned SVN::Ra object act strangely and break things, so now we just drop the SVN::Ra object that we made our initial connection with. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
c8769f76d9
commit
a69a165fb4
25
git-svn.perl
25
git-svn.perl
@ -1158,27 +1158,24 @@ sub repo_path_split {
|
||||
}
|
||||
}
|
||||
|
||||
my ($url, $path) = ($full_url =~ m!^([a-z\+]+://[^/]*)(.*)$!i);
|
||||
$path =~ s#^/+##;
|
||||
my @paths = split(m#/+#, $path);
|
||||
|
||||
if ($_use_lib) {
|
||||
while (1) {
|
||||
$SVN = libsvn_connect($url);
|
||||
last if (defined $SVN &&
|
||||
defined eval { $SVN->get_latest_revnum });
|
||||
my $n = shift @paths || last;
|
||||
$url .= "/$n";
|
||||
}
|
||||
my $tmp = libsvn_connect($full_url);
|
||||
my $url = $tmp->get_repos_root;
|
||||
$full_url =~ s#^\Q$url\E/*##;
|
||||
push @repo_path_split_cache, qr/^(\Q$url\E)/;
|
||||
return ($url, $full_url);
|
||||
} else {
|
||||
my ($url, $path) = ($full_url =~ m!^([a-z\+]+://[^/]*)(.*)$!i);
|
||||
$path =~ s#^/+##;
|
||||
my @paths = split(m#/+#, $path);
|
||||
while (quiet_run(qw/svn ls --non-interactive/, $url)) {
|
||||
my $n = shift @paths || last;
|
||||
$url .= "/$n";
|
||||
}
|
||||
push @repo_path_split_cache, qr/^(\Q$url\E)/;
|
||||
$path = join('/',@paths);
|
||||
return ($url, $path);
|
||||
}
|
||||
push @repo_path_split_cache, qr/^(\Q$url\E)/;
|
||||
$path = join('/',@paths);
|
||||
return ($url, $path);
|
||||
}
|
||||
|
||||
sub setup_git_svn {
|
||||
|
Loading…
Reference in New Issue
Block a user