From: Hin-Tak Leung Date: Fri, 31 Oct 2014 21:53:54 GMT Subject: Re: [PATCH v2] git-svn: use SVN::Ra::get_dir2 when possible Message-ID: <1414792434.54806.YahooMailBasic@web172304.mail.ir2.yahoo.com> ------------------------- On Fri, Oct 31, 2014 10:34 GMT Eric Wong wrote: >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 >Cc: Hin-Tak Leung Tested-by: Hin-Tak Leung Okay, this one on top of my "git 2.1.0 + 10 recent git svn improvement patches" allow me to fetch further. I suspect the problem must be elsewhere though, and this just band-aided over it. For me, reverting the additional patches and just use git 2.1.0 also allow me to fetch further, so the problem appear to me to be associated with the additional patches. But you are saying that git-svn on debian as shipped exhibit this problem? >--- > Sorry, waaay past my bed time.  This version doesn't infinite loop > on autoload or older SVN(*) (at least I hope it doesn't) > > perl/Git/SVN/Ra.pm | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > >diff --git a/perl/Git/SVN/Ra.pm b/perl/Git/SVN/Ra.pm >index 82d6108..496f430 100644 >--- a/perl/Git/SVN/Ra.pm >+++ b/perl/Git/SVN/Ra.pm >@@ -177,7 +177,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}) { >-- >EW >