git-svn: reuse open SVN::Ra connections by URL
Note: this can cause problems with Perl's reference counting GC, so I'm disabling Git::SVN::Ra::DESTROY. If we notice more problems down the line, we can disable this enhancement. Signed-off-by: Eric Wong <normalperson@yhbt.net>
This commit is contained in:
parent
780a2f58e7
commit
f6f0987646
10
git-svn.perl
10
git-svn.perl
@ -2015,6 +2015,7 @@ use vars qw/@ISA $config_dir/;
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
my ($can_do_switch);
|
my ($can_do_switch);
|
||||||
|
my %RA;
|
||||||
|
|
||||||
BEGIN {
|
BEGIN {
|
||||||
# enforce temporary pool usage for some simple functions
|
# enforce temporary pool usage for some simple functions
|
||||||
@ -2033,6 +2034,9 @@ BEGIN {
|
|||||||
|
|
||||||
sub new {
|
sub new {
|
||||||
my ($class, $url) = @_;
|
my ($class, $url) = @_;
|
||||||
|
$url =~ s!/+$!!;
|
||||||
|
return $RA{$url} if $RA{$url};
|
||||||
|
|
||||||
SVN::_Core::svn_config_ensure($config_dir, undef);
|
SVN::_Core::svn_config_ensure($config_dir, undef);
|
||||||
my ($baton, $callbacks) = SVN::Core::auth_open_helper([
|
my ($baton, $callbacks) = SVN::Core::auth_open_helper([
|
||||||
SVN::Client::get_simple_provider(),
|
SVN::Client::get_simple_provider(),
|
||||||
@ -2057,13 +2061,11 @@ sub new {
|
|||||||
$self->{svn_path} = $url;
|
$self->{svn_path} = $url;
|
||||||
$self->{repos_root} = $self->get_repos_root;
|
$self->{repos_root} = $self->get_repos_root;
|
||||||
$self->{svn_path} =~ s#^\Q$self->{repos_root}\E/*##;
|
$self->{svn_path} =~ s#^\Q$self->{repos_root}\E/*##;
|
||||||
bless $self, $class;
|
$RA{$url} = bless $self, $class;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub DESTROY {
|
sub DESTROY {
|
||||||
my $self = shift;
|
# do not call the real DESTROY since we store ourselves in %RA
|
||||||
$self->{pool}->clear if $self->{pool};
|
|
||||||
$self->SUPER::DESTROY(@_);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub dup {
|
sub dup {
|
||||||
|
Loading…
Reference in New Issue
Block a user