about summary refs log tree commit diff
path: root/nixpkgs/pkgs/common-updater
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2020-05-12 14:45:39 +0000
committerAlyssa Ross <hi@alyssa.is>2020-05-12 14:56:01 +0000
commiteb7dadee9c0f903f1152f8dd4165453bfa48ccf4 (patch)
treea6bd66dcbec895aae167465672af08a1ca70f089 /nixpkgs/pkgs/common-updater
parent3879b925f5dae3a0eb5c98b10c1ac5a0e4d729a3 (diff)
parent683c68232e91f76386db979c461d8fbe2a018782 (diff)
downloadnixlib-eb7dadee9c0f903f1152f8dd4165453bfa48ccf4.tar
nixlib-eb7dadee9c0f903f1152f8dd4165453bfa48ccf4.tar.gz
nixlib-eb7dadee9c0f903f1152f8dd4165453bfa48ccf4.tar.bz2
nixlib-eb7dadee9c0f903f1152f8dd4165453bfa48ccf4.tar.lz
nixlib-eb7dadee9c0f903f1152f8dd4165453bfa48ccf4.tar.xz
nixlib-eb7dadee9c0f903f1152f8dd4165453bfa48ccf4.tar.zst
nixlib-eb7dadee9c0f903f1152f8dd4165453bfa48ccf4.zip
Merge commit '683c68232e91f76386db979c461d8fbe2a018782'
Diffstat (limited to 'nixpkgs/pkgs/common-updater')
-rw-r--r--nixpkgs/pkgs/common-updater/generic-updater.nix20
-rw-r--r--nixpkgs/pkgs/common-updater/scripts.nix4
-rwxr-xr-xnixpkgs/pkgs/common-updater/scripts/mark-broken86
3 files changed, 103 insertions, 7 deletions
diff --git a/nixpkgs/pkgs/common-updater/generic-updater.nix b/nixpkgs/pkgs/common-updater/generic-updater.nix
index e54363a1dda5..8483f9bbd1de 100644
--- a/nixpkgs/pkgs/common-updater/generic-updater.nix
+++ b/nixpkgs/pkgs/common-updater/generic-updater.nix
@@ -4,6 +4,7 @@
 , version
 , attrPath ? pname
 , versionLister
+, ignoredVersions ? ""
 , rev-prefix ? ""
 , odd-unstable ? false
 , patchlevel-unstable ? false
@@ -23,13 +24,19 @@ let
     version="$2"
     attr_path="$3"
     version_lister="$4"
-    rev_prefix="$5"
-    odd_unstable="$6"
-    patchlevel_unstable="$7"
+    ignored_versions="$5"
+    rev_prefix="$6"
+    odd_unstable="$7"
+    patchlevel_unstable="$8"
 
     # print header
     echo "# $pname-$version" >> ${fileForGitCommands}
 
+    function version_is_ignored() {
+      local tag="$1"
+      [ -n "$ignored_versions" ] && grep -E "$ignored_versions" <<< "$tag"
+    }
+
     function version_is_unstable() {
       local tag="$1"
       local enforce="$2"
@@ -68,7 +75,10 @@ let
     # find the newest tag
     # do not consider development versions
     for latest_tag in $tags; do
-      if version_is_unstable "$latest_tag"; then
+      if version_is_ignored "$latest_tag"; then
+        echo "#   skip ignored version: $pname-$latest_tag" >> ${fileForGitCommands}
+        latest_tag=
+      elif version_is_unstable "$latest_tag"; then
         echo "#   skip development version: $pname-$latest_tag" >> ${fileForGitCommands}
         latest_tag=
       else
@@ -95,4 +105,4 @@ let
   '';
 
 in
-[ updateScript pname version attrPath versionLister rev-prefix odd-unstable patchlevel-unstable ]
+[ updateScript pname version attrPath versionLister ignoredVersions rev-prefix odd-unstable patchlevel-unstable ]
diff --git a/nixpkgs/pkgs/common-updater/scripts.nix b/nixpkgs/pkgs/common-updater/scripts.nix
index 655924e5f28a..739f44387b31 100644
--- a/nixpkgs/pkgs/common-updater/scripts.nix
+++ b/nixpkgs/pkgs/common-updater/scripts.nix
@@ -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
   '';
 }
diff --git a/nixpkgs/pkgs/common-updater/scripts/mark-broken b/nixpkgs/pkgs/common-updater/scripts/mark-broken
new file mode 100755
index 000000000000..d128d0d458ba
--- /dev/null
+++ b/nixpkgs/pkgs/common-updater/scripts/mark-broken
@@ -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"