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 = ();