Give unique keys to submodule components

I'm not wed to the outPath values I chose, other options are probably
valid there too. It would be nice if we could track which file each
merged value came from as well.

Signed-off-by: Shea Levy <shea@shealevy.com>
This commit is contained in:
Shea Levy 2013-06-07 03:42:46 -04:00
parent d465d6764a
commit 6d64b1d92c
2 changed files with 22 additions and 8 deletions

View File

@ -75,12 +75,19 @@ rec {
);
unifyOptionModule = {key ? "<unknown location>"}: m: (args:
let module = lib.applyIfFunction m args; in
if lib.isModule module then
{ inherit key; } // module
unifyOptionModule = {key ? "<unknown location>"}: name: index: m: (args:
let
module = lib.applyIfFunction m args;
key_ = rec {
file = key;
option = name;
number = index;
outPath = "file ${toString file} option ${option} options number ${toString number}";
};
in if lib.isModule module then
{ key = key_; } // module
else
{ inherit key; options = module; }
{ key = key_; options = module; }
);
@ -240,7 +247,7 @@ rec {
decls = # add location to sub-module options.
map (m:
mapSubOptions
(unifyOptionModule {inherit (m) key;})
(unifyOptionModule {inherit (m) key;} name)
m.options
) declarations;

View File

@ -31,7 +31,7 @@ rec {
mapSubOptions = f: opt:
if opt ? options then
opt // {
options = map f (toList opt.options);
options = imap f (toList opt.options);
}
else
opt;
@ -86,7 +86,14 @@ rec {
subModuleMerge = path: vals:
lib.fix (args:
let
result = recurseInto path (opt.options ++ toList vals) args;
result = recurseInto path (opt.options ++ imap (index: v: args: {
key = rec {
#!!! Would be nice if we had the file the val was from
option = path;
number = index;
outPath = "option ${option} config number ${toString number}";
};
} // (lib.applyIfFunction v args)) (toList vals)) args;
name = lib.removePrefix (opt.name + ".") path;
extraArgs = opt.extraArgs or {};
individualExtraArgs = opt.individualExtraArgs or {};