Browse Source

common-updater-scripts: add mark-broken script

wip-nanopi-m4v2
Milan Pässler 6 years ago
parent
commit
b74be134db
2 changed files with 88 additions and 2 deletions
  1. +2
    -2
      pkgs/common-updater/scripts.nix
  2. +86
    -0
      pkgs/common-updater/scripts/mark-broken

+ 2
- 2
pkgs/common-updater/scripts.nix View File

@@ -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
- 0
pkgs/common-updater/scripts/mark-broken View 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…
Cancel
Save