aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2020-01-22 11:05:03 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2020-01-22 13:13:24 +0200
commitf3d76da04b7e918c104693b8584c4f4bd18a7c8d (patch)
treeb53668b38e588552a775f3e6ffb6505e3d657605
parent00c8b97d6e3fab6b87c9b3070bfb69f5858fe2b2 (diff)
downloadfile-backup-f3d76da04b7e918c104693b8584c4f4bd18a7c8d.tar.gz
file-backup-f3d76da04b7e918c104693b8584c4f4bd18a7c8d.tar.bz2
Don't create temporary file if falling back to simple backup
-rw-r--r--lib/File/BackupCopy.pm21
1 files 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
@@ -110,39 +110,38 @@ sub backup_copy_internal {
$dir = delete $_{dir};
croak "unrecognized keyword arguments" if keys %_;
} else {
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+)~$/) {
$1
} else {
()
}
- } glob($pat))[0];
+ } glob("$backup_stub.~*~"))[0];
if (!defined($num)) {
return backup_copy_simple($file_name, error => $error, dir => $dir)
if $if_exists;
$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~";
last if symlink($fh->filename, $backup_name);
unless ($!{EEXIST}) {
return _backup_copy_error("can't link "

Return to:

Send suggestions and report system problems to the System administrator.