[pve-devel] applied: [PATCH] tools: download from url: add option to allow overriding existing files
Thomas Lamprecht
t.lamprecht at proxmox.com
Wed Jun 16 12:45:18 CEST 2021
Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
---
allows for slightly nicer UX and drops the confusing special case of
"always allow overwriting if no checksum algorithm was passed".
src/PVE/Tools.pm | 26 ++++++++++++++++----------
1 file changed, 16 insertions(+), 10 deletions(-)
diff --git a/src/PVE/Tools.pm b/src/PVE/Tools.pm
index 9046b4f..465c338 100644
--- a/src/PVE/Tools.pm
+++ b/src/PVE/Tools.pm
@@ -1842,6 +1842,7 @@ sub safe_compare {
# opts is a hash ref with the following known properties
+# allow_overwrite - if 1, overwriting existing files is allowed, use with care. Default to false
# hash_required - if 1, at least one checksum has to be specified otherwise an error will be thrown
# http_proxy
# https_proxy
@@ -1862,17 +1863,22 @@ sub download_file_from_url {
print "downloading $url to $dest\n";
- if (-f $dest && $checksum_algorithm) {
- print "calculating checksum of existing file...";
- my $checksum_got = get_file_hash($checksum_algorithm, $dest);
+ if (-f $dest) {
+ if ($checksum_algorithm) {
+ print "calculating checksum of existing file...";
+ my $checksum_got = get_file_hash($checksum_algorithm, $dest);
- if (lc($checksum_got) eq lc($checksum_expected)) {
- print "OK, got correct file already, no need to download\n";
- return;
- } else {
- # we could re-download, but may not be safe so just abort for now..
- print "\n"; # the front end expects the error to reside at the last line without any noise
- die "checksum mismatch: got '$checksum_got' != expect '$checksum_expected', aborting\n";
+ if (lc($checksum_got) eq lc($checksum_expected)) {
+ print "OK, got correct file already, no need to download\n";
+ return;
+ } elsif ($opts->{allow_overwrite}) {
+ print "checksum mismatch: got '$checksum_got' != expect '$checksum_expected', re-download\n";
+ } else {
+ print "\n"; # the front end expects the error to reside at the last line without any noise
+ die "checksum mismatch: got '$checksum_got' != expect '$checksum_expected', aborting\n";
+ }
+ } elsif (!$opts->{allow_overwrite}) {
+ die "refusing to override existing file '$dest'\n";
}
}
--
2.30.2
More information about the pve-devel
mailing list