On Jul 6, 2013, at 17:24, Jonathan Nieder wrote:
(cc-ing Eric Wong, who wrote this code)
Hi,
Kyle McKay wrote:
Temp file with moniker 'svn_delta' already in use at Git.pm line 1250
Temp file with moniker 'git_blob' already in use at Git.pm line 1250
David Rothenberger <daveroth@xxxxxxx> has determined the cause to
be that ra_serf does not drive the delta editor in a depth-first
manner [...]. Instead, the calls come in this order:
[...]
--- a/perl/Git/SVN/Fetcher.pm
+++ b/perl/Git/SVN/Fetcher.pm
@@ -315,11 +315,13 @@ sub change_file_prop {
sub apply_textdelta {
my ($self, $fb, $exp) = @_;
return undef if $self->is_path_ignored($fb->{path});
- my $fh = $::_repository->temp_acquire('svn_delta');
+ my $suffix = 0;
+ ++$suffix while $::_repository->temp_is_locked("svn_delta_${$}_
$suffix");
+ my $fh = $::_repository->temp_acquire("svn_delta_${$}_$suffix");
# $fh gets auto-closed() by SVN::TxDelta::apply(),
# (but $base does not,) so dup() it for reading in close_file
open my $dup, '<&', $fh or croak $!;
- my $base = $::_repository->temp_acquire('git_blob');
+ my $base = $::_repository->temp_acquire("git_blob_${$}_$suffix");
Thanks for your work tracking this down.
I'm a bit confused. Are you saying that apply_textdelta gets called
multiple times in a row without an intervening close_file?
Unless bulk updates are disabled when using the serf access method
(the only one available with svn 1.8) for https?: urls,
apply_textdelta does indeed get called multiple times in a row without
an intervening temp_release.
Two temp files are created for each apply_textdelta ('svn_delta...'
and 'git_blob...'). In my tests it seems that most of the time the
two temp files are enough, but occasionally as many as six will be
open at the same time.
I suspect this maximum number is related to the maximum number of
simultaneous connections the serf access method will use which
defaults to 4. Therefore I would expect to see as many as 8 temp
files (4 each for 'svn_delta...' and 'git_blob...'), but I have only
been able to trigger creation of 6 temp files so far.
Kyle
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html