Re: git-svn performance
- From
- Eric Wong <normalperson@yhbt.net>
- Date
- Oct 21, 2014, 09:00 UTC
- Message-ID
- <20141021090055.GA22184@dcvr.yhbt.net>
- In-Reply-To
- <00E02C52-67BC-461B-BF46-0EEDCFFFDFB1@2pi.dk>
Jakob Stoklund Olesen <stoklund@2pi.dk> wrote:
> Yes, but I think you can remove cached_mergeinfo_rev too.
Thanks, pushed the patch at the bottom, too. Also started working on some memory reductions here: http://mid.gmane.org/20141021033912.GA27462@dcvr.yhbt.net But there seem to be more problems :<
----------------------------8<----------------------------- From: Eric Wong <normalperson@yhbt.net> Date: Tue, 21 Oct 2014 06:23:22 +0000 Subject: [PATCH] git-svn: remove mergeinfo rev caching
This should further reduce memory usage from the new mergeinfo speedups without hurting performance too much, assuming reasonable latency to the SVN server.
Cc: Hin-Tak Leung <htl10@users.sourceforge.net> Suggested-by: Jakob Stoklund Olesen <stoklund@2pi.dk> Signed-off-by: Eric Wong <normalperson@yhbt.net> --- perl/Git/SVN.pm | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-)
diff --git a/perl/Git/SVN.pm b/perl/Git/SVN.pm index f8a75b1..4364506 100644 --- a/perl/Git/SVN.pm +++ b/perl/Git/SVN.pm @@ -1710,32 +1710,20 @@ sub mergeinfo_changes { my %minfo = map {split ":", $_ } split "\n", $mergeinfo_prop; my $old_minfo = {}; - # Initialize cache on the first call. - unless (defined $self->{cached_mergeinfo_rev}) { - $self->{cached_mergeinfo_rev} = {}; - } - - my $cached_rev = $self->{cached_mergeinfo_rev}{$old_path}; - unless (defined $cached_rev && $cached_rev == $old_rev) { - my $ra = $self->ra; - # Give up if $old_path isn't in the repo. - # This is probably a merge on a subtree. - if ($ra->check_path($old_path, $old_rev) != $SVN::Node::dir) { - warn "W: ignoring svn:mergeinfo on $old_path, ", - "directory didn't exist in r$old_rev\n"; - return {}; - } - } - my (undef, undef, $props) = $self->ra->get_dir($old_path, $old_rev); + my $ra = $self->ra; + # Give up if $old_path isn't in the repo. + # This is probably a merge on a subtree. + if ($ra->check_path($old_path, $old_rev) != $SVN::Node::dir) { + warn "W: ignoring svn:mergeinfo on $old_path, ", + "directory didn't exist in r$old_rev\n"; + return {}; + } + my (undef, undef, $props) = $ra->get_dir($old_path, $old_rev); if (defined $props->{"svn:mergeinfo"}) { my %omi = map {split ":", $_ } split "\n", $props->{"svn:mergeinfo"}; $old_minfo = \%omi; } - $self->{cached_mergeinfo_rev}{$old_path} = $old_rev; - - # Cache the new mergeinfo. - $self->{cached_mergeinfo_rev}{$path} = $rev; my %changes = (); foreach my $p (keys %minfo) {
-- EW