forked from mirrors/nixpkgs
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:
parent
d465d6764a
commit
6d64b1d92c
|
@ -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;
|
||||
|
||||
|
|
|
@ -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 {};
|
||||
|
|
Loading…
Reference in a new issue