git-svn: cache only mergeinfo revisions
This should reduce excessive memory usage from the new mergeinfo caches 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>
Eric Wong committed
Oct 20, 2014 at 01:02 UTC
54b95346c1322bb122e12aba0f03652f241a918b
1 file changed
+8
-14
perl/Git/SVN.pm
+8
-14
@@ -1713,13 +1713,10 @@ sub mergeinfo_changes {
1713
# Initialize cache on the first call.
1714
unless (defined $self->{cached_mergeinfo_rev}) {
1715
$self->{cached_mergeinfo_rev} = {};
1716
- $self->{cached_mergeinfo} = {};
1716
}
1717
1718
my $cached_rev = $self->{cached_mergeinfo_rev}{$old_path};
1720
- if (defined $cached_rev && $cached_rev == $old_rev) {
1721
- $old_minfo = $self->{cached_mergeinfo}{$old_path};
1722
- } else {
1719
+ unless (defined $cached_rev && $cached_rev == $old_rev) {
1720
my $ra = $self->ra;
1721
# Give up if $old_path isn't in the repo.
1722
# This is probably a merge on a subtree.
@@ -1728,19 +1725,16 @@ sub mergeinfo_changes {
1725
"directory didn't exist in r$old_rev\n";
1726
return {};
1727
}
1731
- my (undef, undef, $props) =
1732
- $self->ra->get_dir($old_path, $old_rev);
1733
- if (defined $props->{"svn:mergeinfo"}) {
1734
- my %omi = map {split ":", $_ } split "\n",
1735
- $props->{"svn:mergeinfo"};
1736
- $old_minfo = \%omi;
1737
- }
1738
- $self->{cached_mergeinfo}{$old_path} = $old_minfo;
1739
- $self->{cached_mergeinfo_rev}{$old_path} = $old_rev;
1728
}
1729
+ my (undef, undef, $props) = $self->ra->get_dir($old_path, $old_rev);
1730
+ if (defined $props->{"svn:mergeinfo"}) {
1731
+ my %omi = map {split ":", $_ } split "\n",
1732
+ $props->{"svn:mergeinfo"};
1733
+ $old_minfo = \%omi;
1734
+ }
1735
+ $self->{cached_mergeinfo_rev}{$old_path} = $old_rev;
1736
1737
# Cache the new mergeinfo.
1743
- $self->{cached_mergeinfo}{$path} = \%minfo;
1738
$self->{cached_mergeinfo_rev}{$path} = $rev;
1739
1740
my %changes = ();