scripts/update: add a --dry-run option

This commit is contained in:
Colin 2024-06-12 08:44:02 +00:00
parent 111c69b368
commit 86482e922c

View File

@ -9,6 +9,7 @@ usage() {
echo "update nixpkgs: update only the nixpkgs input"
echo "update sane: update every package under the 'sane' attribute"
echo "update: update everything i know how to update"
exit 1
}
warn() {
@ -18,6 +19,14 @@ info() {
echo "$@"
}
hasEffect() {
if [ -n "$dryRun" ]; then
echo "dry-run: skip $@"
else
eval "$@"
fi
}
# usage: getPkgs outVar prefix
getPkgs() {
local -n attrsArr="$1"
@ -27,7 +36,7 @@ getPkgs() {
fi
local attrs="$(nix-env -f . --query --available --attr-path --no-name -A $attrPrefix)"
attrsArr=($attrs)
attrsArr+=($attrs)
}
updateOnePkg() {
@ -45,9 +54,35 @@ updateOnePkg() {
UPDATE_NIX_NAME="$UPDATE_NIX_NAME" UPDATE_NIX_PNAME="$UPDATE_NIX_PNAME" UPDATE_NIX_OLD_VERSION="$UPDATE_NIX_OLD_VERSION" UPDATE_NIX_ATTR_PATH="$attrPath" eval $updateScript
}
dryRun=
toplevelsToUpdate=()
parseArgs() {
while [ "$#" -ne 0 ]; do
local arg=$1
shift
case "$arg" in
(--help)
usage
;;
(--dry-run)
dryRun=1
;;
(*)
toplevelsToUpdate+=("$arg")
;;
esac
done
if [ "${#toplevelsToUpdate[@]}" -eq 0 ]; then
toplevelsToUpdate=(sane)
fi
}
parseArgs "$@"
pkgsToUpdate=()
getPkgs pkgsToUpdate
for t in "${toplevelsToUpdate[@]}"; do
getPkgs pkgsToUpdate "$t"
done
for p in "${pkgsToUpdate[@]}"; do
updateOnePkg "$p"
hasEffect updateOnePkg "$p"
done