From f3d76da04b7e918c104693b8584c4f4bd18a7c8d Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Wed, 22 Jan 2020 11:05:03 +0200 Subject: Don't create temporary file if falling back to simple backup --- lib/File/BackupCopy.pm | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/lib/File/BackupCopy.pm b/lib/File/BackupCopy.pm index 43ce150..fd52029 100644 --- a/lib/File/BackupCopy.pm +++ b/lib/File/BackupCopy.pm @@ -113,18 +113,8 @@ sub backup_copy_internal { croak "wrong number of arguments"; } - my $fh = eval { File::Temp->new(DIR => $dir || dirname($file_name)) }; - if ($@) { - return _backup_copy_error($error, $@); - } - - copy($file_name, $fh) - or return _backup_copy_error($error, - "failed to make a temporary copy of $file_name: $!"); - my $backup_stub = $dir ? File::Spec->catfile($dir, basename($file_name)) : $file_name; - my $pat = "$backup_stub.~*~"; my $num = (sort { $b <=> $a } map { if (/.+\.~(\d+)~$/) { @@ -132,7 +122,7 @@ sub backup_copy_internal { } else { () } - } glob($pat))[0]; + } glob("$backup_stub.~*~"))[0]; if (!defined($num)) { return backup_copy_simple($file_name, error => $error, dir => $dir) @@ -140,6 +130,15 @@ sub backup_copy_internal { $num = '1'; } + my $fh = eval { File::Temp->new(DIR => $dir || dirname($file_name)) }; + if ($@) { + return _backup_copy_error($error, $@); + } + + copy($file_name, $fh) + or return _backup_copy_error($error, + "failed to make a temporary copy of $file_name: $!"); + my $backup_name; while (1) { $backup_name = "$backup_stub.~$num~"; -- cgit v1.2.1