summary refs log tree commit diff
path: root/lib/modules.nix
diff options
context:
space:
mode:
authorSilvan Mosberger <contact@infinisil.com>2020-03-16 21:10:05 +0100
committerSilvan Mosberger <contact@infinisil.com>2020-03-18 04:38:53 +0100
commite931de58a2f724c3632b7c8a656fb47489ecc963 (patch)
tree1b56b24a3d4b0655e2ef3de6964e8e6203ea346f /lib/modules.nix
parent15c873b486347e7861c64fb0b5a7852be9fc82e4 (diff)
downloadnixpkgs-e931de58a2f724c3632b7c8a656fb47489ecc963.tar
nixpkgs-e931de58a2f724c3632b7c8a656fb47489ecc963.tar.gz
nixpkgs-e931de58a2f724c3632b7c8a656fb47489ecc963.tar.bz2
nixpkgs-e931de58a2f724c3632b7c8a656fb47489ecc963.tar.lz
nixpkgs-e931de58a2f724c3632b7c8a656fb47489ecc963.tar.xz
nixpkgs-e931de58a2f724c3632b7c8a656fb47489ecc963.tar.zst
nixpkgs-e931de58a2f724c3632b7c8a656fb47489ecc963.zip
lib/modules: Fix type checks not being done before merging
Co-Authored-By: Robert Hensing <robert@roberthensing.nl>
Diffstat (limited to 'lib/modules.nix')
-rw-r--r--lib/modules.nix7
1 files changed, 3 insertions, 4 deletions
diff --git a/lib/modules.nix b/lib/modules.nix
index 22df89f360a..518f4047cc6 100644
--- a/lib/modules.nix
+++ b/lib/modules.nix
@@ -416,10 +416,9 @@ rec {
     # Type-check the remaining definitions, and merge them. Or throw if no definitions.
     mergedValue =
       if isDefined then
-        foldl' (res: def:
-          if type.check def.value then res
-          else throw "The option value `${showOption loc}' in `${def.file}' is not of type `${type.description}'."
-        ) (type.merge loc defsFinal) defsFinal
+        if all (def: type.check def.value) defsFinal then type.merge loc defsFinal
+        else let firstInvalid = findFirst (def: ! type.check def.value) null defsFinal;
+        in throw "The option value `${showOption loc}' in `${firstInvalid.file}' is not of type `${type.description}'."
       else
         # (nixos-option detects this specific error message and gives it special
         # handling.  If changed here, please change it there too.)