Johannes Schindelin <Johannes.Schindelin@xxxxxx> wrote: > Hi, > > On Tue, 16 Feb 2010, josh robb wrote: > > > I'm using git svn (1.6.4.msysgit.0) within a WindowsXP VM running > > under VMWare fusion on OSX 10.5. For me (and at least one other person > > I know) git svn has been unbearably slow. > > > > My profiling shows that almost all of the git-svn runtime is being > > spent in DynaLoader (via SVN::Base::import) which I guess is slow in a > > virtualized windows environment. For example: > > > > $ time perl /libexec/git-core/git-svn rebase > > Current branch master is up to date. > > > > real 2m56.750s > > user 0m3.129s > > sys 2m39.232s > > > > I've been able to make significant (an order of magnitude) > > improvements to it's performance by delaying SVN::Base::import from > > running until it's actually needed. After making this change: > > > > $ time perl /libexec/git-core/git-svn rebase > > Current branch master is up to date. > > > > real 0m33.407s > > user 0m1.409s > > sys 0m23.054s > > > > git svn rebase -n goes from 3m7.046s to 0m10.312s. > > > > Would love to get some feedback/thoughts etc... > > How about the following commit message (trying to follow > http://repo.or.cz/w/git.git?a=blob;f=Documentation/SubmittingPatches;hb=HEAD): > > -- snip -- > git svn: delay importing SVN::Base until it is needed > > Importing functions from a .dll into Git for Windows' perl is pretty slow, > so let's avoid importing if it is not necessary. > > [... timing statistics here...] > > Signed-off-by: Josh Robb <josh_robb@xxxxxxxxxxx> > -- snap -- Hi Josh, Your patch was missing a call to ::req_svn() in cmd_branch(), but otherwise it appears fine and passes all tests. Can you write a proper commit message + patch so we can apply it cleanly as Johannes suggested? Thanks! (full diff below) diff --git a/git-svn.perl b/git-svn.perl index 473a0b9..224c29f 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -36,11 +36,13 @@ $ENV{TZ} = 'UTC'; $| = 1; # unbuffer STDOUT sub fatal (@) { print STDERR "@_\n"; exit 1 } -require SVN::Core; # use()-ing this causes segfaults for me... *shrug* -require SVN::Ra; -require SVN::Delta; -if ($SVN::Core::VERSION lt '1.1.0') { - fatal "Need SVN::Core 1.1.0 or better (got $SVN::Core::VERSION)"; +sub _req_svn { + require SVN::Core; # use()-ing this causes segfaults for me... *shrug* + require SVN::Ra; + require SVN::Delta; + if ($SVN::Core::VERSION lt '1.1.0') { + fatal "Need SVN::Core 1.1.0 or better (got $SVN::Core::VERSION)"; + } } my $can_compress = eval { require Compress::Zlib; 1}; push @Git::SVN::Ra::ISA, 'SVN::Ra'; @@ -730,6 +732,7 @@ sub cmd_branch { $src=~s/^http:/https:/; } + ::_req_svn(); my $ctx = SVN::Client->new( auth => Git::SVN::Ra::_auth_providers(), log_msg => sub { @@ -4859,6 +4862,8 @@ sub new { $url =~ s!/+$!!; return $RA if ($RA && $RA->{url} eq $url); + ::_req_svn(); + SVN::_Core::svn_config_ensure($config_dir, undef); my ($baton, $callbacks) = SVN::Core::auth_open_helper(_auth_providers); my $config = SVN::Core::config_get_config($config_dir); -- Eric Wong -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html