summary refs log tree commit diff
path: root/lib
diff options
context:
space:
mode:
authorFrederik Rietdijk <fridh@fridh.nl>2018-05-13 12:13:25 +0200
committerFrederik Rietdijk <fridh@fridh.nl>2018-05-13 12:13:25 +0200
commit658b7c3f2ebb7d04d950b95ce81cd5fea2a03141 (patch)
treefdcfa83f21b9c98315a3a751ef4d27772976589a /lib
parentf14841f3ce734b27988a605fc9775a035d313d23 (diff)
parenta2981671523416ad5c9a49de8c16ac8fccb2306b (diff)
downloadnixpkgs-658b7c3f2ebb7d04d950b95ce81cd5fea2a03141.tar
nixpkgs-658b7c3f2ebb7d04d950b95ce81cd5fea2a03141.tar.gz
nixpkgs-658b7c3f2ebb7d04d950b95ce81cd5fea2a03141.tar.bz2
nixpkgs-658b7c3f2ebb7d04d950b95ce81cd5fea2a03141.tar.lz
nixpkgs-658b7c3f2ebb7d04d950b95ce81cd5fea2a03141.tar.xz
nixpkgs-658b7c3f2ebb7d04d950b95ce81cd5fea2a03141.tar.zst
nixpkgs-658b7c3f2ebb7d04d950b95ce81cd5fea2a03141.zip
Merge master into staging
Diffstat (limited to 'lib')
-rw-r--r--lib/modules.nix27
1 files changed, 19 insertions, 8 deletions
diff --git a/lib/modules.nix b/lib/modules.nix
index 6c8033322a5..41a5fb89fde 100644
--- a/lib/modules.nix
+++ b/lib/modules.nix
@@ -310,6 +310,7 @@ rec {
 
     in opt //
       { value = builtins.addErrorContext "while evaluating the option `${showOption loc}':" value;
+        inherit (res.defsFinal') highestPrio;
         definitions = map (def: def.value) res.defsFinal;
         files = map (def: def.file) res.defsFinal;
         inherit (res) isDefined;
@@ -317,7 +318,7 @@ rec {
 
   # Merge definitions of a value of a given type.
   mergeDefinitions = loc: type: defs: rec {
-    defsFinal =
+    defsFinal' =
       let
         # Process mkMerge and mkIf properties.
         defs' = concatMap (m:
@@ -325,15 +326,20 @@ rec {
         ) defs;
 
         # Process mkOverride properties.
-        defs'' = filterOverrides defs';
+        defs'' = filterOverrides' defs';
 
         # Sort mkOrder properties.
         defs''' =
           # Avoid sorting if we don't have to.
-          if any (def: def.value._type or "" == "order") defs''
-          then sortProperties defs''
-          else defs'';
-      in defs''';
+          if any (def: def.value._type or "" == "order") defs''.values
+          then sortProperties defs''.values
+          else defs''.values;
+      in {
+        values = defs''';
+        inherit (defs'') highestPrio;
+      };
+
+    defsFinal = defsFinal'.values;
 
     # Type-check the remaining definitions, and merge them.
     mergedValue = foldl' (res: def:
@@ -416,13 +422,18 @@ rec {
 
      Note that "z" has the default priority 100.
   */
-  filterOverrides = defs:
+  filterOverrides = defs: (filterOverrides' defs).values;
+
+  filterOverrides' = defs:
     let
       defaultPrio = 100;
       getPrio = def: if def.value._type or "" == "override" then def.value.priority else defaultPrio;
       highestPrio = foldl' (prio: def: min (getPrio def) prio) 9999 defs;
       strip = def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def;
-    in concatMap (def: if getPrio def == highestPrio then [(strip def)] else []) defs;
+    in {
+      values = concatMap (def: if getPrio def == highestPrio then [(strip def)] else []) defs;
+      inherit highestPrio;
+    };
 
   /* Sort a list of properties.  The sort priority of a property is
      1000 by default, but can be overridden by wrapping the property