Merge pull request #85337 from petabyteboy/feature/mark-broken
common-updater-scripts: add mark-broken script
This commit is contained in:
commit
05d1546060
@ -1,4 +1,4 @@
|
||||
{ stdenv, makeWrapper, coreutils, gnused, gnugrep, diffutils, nix, git }:
|
||||
{ stdenv, makeWrapper, coreutils, gnused, gnugrep, diffutils, nix, git, jq }:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "common-updater-scripts";
|
||||
@ -12,7 +12,7 @@ stdenv.mkDerivation {
|
||||
cp ${./scripts}/* $out/bin
|
||||
|
||||
for f in $out/bin/*; do
|
||||
wrapProgram $f --prefix PATH : ${stdenv.lib.makeBinPath [ coreutils gnused gnugrep nix diffutils git ]}
|
||||
wrapProgram $f --prefix PATH : ${stdenv.lib.makeBinPath [ coreutils gnused gnugrep nix diffutils git jq ]}
|
||||
done
|
||||
'';
|
||||
}
|
||||
|
86
pkgs/common-updater/scripts/mark-broken
Executable file
86
pkgs/common-updater/scripts/mark-broken
Executable file
@ -0,0 +1,86 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
scriptName=mark-broken # do not use the .wrapped name
|
||||
|
||||
die() {
|
||||
echo "$scriptName: error: $1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
usage() {
|
||||
echo "Usage: $scriptName <attr> [--new-value=<new-value>]"
|
||||
}
|
||||
|
||||
args=()
|
||||
|
||||
for arg in "$@"; do
|
||||
case $arg in
|
||||
--new-value=*)
|
||||
newValue="${arg#*=}"
|
||||
;;
|
||||
--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
--*)
|
||||
echo "$scriptName: Unknown argument: $arg"
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
args["${#args[*]}"]=$arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
attr=${args[0]}
|
||||
|
||||
if (( "${#args[*]}" < 1 )); then
|
||||
echo "$scriptName: Too few arguments"
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if (( "${#args[*]}" > 1 )); then
|
||||
echo "$scriptName: Too many arguments"
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z $newValue ]; then
|
||||
newValue="true"
|
||||
fi
|
||||
|
||||
nixFile=$(nix-instantiate --eval --json -E "with import ./. {}; (builtins.unsafeGetAttrPos \"description\" $attr.meta).file" | jq -r .)
|
||||
if [[ ! -f "$nixFile" ]]; then
|
||||
die "Couldn't evaluate 'builtins.unsafeGetAttrPos \"description\" $attr.meta' to locate the .nix file!"
|
||||
fi
|
||||
|
||||
# Insert broken attribute
|
||||
sed -i.bak "$nixFile" -r \
|
||||
-e "/^\s*broken\s*=.*$/d" \
|
||||
-e "s/(\s*)meta\s*=.*\{/&\n\1 broken = $newValue;/"
|
||||
|
||||
if cmp -s "$nixFile" "$nixFile.bak"; then
|
||||
mv "$nixFile.bak" "$nixFile"
|
||||
die "Failed to mark the package as broken! Does it have a meta attribute?"
|
||||
fi
|
||||
|
||||
if [[ "$newValue" == "true" ]]; then
|
||||
# broken should evaluate to true in any case now
|
||||
markedSuccessfully=$(nix-instantiate --eval -E "with import ./. {}; $attr.meta.broken" || true)
|
||||
if [[ ! "$markedSuccessfully" == "true" ]]; then
|
||||
mv "$nixFile.bak" "$nixFile"
|
||||
die "Couldn't verify the broken attribute to be set correctly, restoring backup!"
|
||||
fi
|
||||
else
|
||||
# we can not check if broken evaluates to the correct value, but we can check that it does evaluate
|
||||
if ! nix-instantiate --eval -E "with import ./. {}; $attr.meta.broken" >/dev/null; then
|
||||
mv "$nixFile.bak" "$nixFile"
|
||||
die "Couldn't verify the broken attribute to be set correctly, restoring backup!"
|
||||
fi
|
||||
fi
|
||||
|
||||
rm -f "$nixFile.bak"
|
||||
rm -f "$attr.fetchlog"
|
Loading…
Reference in New Issue
Block a user