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) {
|
if ($_use_lib) {
|
||||||
while (1) {
|
my $tmp = libsvn_connect($full_url);
|
||||||
$SVN = libsvn_connect($url);
|
my $url = $tmp->get_repos_root;
|
||||||
last if (defined $SVN &&
|
$full_url =~ s#^\Q$url\E/*##;
|
||||||
defined eval { $SVN->get_latest_revnum });
|
push @repo_path_split_cache, qr/^(\Q$url\E)/;
|
||||||
my $n = shift @paths || last;
|
return ($url, $full_url);
|
||||||
$url .= "/$n";
|
|
||||||
}
|
|
||||||
} else {
|
} 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)) {
|
while (quiet_run(qw/svn ls --non-interactive/, $url)) {
|
||||||
my $n = shift @paths || last;
|
my $n = shift @paths || last;
|
||||||
$url .= "/$n";
|
$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 {
|
sub setup_git_svn {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user