]> git.ipfire.org Git - thirdparty/git.git/commitdiff
git-svn: use SVN::Ra::get_dir2 when possible
authorEric Wong <normalperson@yhbt.net>
Fri, 31 Oct 2014 10:34:03 +0000 (10:34 +0000)
committerEric Wong <normalperson@yhbt.net>
Fri, 31 Oct 2014 10:34:54 +0000 (10:34 +0000)
This avoids the following failure with normal "get_dir" on newer
versions of SVN (tested with SVN 1.8.8-1ubuntu3.1):

  Incorrect parameters given: Could not convert '%ld' into a number

get_dir2 also has the potential to be more efficient by requesting
less data.

ref: <1414636504.45506.YahooMailBasic@web172304.mail.ir2.yahoo.com>
ref: <1414722617.89476.YahooMailBasic@web172305.mail.ir2.yahoo.com>

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Cc: Hin-Tak Leung <htl10@users.sourceforge.net>
perl/Git/SVN/Ra.pm

index 75cdac90cfbaafdfcda523e598e45499bc1ae6d1..622535e21760f9fd5c6b63f97d41b48be9c04db6 100644 (file)
@@ -175,7 +175,17 @@ sub get_dir {
                }
        }
        my $pool = SVN::Pool->new;
-       my ($d, undef, $props) = $self->SUPER::get_dir($dir, $r, $pool);
+       my ($d, undef, $props);
+
+       if (::compare_svn_version('1.4.0') >= 0) {
+               # n.b. in addition to being potentially more efficient,
+               # this works around what appears to be a bug in some
+               # SVN 1.8 versions
+               my $kind = 1; # SVN_DIRENT_KIND
+               ($d, undef, $props) = $self->get_dir2($dir, $r, $kind, $pool);
+       } else {
+               ($d, undef, $props) = $self->SUPER::get_dir($dir, $r, $pool);
+       }
        my %dirents = map { $_ => { kind => $d->{$_}->kind } } keys %$d;
        $pool->clear;
        if ($r != $cache->{r}) {