Skip to content

Commit 8ac251b

Browse files
mackylegitster
authored andcommitted
git-svn: allow git-svn fetching to work using serf
When attempting to git-svn fetch files from an svn https?: url using the serf library (the only choice starting with svn 1.8) the following errors can occur: 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 <[email protected]> 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: 1. open_root 2. open_directory 3. add_file 4. apply_textdelta 5. add_file 6. apply_textdelta When using the ra_serf access method, git-svn can end up needing to create several temp files before the first one is closed. This change causes a new temp file moniker to be generated if the one that would otherwise have been used is currently locked. Signed-off-by: Kyle J. McKay <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 4e63dcc commit 8ac251b

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

perl/Git/SVN/Fetcher.pm

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,11 +315,13 @@ sub change_file_prop {
315315
sub apply_textdelta {
316316
my ($self, $fb, $exp) = @_;
317317
return undef if $self->is_path_ignored($fb->{path});
318-
my $fh = $::_repository->temp_acquire('svn_delta');
318+
my $suffix = 0;
319+
++$suffix while $::_repository->temp_is_locked("svn_delta_${$}_$suffix");
320+
my $fh = $::_repository->temp_acquire("svn_delta_${$}_$suffix");
319321
# $fh gets auto-closed() by SVN::TxDelta::apply(),
320322
# (but $base does not,) so dup() it for reading in close_file
321323
open my $dup, '<&', $fh or croak $!;
322-
my $base = $::_repository->temp_acquire('git_blob');
324+
my $base = $::_repository->temp_acquire("git_blob_${$}_$suffix");
323325

324326
if ($fb->{blob}) {
325327
my ($base_is_link, $size);

0 commit comments

Comments
 (0)