lib/modules: Make unifyModuleSyntax fully idempotent

Because why not
This commit is contained in:
Silvan Mosberger 2019-12-05 05:15:17 +01:00
parent aa613427b7
commit 3cc77ce756
No known key found for this signature in database
GPG key ID: E8F1E9EAD284E17D

View file

@ -116,9 +116,9 @@ rec {
/* Massage a module into canonical form, that is, a set consisting /* Massage a module into canonical form, that is, a set consisting
of options, config and imports attributes. */ of options, config and imports attributes. */
unifyModuleSyntax = file: key: m: unifyModuleSyntax = file: key: m:
let metaSet = if m ? meta let addMeta = config: if m ? meta
then { meta = m.meta; } then mkMerge [ config { meta = m.meta; } ]
else {}; else config;
in in
if m ? config || m ? options then if m ? config || m ? options then
let badAttrs = removeAttrs m ["_file" "key" "disabledModules" "imports" "options" "config" "meta"]; in let badAttrs = removeAttrs m ["_file" "key" "disabledModules" "imports" "options" "config" "meta"]; in
@ -130,7 +130,7 @@ rec {
disabledModules = m.disabledModules or []; disabledModules = m.disabledModules or [];
imports = m.imports or []; imports = m.imports or [];
options = m.options or {}; options = m.options or {};
config = mkMerge [ (m.config or {}) metaSet ]; config = addMeta (m.config or {});
} }
else else
{ _file = m._file or file; { _file = m._file or file;
@ -138,7 +138,7 @@ rec {
disabledModules = m.disabledModules or []; disabledModules = m.disabledModules or [];
imports = m.require or [] ++ m.imports or []; imports = m.require or [] ++ m.imports or [];
options = {}; options = {};
config = mkMerge [ (removeAttrs m ["_file" "key" "disabledModules" "require" "imports"]) metaSet ]; config = addMeta (removeAttrs m ["_file" "key" "disabledModules" "require" "imports"]);
}; };
applyIfFunction = key: f: args@{ config, options, lib, ... }: if isFunction f then applyIfFunction = key: f: args@{ config, options, lib, ... }: if isFunction f then