From c8b1c009cf24145c0ae6521dfb466931839cd181 Mon Sep 17 00:00:00 2001
From: Daniil-Gusev <[email protected]>
Date: Thu, 30 Jul 2026 19:25:39 +0300
Subject: [PATCH] contrib: Cleanup downloaded archives in
download_prerequisites
By default, download_prerequisites left downloaded .tar archives in the
destination directory after extraction. Clean them up after successful
extraction, restoring the behavior of earlier script versions.
Add --save-archives (and --no-save-archives) options to preserve downloaded
archives when explicitly requested.
Avoid re-downloading, verifying, and extracting archives if target component
directories already exist and are not empty.
contrib/ChangeLog:
* download_prerequisites (dir_has_content): New function.
(save_archives): New variable.
Document and handle --save-archives and --no-save-archives options.
Skip download, verify, and extract steps if the target directory
already has content. Delete downloaded archives at the end unless
save_archives is set.
---
contrib/download_prerequisites | 40 +++++++++++++++++++++++++++++-----
1 file changed, 35 insertions(+), 5 deletions(-)
diff --git a/contrib/download_prerequisites b/contrib/download_prerequisites
index 2e6693a2a..738018689 100755
--- a/contrib/download_prerequisites
+++ b/contrib/download_prerequisites
@@ -44,10 +44,16 @@ echo_archives() {
if [ ${graphite} -gt 0 ]; then echo "${isl}"; fi
}
+# 1 if the directory is empty or not exists
+dir_has_content() {
+ [ -d "$1" ] && [ -n "$(ls "$1" 2>/dev/null)" ]
+}
+
graphite=1
verify=1
force=0
only_gettext=false
+save_archives=0
OS=$(uname)
die() {
@@ -84,6 +90,8 @@ The following options are available:
--sha512 use SHA512 checksum to verify package integrity (default)
--md5 use MD5 checksum to verify package integrity
--only-gettext inhibit downloading any package but gettext
+ --save-archives do not delete downloaded archive files after extraction
+ --no-save-archives delete downloaded archive files after extraction (default)
--help show this text and exit
--version show version information and exit
"
@@ -167,6 +175,12 @@ do
--only-gettext)
only_gettext=true
;;
+ --save-archives)
+ save_archives=1
+ ;;
+ --no-save-archives)
+ save_archives=0
+ ;;
-*)
die "unknown option: ${arg}"
;;
@@ -231,12 +245,15 @@ esac
for ar in $(echo_archives)
do
- if [ ${force} -gt 0 ]; then rm -f "${directory}/${ar}"; fi
+ dir_has_content "${directory:?}/${ar%.tar*}"; hascontent=$?
+ if [ ${force} -gt 0 ]; then
+ rm -f "${directory:?}/${ar}"
+ elif [ ${hascontent} -eq 0 ]; then continue; fi
[ -e "${directory}/${ar}" ] \
|| ( cd "${directory}" && ${fetch} --no-verbose "${base_url}${ar}" ) \
|| die "Cannot download ${ar} from ${base_url}"
done
-unset ar
+unset ar hascontent
if [ ${verify} -gt 0 ]
then
@@ -244,18 +261,23 @@ then
[ -r "${chksumfile}" ] || die "No checksums available"
for ar in $(echo_archives)
do
+ dir_has_content "${directory:?}/${ar%.tar*}"; hascontent=$?
+ if [ ${hascontent} -eq 0 ]; then continue; fi
grep "${ar}" "${chksumfile}" \
| ( cd "${directory}" && ${chksum} ) \
|| die "Cannot verify integrity of possibly corrupted file ${ar}"
done
unset chksumfile
fi
-unset ar
+unset ar hascontent
for ar in $(echo_archives)
do
package="${ar%.tar*}"
- if [ ${force} -gt 0 ]; then rm -rf "${directory}/${package}"; fi
+ dir_has_content "${directory:?}/${package}"; hascontent=$?
+ if [ ${force} -gt 0 ] || [ ${hascontent} -gt 0 ]; then
+ rm -rf "${directory:?}/${package}"
+ elif [ ${hascontent} -eq 0 ]; then continue; fi
case $ar in
*.gz)
uncompress='gzip -d'
@@ -272,7 +294,7 @@ do
|| die "Cannot extract package from ${ar}"
unset package
done
-unset ar
+unset ar hascontent
for ar in $(echo_archives)
do
@@ -286,4 +308,12 @@ do
done
unset ar
+for ar in $(echo_archives)
+do
+ if [ ${save_archives} -eq 0 ]; then
+ rm -f "${directory:?}/${ar}"
+ fi
+done
+unset ar
+
echo "All prerequisites downloaded successfully."
--
2.55.0