Patching locally against mirror source http://code.bestpractical.com/svk.
==== Patch <-> level 1
Source: [No source]
Target: 4ccb8a5b-8ae0-0310-9b02-86531366991d:/trunk/lib/SVK/Editor:2522
        (http://code.bestpractical.com/svk)
Log:
Reduce leaks when merging lots of file additions
=== Merge.pm
==================================================================
--- Merge.pm	(revision 2522)
+++ Merge.pm	(patch - level 1)
@@ -251,9 +251,10 @@
     return unless defined $pdir;
     my $pool = pop @arg;
     # a replaced node shouldn't be checked with cb_exist
+    my $spool = SVN::Pool->new_default($pool);
     my $touched = $self->{notify}->node_status($path);
     if (!$self->{added}{$pdir} && !$touched &&
-	(my $kind = $self->inspector->exist($path, $pool))) {
+	(my $kind = $self->inspector->exist($path, $spool))) {
 	unless ($kind == $SVN::Node::file) {
 	    $self->{notify}->flush ($path) ;
 	    return undef;
@@ -278,7 +279,9 @@
 	}
 	$self->{storage_baton}{$path} =
 	    $self->{storage}->add_file ($path, $self->{storage_baton}{$pdir}, @arg, $pool);
-	$pool->default if $pool && $pool->can ('default');
+	# XXX: Why was this here? All tests pass without it.
+	#$pool->default if $pool && $pool->can ('default');
+
 	# XXX: fpool is used for testing if the file is open rather than add,
 	# so use another field to hold it.
 	$self->{info}{$path}{hold_pool} = $pool;
@@ -740,7 +743,6 @@
 # Note that empty hash means don't delete - conflict.
 sub _check_delete_conflict {
     my ($self, $path, $rpath, $kind, $pdir, $pool) = @_;
-    $pool->default;
 
     my $localkind = $self->inspector->exist ($path, $pool);
 
@@ -778,13 +780,13 @@
                 $torm->{$name} = undef;
 	    }
             else {
-                $torm->{$name} = $self->_check_delete_conflict ($cpath, $crpath, $entry->kind, $path, SVN::Pool->new($pool));
+                $torm->{$name} = $self->_check_delete_conflict ($cpath, $crpath, $entry->kind, $path, SVN::Pool->new_default($pool));
             }
             delete $dirmodified->{$name};
 	}
 	else { # dir or unmodified file
             $torm->{$name} = $self->_check_delete_conflict
-                ($cpath, $crpath, $entry->kind, $path, SVN::Pool->new($pool));
+                ($cpath, $crpath, $entry->kind, $path, SVN::Pool->new_default($pool));
 	}
     }
 
@@ -792,7 +794,7 @@
         local $self->{tree_conflict} = 1;
         my ($cpath, $crpath) = ("$path/$node", "$rpath/$node");
         my $kind = $self->{base_root}->check_path ($crpath);
-        $torm->{$node} = $self->_check_delete_conflict ($cpath, $crpath, $kind, $path, SVN::Pool->new($pool));
+        $torm->{$node} = $self->_check_delete_conflict ($cpath, $crpath, $kind, $path, SVN::Pool->new_default($pool));
     }
 
     $self->{storage}->close_directory ($baton, $pool);
@@ -830,7 +832,7 @@
     for (sort keys %$torm) {
 	my $cpath = "$path/$_";
         # check that out
-	my $status = $self->_partial_delete ($torm->{$_}, $cpath, $baton, SVN::Pool->new ($pool), 1);
+	my $status = $self->_partial_delete ($torm->{$_}, $cpath, $baton, SVN::Pool->new_default($pool), 1);
         push @children_stats, [$cpath, $status];
         $skip_children = 0  unless $status eq 'D';
         $summary = 'C' if $status eq 'C';
@@ -870,10 +872,9 @@
 }
 
 sub delete_entry {
-    my ($self, $path, $revision, $pdir, @arg) = @_;
+    my ($self, $path, $revision, $pdir, $pool) = @_;
     no warnings 'uninitialized';
-    my $pool = $arg[-1];
-    $pool->default;
+    $pool = SVN::Pool->new_default($pool);
     my ($basepath, $fromrev) = $self->_resolve_base($path);
     $basepath = $path unless defined $basepath;
 
@@ -888,10 +889,10 @@
 	# XXX: this is too evil
 	local $self->{base_root} = $self->{base_root}->fs->revision_root($fromrev) if $basepath ne $path;
 	my $kind = $self->{base_root}->check_path ($rpath);
-        $torm = $self->_check_delete_conflict ($path, $rpath, $kind, $pdir, @arg);
+	$torm = $self->_check_delete_conflict ($path, $rpath, $kind, $pdir, $pool);
     }
 
-    $self->_partial_delete ($torm, $path, $self->{storage_baton}{$pdir}, @arg);
+    $self->_partial_delete ($torm, $path, $self->{storage_baton}{$pdir}, $pool);
     ++$self->{changes};
 }
 

==== BEGIN SVK PATCH BLOCK ====
Version: svk v2.0.99_01 (linux)

eJyNU7tu1EAUdZtIIApEQzNSnJcUZ9fPtXeFsxShgJAgkrBBFNasfZ0ddta27NmEoCniSEGL+AM+
gJ4iVIBESU0FvwH0XHt3JRokXMzD95xzz8zcey8/6HR16ftNqepNuf/kQbv9iIpwsIw71ZEQMZHm
qi05nABXTcnTY9WSCR0BRgXNj0H4vo5kd0rerglzEavS6FORJoXq1WKByAFUXRpdU3YNiSNudAym
GSRBnqYCkxmW1XIwGlSeQp4WEFTcCm9XeGOOjxkH1ZUPAX1sZqNaak43K7o9o0cshxCNnVWQqU4d
pVnGzwIBL0QEXNBa2zRkHFJbb7p2q+XF1Gy5ltkCE9eO5xieE7qqZTp43l1FKX8tlb9v7F30lKtd
5Z1S3rzaLpVXOx+enj9Xfmafesqb6+X7ZxOljMuPbKJc7JSf9ybKxCu/3J4or73y6+F5T7lcKL/F
5/eV/fL71qXy9lr541aRpSkndwgmwcvEteYncBpEENMxF2tqFV7vFEvk6OioTXqDM3JKCyIGrCAD
yGGL3OWcCChEQTJaFOSUiUE6FoSJzcWFpZqu+TM1wmJS/yErK2QWCmlC1lZngNX1zuI89b/mqSN0
3A06iwS/JEVLecKS44KsjnFmglHOXkK0OgWo/3PEBRVfbYQotQAea34QDiAcIoiDgCBMk5izUBBE
UzHYIGo+m4csiXDK8OE3ppnqoWv9XVR1+cyf3NFpHDqWB46t67ZuG7bnxi0ztPuR3qdmXVuWKx9D
NA6BcKBDvNUBJGSE1YenJDzFy05jUqkSGmHBsqrudan5viFVw5h2yEHdNO32YcJOIC8oX3YktlTl
G/srhxPcjMcsUg1dNkQ+ToYNzvoN5DamzYVxwzbQtCOtMOy71O5rLoWm1jT1pub1m4bmOrapm47j
eXr0B99aScA=
==== END SVK PATCH BLOCK ====
