Code

git-svn: reduce memory usage for large commits
authorEric Wong <normalperson@yhbt.net>
Sat, 14 Oct 2006 22:48:35 +0000 (15:48 -0700)
committerJunio C Hamano <junkio@cox.net>
Sun, 15 Oct 2006 00:38:52 +0000 (17:38 -0700)
apply_textdelta and send_stream can use a separate pool from the
rest of the editor interface, so we'll use a separate SVN::Pool
for them and clear the pool after each file is sent to SVN.

This drastically reduces memory usage per-changeset committed,
and makes large commits (and initial imports) of several
thousand files possible.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
git-svn.perl

index 0f968c8cea1ae2b912b63097cfbb6eba6d064ba8..54d23569337f680f7936390c8a83d2e7f2868c38 100755 (executable)
@@ -3354,9 +3354,11 @@ sub chg_file {
        seek $fh, 0, 0 or croak $!;
 
        my $exp = $md5->hexdigest;
-       my $atd = $self->apply_textdelta($fbat, undef, $self->{pool});
-       my $got = SVN::TxDelta::send_stream($fh, @$atd, $self->{pool});
+       my $pool = SVN::Pool->new;
+       my $atd = $self->apply_textdelta($fbat, undef, $pool);
+       my $got = SVN::TxDelta::send_stream($fh, @$atd, $pool);
        die "Checksum mismatch\nexpected: $exp\ngot: $got\n" if ($got ne $exp);
+       $pool->clear;
 
        close $fh or croak $!;
 }