Skip to content

Commit

Permalink
maintainers/scripts/update.nix: Add support for filtering pkgs by pre…
Browse files Browse the repository at this point in the history
…dicate

Arbitrary predicate is useful for updating decentralised package sets like GNOME.
  • Loading branch information
jtojnar committed May 5, 2021
1 parent 7d535ed commit d51a631
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion maintainers/scripts/update.nix
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{ package ? null
, maintainer ? null
, predicate ? null
, path ? null
, max-workers ? null
, include-overlays ? false
Expand Down Expand Up @@ -69,6 +70,11 @@ let
*/
packagesWith = packagesWithPath [];

/* Recursively find all packages in `pkgs` with updateScript matching given predicate.
*/
packagesWithUpdateScriptMatchingPredicate = cond:
packagesWith (path: pkg: builtins.hasAttr "updateScript" pkg && cond path pkg);

/* Recursively find all packages in `pkgs` with updateScript by given maintainer.
*/
packagesWithUpdateScriptAndMaintainer = maintainer':
Expand All @@ -79,7 +85,7 @@ let
else
builtins.getAttr maintainer' lib.maintainers;
in
packagesWith (path: pkg: builtins.hasAttr "updateScript" pkg &&
packagesWithUpdateScriptMatchingPredicate (path: pkg:
(if builtins.hasAttr "maintainers" pkg.meta
then (if builtins.isList pkg.meta.maintainers
then builtins.elem maintainer pkg.meta.maintainers
Expand Down Expand Up @@ -120,6 +126,8 @@ let
packages =
if package != null then
[ (packageByName package pkgs) ]
else if predicate != null then
packagesWithUpdateScriptMatchingPredicate predicate pkgs
else if maintainer != null then
packagesWithUpdateScriptAndMaintainer maintainer pkgs
else if path != null then
Expand All @@ -139,6 +147,10 @@ let
to run update script for specific package, or
% nix-shell maintainers/scripts/update.nix --arg predicate '(path: pkg: builtins.isList pkg.updateScript && builtins.length pkg.updateScript >= 1 && (let script = builtins.head pkg.updateScript; in builtins.isAttrs script && script.name == "gnome-update-script"))'
to run update script for all packages matching given predicate, or
% nix-shell maintainers/scripts/update.nix --argstr path gnome3
to run update script for all package under an attribute path.
Expand Down

0 comments on commit d51a631

Please sign in to comment.