diff options
author | Robert Hensing <roberth@users.noreply.github.com> | 2022-01-05 12:40:51 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-05 12:40:51 +0100 |
commit | c253b04a2f3435f9535a9c024e5ace6912ffb990 (patch) | |
tree | 446e9a9da6f1f7c4b33dcf3eabbe7229a8e74bfd /lib | |
parent | be52ab786e4df742d186762b531ae20821b7ab93 (diff) | |
parent | f2c5c706f47024fd477655fc34e883ce15172484 (diff) | |
download | nixlib-c253b04a2f3435f9535a9c024e5ace6912ffb990.tar nixlib-c253b04a2f3435f9535a9c024e5ace6912ffb990.tar.gz nixlib-c253b04a2f3435f9535a9c024e5ace6912ffb990.tar.bz2 nixlib-c253b04a2f3435f9535a9c024e5ace6912ffb990.tar.lz nixlib-c253b04a2f3435f9535a9c024e5ace6912ffb990.tar.xz nixlib-c253b04a2f3435f9535a9c024e5ace6912ffb990.tar.zst nixlib-c253b04a2f3435f9535a9c024e5ace6912ffb990.zip |
Merge pull request #151748 from hercules-ci/check-nixpkgs-overlays-type
Check nixpkgs overlays argument types
Diffstat (limited to 'lib')
-rw-r--r-- | lib/default.nix | 3 | ||||
-rw-r--r-- | lib/trivial.nix | 22 |
2 files changed, 24 insertions, 1 deletions
diff --git a/lib/default.nix b/lib/default.nix index 626a751cb10a..fe5d2db0db8f 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -66,7 +66,8 @@ let stringLength sub substring tail trace; inherit (self.trivial) id const pipe concat or and bitAnd bitOr bitXor bitNot boolToString mergeAttrs flip mapNullable inNixShell isFloat min max - importJSON importTOML warn warnIf info showWarnings nixpkgsVersion version + importJSON importTOML warn warnIf throwIfNot + info showWarnings nixpkgsVersion version mod compare splitByAndCompare functionArgs setFunctionArgs isFunction toHexString toBaseDigits; inherit (self.fixedPoints) fix fix' converge extends composeExtensions diff --git a/lib/trivial.nix b/lib/trivial.nix index 33b553ac4191..c961d3aa7301 100644 --- a/lib/trivial.nix +++ b/lib/trivial.nix @@ -325,6 +325,28 @@ rec { */ warnIf = cond: msg: if cond then warn msg else id; + /* + Like the `assert b; e` expression, but with a custom error message and + without the semicolon. + + If true, return the identity function, `r: r`. + + If false, throw the error message. + + Calls can be juxtaposed using function application, as `(r: r) a = a`, so + `(r: r) (r: r) a = a`, and so forth. + + Type: bool -> string -> a -> a + + Example: + + throwIfNot (lib.isList overlays) "The overlays argument to nixpkgs must be a list." + lib.foldr (x: throwIfNot (lib.isFunction x) "All overlays passed to nixpkgs must be functions.") (r: r) overlays + pkgs + + */ + throwIfNot = cond: msg: if cond then x: x else throw msg; + info = msg: builtins.trace "INFO: ${msg}"; showWarnings = warnings: res: lib.foldr (w: x: warn w x) res warnings; |