lib/modules: Don't pack submodules specially
This has the beneficial side effect of allowing paths to be used as modules in types.{submodule,submoduleWith}
This commit is contained in:
parent
5002e6afbc
commit
5414b4018b
|
@ -102,7 +102,7 @@ let
|
||||||
commitIdFromGitRepo cleanSourceWith pathHasContext
|
commitIdFromGitRepo cleanSourceWith pathHasContext
|
||||||
canCleanSource;
|
canCleanSource;
|
||||||
inherit (modules) evalModules closeModules unifyModuleSyntax
|
inherit (modules) evalModules closeModules unifyModuleSyntax
|
||||||
applyIfFunction unpackSubmodule packSubmodule mergeModules
|
applyIfFunction mergeModules
|
||||||
mergeModules' mergeOptionDecls evalOptionValue mergeDefinitions
|
mergeModules' mergeOptionDecls evalOptionValue mergeDefinitions
|
||||||
pushDownProperties dischargeProperties filterOverrides
|
pushDownProperties dischargeProperties filterOverrides
|
||||||
sortProperties fixupOptionType mkIf mkAssert mkMerge mkOverride
|
sortProperties fixupOptionType mkIf mkAssert mkMerge mkOverride
|
||||||
|
|
|
@ -103,7 +103,7 @@ rec {
|
||||||
toClosureList = file: parentKey: imap1 (n: x:
|
toClosureList = file: parentKey: imap1 (n: x:
|
||||||
if isAttrs x || isFunction x then
|
if isAttrs x || isFunction x then
|
||||||
let key = "${parentKey}:anon-${toString n}"; in
|
let key = "${parentKey}:anon-${toString n}"; in
|
||||||
unifyModuleSyntax file key (unpackSubmodule (applyIfFunction key) x args)
|
unifyModuleSyntax file key (applyIfFunction key x args)
|
||||||
else
|
else
|
||||||
let file = toString x; key = toString x; in
|
let file = toString x; key = toString x; in
|
||||||
unifyModuleSyntax file key (applyIfFunction key (import x) args));
|
unifyModuleSyntax file key (applyIfFunction key (import x) args));
|
||||||
|
@ -171,17 +171,6 @@ rec {
|
||||||
else
|
else
|
||||||
f;
|
f;
|
||||||
|
|
||||||
/* We have to pack and unpack submodules. We cannot wrap the expected
|
|
||||||
result of the function as we would no longer be able to list the arguments
|
|
||||||
of the submodule. (see applyIfFunction) */
|
|
||||||
unpackSubmodule = unpack: m: args:
|
|
||||||
if isType "submodule" m then
|
|
||||||
{ _file = m.file; } // (unpack m.submodule args)
|
|
||||||
else unpack m args;
|
|
||||||
|
|
||||||
packSubmodule = file: m:
|
|
||||||
{ _type = "submodule"; file = file; submodule = m; };
|
|
||||||
|
|
||||||
/* Merge a list of modules. This will recurse over the option
|
/* Merge a list of modules. This will recurse over the option
|
||||||
declarations in all modules, combining them into a single set.
|
declarations in all modules, combining them into a single set.
|
||||||
At the same time, for each option declaration, it will merge the
|
At the same time, for each option declaration, it will merge the
|
||||||
|
@ -267,7 +256,14 @@ rec {
|
||||||
|
|
||||||
'opts' is a list of modules. Each module has an options attribute which
|
'opts' is a list of modules. Each module has an options attribute which
|
||||||
correspond to the definition of 'loc' in 'opt.file'. */
|
correspond to the definition of 'loc' in 'opt.file'. */
|
||||||
mergeOptionDecls = loc: opts:
|
mergeOptionDecls =
|
||||||
|
let
|
||||||
|
packSubmodule = file: m:
|
||||||
|
{ _file = file; imports = [ m ]; };
|
||||||
|
coerceOption = file: opt:
|
||||||
|
if isFunction opt then packSubmodule file opt
|
||||||
|
else packSubmodule file { options = opt; };
|
||||||
|
in loc: opts:
|
||||||
foldl' (res: opt:
|
foldl' (res: opt:
|
||||||
let t = res.type;
|
let t = res.type;
|
||||||
t' = opt.options.type;
|
t' = opt.options.type;
|
||||||
|
@ -293,9 +289,7 @@ rec {
|
||||||
current option declaration as the file use for the submodule. If the
|
current option declaration as the file use for the submodule. If the
|
||||||
submodule defines any filename, then we ignore the enclosing option file. */
|
submodule defines any filename, then we ignore the enclosing option file. */
|
||||||
options' = toList opt.options.options;
|
options' = toList opt.options.options;
|
||||||
coerceOption = file: opt:
|
|
||||||
if isFunction opt then packSubmodule file opt
|
|
||||||
else packSubmodule file { options = opt; };
|
|
||||||
getSubModules = opt.options.type.getSubModules or null;
|
getSubModules = opt.options.type.getSubModules or null;
|
||||||
submodules =
|
submodules =
|
||||||
if getSubModules != null then map (packSubmodule opt._file) getSubModules ++ res.options
|
if getSubModules != null then map (packSubmodule opt._file) getSubModules ++ res.options
|
||||||
|
|
Loading…
Reference in New Issue