diff options
author | Robert Hensing <robert@roberthensing.nl> | 2021-12-22 13:05:55 +0100 |
---|---|---|
committer | Robert Hensing <robert@roberthensing.nl> | 2021-12-22 13:13:50 +0100 |
commit | f2c5c706f47024fd477655fc34e883ce15172484 (patch) | |
tree | 167d3c3fa974291e9f24ead0d1ba473cdbfb316f | |
parent | cf73196411928e1dfc6784a8a1c67a467533af4c (diff) | |
download | nixpkgs-f2c5c706f47024fd477655fc34e883ce15172484.tar nixpkgs-f2c5c706f47024fd477655fc34e883ce15172484.tar.gz nixpkgs-f2c5c706f47024fd477655fc34e883ce15172484.tar.bz2 nixpkgs-f2c5c706f47024fd477655fc34e883ce15172484.tar.lz nixpkgs-f2c5c706f47024fd477655fc34e883ce15172484.tar.xz nixpkgs-f2c5c706f47024fd477655fc34e883ce15172484.tar.zst nixpkgs-f2c5c706f47024fd477655fc34e883ce15172484.zip |
lib.throwIfNot: init
-rw-r--r-- | lib/default.nix | 3 | ||||
-rw-r--r-- | lib/trivial.nix | 22 | ||||
-rw-r--r-- | pkgs/top-level/default.nix | 2 |
3 files changed, 25 insertions, 2 deletions
diff --git a/lib/default.nix b/lib/default.nix index 626a751cb10..fe5d2db0db8 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 33b553ac419..c961d3aa730 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; diff --git a/pkgs/top-level/default.nix b/pkgs/top-level/default.nix index 10d0c79b212..e95a0db78c3 100644 --- a/pkgs/top-level/default.nix +++ b/pkgs/top-level/default.nix @@ -49,7 +49,7 @@ let # Rename the function arguments in let lib = import ../../lib; - throwIfNot = b: msg: if b then x: x else throw msg; + inherit (lib) throwIfNot; checked = throwIfNot (lib.isList overlays) "The overlays argument to nixpkgs must be a list." |