From 4f1249e46fb816cfd299ae27385a63746f914c3f Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Tue, 23 Nov 2021 16:31:17 +0300 Subject: refactor(readTree): Move 'drvTargets' into readTree This function is also generally useful for readTree consumers that have the concept of subtargets. Change-Id: Ic7fc03380dec6953fb288763a28e50ab3624d233 --- nix/readTree/default.nix | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'nix/readTree/default.nix') diff --git a/nix/readTree/default.nix b/nix/readTree/default.nix index 5e805b5f4a97..2ad8e40f6c28 100644 --- a/nix/readTree/default.nix +++ b/nix/readTree/default.nix @@ -157,6 +157,10 @@ let }) (node.meta.targets or [])) else []; + + # Determine whether a given value is a derivation. + # Copied from nixpkgs/lib for cases where lib is not available yet. + isDerivation = x: isAttrs x && x ? type && x.type == "derivation"; in { inherit gather; @@ -210,4 +214,17 @@ in { # # It is often required to create the args attribute set. fix = f: let x = f x; in x; + + # Takes an attribute set and adds a meta.targets attribute to it + # which contains all direct children of the attribute set which are + # derivations. + # + # Type: attrs -> attrs + drvTargets = attrs: attrs // { + meta = { + targets = builtins.filter + (x: isDerivation attrs."${x}") + (builtins.attrNames attrs); + } // (attrs.meta or {}); + }; } -- cgit 1.4.1