diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2020-01-22 10:57:41 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2020-01-22 11:01:29 +0200 |
commit | 00c8b97d6e3fab6b87c9b3070bfb69f5858fe2b2 (patch) | |
tree | 26049cbc1ca95e987f2583cc6f6d4ed0d10cd6dc | |
parent | 68be041dd11573aff08847748456040b9ef3f0b4 (diff) | |
download | file-backup-00c8b97d6e3fab6b87c9b3070bfb69f5858fe2b2.tar.gz file-backup-00c8b97d6e3fab6b87c9b3070bfb69f5858fe2b2.tar.bz2 |
Optimize file creation loop
* lib/File/BackupCopy.pm (backup_copy_simple): Use base file
name as the last argument to catfile.
(backup_copy_internal): Compute backup file stub name before
the loop.
-rw-r--r-- | lib/File/BackupCopy.pm | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/lib/File/BackupCopy.pm b/lib/File/BackupCopy.pm index 226e8ce..43ce150 100644 --- a/lib/File/BackupCopy.pm +++ b/lib/File/BackupCopy.pm | |||
@@ -89,7 +89,7 @@ sub backup_copy_simple { | |||
89 | croak "unrecognized keyword arguments" if keys %_; | 89 | croak "unrecognized keyword arguments" if keys %_; |
90 | my $backup_name = $file_name . '~'; | 90 | my $backup_name = $file_name . '~'; |
91 | if ($dir) { | 91 | if ($dir) { |
92 | $backup_name = File::Spec->catfile($dir, $backup_name); | 92 | $backup_name = File::Spec->catfile($dir, basename($backup_name)); |
93 | } | 93 | } |
94 | copy($file_name, $backup_name) | 94 | copy($file_name, $backup_name) |
95 | or return _backup_copy_error($error, | 95 | or return _backup_copy_error($error, |
@@ -122,8 +122,9 @@ sub backup_copy_internal { | |||
122 | or return _backup_copy_error($error, | 122 | or return _backup_copy_error($error, |
123 | "failed to make a temporary copy of $file_name: $!"); | 123 | "failed to make a temporary copy of $file_name: $!"); |
124 | 124 | ||
125 | my $pat = $dir ? File::Spec->catfile($dir, "$file_name.~*~") | 125 | my $backup_stub = $dir ? File::Spec->catfile($dir, basename($file_name)) |
126 | : "$file_name.~*~"; | 126 | : $file_name; |
127 | my $pat = "$backup_stub.~*~"; | ||
127 | my $num = (sort { $b <=> $a } | 128 | my $num = (sort { $b <=> $a } |
128 | map { | 129 | map { |
129 | if (/.+\.~(\d+)~$/) { | 130 | if (/.+\.~(\d+)~$/) { |
@@ -141,10 +142,7 @@ sub backup_copy_internal { | |||
141 | 142 | ||
142 | my $backup_name; | 143 | my $backup_name; |
143 | while (1) { | 144 | while (1) { |
144 | $backup_name = "$file_name.~$num~"; | 145 | $backup_name = "$backup_stub.~$num~"; |
145 | if ($dir) { | ||
146 | $backup_name = File::Spec->catfile($dir, $backup_name); | ||
147 | } | ||
148 | last if symlink($fh->filename, $backup_name); | 146 | last if symlink($fh->filename, $backup_name); |
149 | unless ($!{EEXIST}) { | 147 | unless ($!{EEXIST}) { |
150 | return _backup_copy_error("can't link " | 148 | return _backup_copy_error("can't link " |