diff options
| -rw-r--r-- | lib/default.nix | 2 | ||||
| -rw-r--r-- | lib/derivations.nix | 36 |
2 files changed, 37 insertions, 1 deletions
diff --git a/lib/default.nix b/lib/default.nix index 3fda156b75a9..5b742b195d34 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -121,7 +121,7 @@ let inherit (self.customisation) overrideDerivation makeOverridable callPackageWith callPackagesWith extendDerivation hydraJob makeScope makeScopeWithSplicing makeScopeWithSplicing'; - inherit (self.derivations) lazyDerivation optionalDrvAttr; + inherit (self.derivations) lazyDerivation optionalDrvAttr warnOnInstantiate; inherit (self.meta) addMetaAttrs dontDistribute setName updateName appendToName mapDerivationAttrset setPrio lowPrio lowPrioSet hiPrio hiPrioSet licensesSpdx getLicenseFromSpdxId getLicenseFromSpdxIdOr diff --git a/lib/derivations.nix b/lib/derivations.nix index 9c3c4639a268..450bd1a0042b 100644 --- a/lib/derivations.nix +++ b/lib/derivations.nix @@ -4,6 +4,8 @@ let inherit (lib) genAttrs isString + mapAttrs + removeAttrs throwIfNot ; @@ -206,4 +208,38 @@ in optionalDrvAttr = cond: value: if cond then value else null; + + /** + Wrap a derivation such that instantiating it produces a warning. + + All attributes apart from `meta`, `name`, and `type` (which are used by + `nix search`) will be wrapped in `lib.warn`. + + # Inputs + + `msg` + : The warning message to emit (via `lib.warn`). + + `drv` + : The derivation to wrap. + + # Examples + :::{.example} + ## `lib.derivations.warnOnInstantiate` usage example + + ```nix + { + myPackage = warnOnInstantiate "myPackage has been renamed to my-package" my-package; + } + ``` + + ::: + */ + warnOnInstantiate = + msg: drv: + let + drvToWrap = removeAttrs drv [ "meta" "name" "type" ]; + in + drv + // mapAttrs (_: lib.warn msg) drvToWrap; } |
