add update sha256sums script
This commit is contained in:
1 parent
ce0f931fab
commit
f867bcdb21
1 file changed
+82
Executable
+82
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
DOWNLOAD_DIR="/tmp/ymp-downloads/"
|
||||
|
||||
mkdir -p "$DOWNLOAD_DIR"
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
update_ympbuild() {
|
||||
local f="$1"
|
||||
local pkg ver name sum_var url hash
|
||||
local -a source_urls checksums
|
||||
|
||||
pkg="$(basename "$(dirname "$f")")"
|
||||
ver="$( sed -n "/^version=/{ s/^version='//; s/'.*//; p; q }" "$f")"
|
||||
name="$( sed -n "/^name=/{ s/^name='//; s/'.*//; p; q }" "$f")"
|
||||
[ -z "$ver" ] && { echo " skip $pkg (no version)"; return; }
|
||||
[ -z "$name" ] && name="$pkg"
|
||||
sum_var="$([[ -f "$f" ]] && grep -q "^md5sums=" "$f" && echo "md5sums" || echo "sha256sums")"
|
||||
|
||||
# Get all source URLs by sourcing the ympbuild with bash -c
|
||||
# Bash naturally expands all variables ($version, ${name}, etc.)
|
||||
source_urls=()
|
||||
while IFS= read -r -d '' url; do
|
||||
source_urls+=("$url")
|
||||
done < <(bash -c "source '$f' &>/dev/null; printf '%s\0' \"\${source[@]}\"" 2>/dev/null || true)
|
||||
|
||||
[ ${#source_urls[@]} -eq 0 ] && { echo " skip $pkg (no source URLs)"; return; }
|
||||
|
||||
checksums=()
|
||||
for url in "${source_urls[@]}"; do
|
||||
# Skip local files (no protocol scheme)
|
||||
if [[ "$url" != *"://"* ]]; then
|
||||
checksums+=("SKIP")
|
||||
continue
|
||||
fi
|
||||
|
||||
filename="${url##*/}"
|
||||
local dest="$DOWNLOAD_DIR/$filename"
|
||||
|
||||
if [ ! -f "$dest" ]; then
|
||||
echo " DL $filename"
|
||||
curl --progress-bar \
|
||||
-fsSL -o "$dest" "$url" || {
|
||||
echo " FAIL $pkg (download $url)"
|
||||
checksums+=("SKIP")
|
||||
continue
|
||||
}
|
||||
else
|
||||
echo " CACHE $filename"
|
||||
fi
|
||||
|
||||
if [ "$sum_var" = "md5sums" ]; then
|
||||
hash="$(md5sum "$dest" | cut -d' ' -f1)"
|
||||
else
|
||||
hash="$(sha256sum "$dest" | cut -d' ' -f1)"
|
||||
fi
|
||||
checksums+=("$hash")
|
||||
done
|
||||
|
||||
# Build new checksum array string
|
||||
local new_sums="("
|
||||
for h in "${checksums[@]}"; do
|
||||
new_sums+=" '$h'"
|
||||
done
|
||||
new_sums+=" )"
|
||||
|
||||
# Replace old checksum block in the file
|
||||
if grep -qE "^${sum_var}=\([^)]*\)" "$f"; then
|
||||
# Single-line format: sha256sums=('hash1' 'hash2' ...)
|
||||
sed -i "s|^${sum_var}=.*|${sum_var}=${new_sums}|" "$f"
|
||||
else
|
||||
# Multi-line format: replaces from ^sha256sums=( to the closing )
|
||||
sed -i "/^${sum_var}=/,/^)/c\\${sum_var}=${new_sums}" "$f"
|
||||
fi
|
||||
echo " OK $pkg ${#checksums[@]} checksums updated"
|
||||
}
|
||||
|
||||
find "$1" -type f -iname 'ympbuild' | while read ympbuild ; do
|
||||
update_ympbuild "$ympbuild"
|
||||
done
|
||||
Reference in new issue
Block a user