Browse Source

git-svn: fix URL canonicalization during init w/ SVN 1.7+

URL canonicalization when full URLs are passed became broken
when using SVN::_Core::svn_dirent_canonicalize under SVN 1.7.

Ensure we canonicalize paths and URLs with appropriate functions
for each type from now on as the path/URL-agnostic
SVN::_Core::svn_path_canonicalize function is deprecated in SVN.

Tested with the following commands:

  git svn init -T svn://svn.code.sf.net/p/squirrelmail/code/trunk
  git svn init -b svn://svn.code.sf.net/p/squirrelmail/code/branches

Reported-by: Adam Dinwoodie <adam@dinwoodie.org>
  http://mid.gmane.org/20160315162344.GM29016@dinwoodie.org
Signed-off-by: Eric Wong <normalperson@yhbt.net>
maint
Eric Wong 9 years ago
parent
commit
b557165311
  1. 14
      git-svn.perl
  2. 2
      t/t9117-git-svn-init-clone.sh

14
git-svn.perl

@ -1745,11 +1745,12 @@ sub post_fetch_checkout {


sub complete_svn_url { sub complete_svn_url {
my ($url, $path) = @_; my ($url, $path) = @_;
$path = canonicalize_path($path);


# If the path is not a URL... if ($path =~ m#^[a-z\+]+://#i) { # path is a URL
if ($path !~ m#^[a-z\+]+://#) { $path = canonicalize_url($path);
if (!defined $url || $url !~ m#^[a-z\+]+://#) { } else {
$path = canonicalize_path($path);
if (!defined $url || $url !~ m#^[a-z\+]+://#i) {
fatal("E: '$path' is not a complete URL ", fatal("E: '$path' is not a complete URL ",
"and a separate URL is not specified"); "and a separate URL is not specified");
} }
@ -1764,11 +1765,12 @@ sub complete_url_ls_init {
print STDERR "W: $switch not specified\n"; print STDERR "W: $switch not specified\n";
return; return;
} }
$repo_path = canonicalize_path($repo_path); if ($repo_path =~ m#^[a-z\+]+://#i) {
if ($repo_path =~ m#^[a-z\+]+://#) { $repo_path = canonicalize_url($repo_path);
$ra = Git::SVN::Ra->new($repo_path); $ra = Git::SVN::Ra->new($repo_path);
$repo_path = ''; $repo_path = '';
} else { } else {
$repo_path = canonicalize_path($repo_path);
$repo_path =~ s#^/+##; $repo_path =~ s#^/+##;
unless ($ra) { unless ($ra) {
fatal("E: '$repo_path' is not a complete URL ", fatal("E: '$repo_path' is not a complete URL ",

2
t/t9117-git-svn-init-clone.sh

@ -119,7 +119,7 @@ test_expect_success 'clone with -s/-T/-b/-t and --prefix "" still works' '
rm -f warning rm -f warning
' '


test_expect_failure 'init with -T as a full url works' ' test_expect_success 'init with -T as a full url works' '
test ! -d project && test ! -d project &&
git svn init -T "$svnrepo"/project/trunk project && git svn init -T "$svnrepo"/project/trunk project &&
rm -rf project rm -rf project

Loading…
Cancel
Save