diff options
author | Frederik Rietdijk <fridh@fridh.nl> | 2020-01-07 20:06:22 +0100 |
---|---|---|
committer | Frederik Rietdijk <fridh@fridh.nl> | 2020-01-07 20:06:22 +0100 |
commit | a823616723c44700a1c976fee77aafb470388e19 (patch) | |
tree | 08c996bb7f020cda3aa27ef881b61b0d3807b383 /lib | |
parent | 7f8111955082b4aa7dce2718b9ef4d8ad0f4584b (diff) | |
parent | c425a7e694ef48513e35b60a124587ef382b2fa6 (diff) | |
download | nixpkgs-a823616723c44700a1c976fee77aafb470388e19.tar nixpkgs-a823616723c44700a1c976fee77aafb470388e19.tar.gz nixpkgs-a823616723c44700a1c976fee77aafb470388e19.tar.bz2 nixpkgs-a823616723c44700a1c976fee77aafb470388e19.tar.lz nixpkgs-a823616723c44700a1c976fee77aafb470388e19.tar.xz nixpkgs-a823616723c44700a1c976fee77aafb470388e19.tar.zst nixpkgs-a823616723c44700a1c976fee77aafb470388e19.zip |
Merge master into staging-next
Diffstat (limited to 'lib')
24 files changed, 89 insertions, 117 deletions
diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh index da8c02e35ba..f69befd15c6 100755 --- a/lib/tests/modules.sh +++ b/lib/tests/modules.sh @@ -87,36 +87,36 @@ checkConfigOutput "false" "$@" ./define-force-enable.nix checkConfigOutput "false" "$@" ./define-enable-force.nix # Check mkForce with option and submodules. -checkConfigError 'attribute .*foo.* .* not found' config.loaOfSub.foo.enable ./declare-loaOfSub-any-enable.nix -checkConfigOutput 'false' config.loaOfSub.foo.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix -set -- config.loaOfSub.foo.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo-enable.nix +checkConfigError 'attribute .*foo.* .* not found' config.attrsOfSub.foo.enable ./declare-attrsOfSub-any-enable.nix +checkConfigOutput 'false' config.attrsOfSub.foo.enable ./declare-attrsOfSub-any-enable.nix ./define-attrsOfSub-foo.nix +set -- config.attrsOfSub.foo.enable ./declare-attrsOfSub-any-enable.nix ./define-attrsOfSub-foo-enable.nix checkConfigOutput 'true' "$@" -checkConfigOutput 'false' "$@" ./define-force-loaOfSub-foo-enable.nix -checkConfigOutput 'false' "$@" ./define-loaOfSub-force-foo-enable.nix -checkConfigOutput 'false' "$@" ./define-loaOfSub-foo-force-enable.nix -checkConfigOutput 'false' "$@" ./define-loaOfSub-foo-enable-force.nix +checkConfigOutput 'false' "$@" ./define-force-attrsOfSub-foo-enable.nix +checkConfigOutput 'false' "$@" ./define-attrsOfSub-force-foo-enable.nix +checkConfigOutput 'false' "$@" ./define-attrsOfSub-foo-force-enable.nix +checkConfigOutput 'false' "$@" ./define-attrsOfSub-foo-enable-force.nix # Check overriding effect of mkForce on submodule definitions. -checkConfigError 'attribute .*bar.* .* not found' config.loaOfSub.bar.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix -checkConfigOutput 'false' config.loaOfSub.bar.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix ./define-loaOfSub-bar.nix -set -- config.loaOfSub.bar.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix ./define-loaOfSub-bar-enable.nix +checkConfigError 'attribute .*bar.* .* not found' config.attrsOfSub.bar.enable ./declare-attrsOfSub-any-enable.nix ./define-attrsOfSub-foo.nix +checkConfigOutput 'false' config.attrsOfSub.bar.enable ./declare-attrsOfSub-any-enable.nix ./define-attrsOfSub-foo.nix ./define-attrsOfSub-bar.nix +set -- config.attrsOfSub.bar.enable ./declare-attrsOfSub-any-enable.nix ./define-attrsOfSub-foo.nix ./define-attrsOfSub-bar-enable.nix checkConfigOutput 'true' "$@" -checkConfigError 'attribute .*bar.* .* not found' "$@" ./define-force-loaOfSub-foo-enable.nix -checkConfigError 'attribute .*bar.* .* not found' "$@" ./define-loaOfSub-force-foo-enable.nix -checkConfigOutput 'true' "$@" ./define-loaOfSub-foo-force-enable.nix -checkConfigOutput 'true' "$@" ./define-loaOfSub-foo-enable-force.nix +checkConfigError 'attribute .*bar.* .* not found' "$@" ./define-force-attrsOfSub-foo-enable.nix +checkConfigError 'attribute .*bar.* .* not found' "$@" ./define-attrsOfSub-force-foo-enable.nix +checkConfigOutput 'true' "$@" ./define-attrsOfSub-foo-force-enable.nix +checkConfigOutput 'true' "$@" ./define-attrsOfSub-foo-enable-force.nix # Check mkIf with submodules. -checkConfigError 'attribute .*foo.* .* not found' config.loaOfSub.foo.enable ./declare-enable.nix ./declare-loaOfSub-any-enable.nix -set -- config.loaOfSub.foo.enable ./declare-enable.nix ./declare-loaOfSub-any-enable.nix -checkConfigError 'attribute .*foo.* .* not found' "$@" ./define-if-loaOfSub-foo-enable.nix -checkConfigError 'attribute .*foo.* .* not found' "$@" ./define-loaOfSub-if-foo-enable.nix -checkConfigError 'attribute .*foo.* .* not found' "$@" ./define-loaOfSub-foo-if-enable.nix -checkConfigOutput 'false' "$@" ./define-loaOfSub-foo-enable-if.nix -checkConfigOutput 'true' "$@" ./define-enable.nix ./define-if-loaOfSub-foo-enable.nix -checkConfigOutput 'true' "$@" ./define-enable.nix ./define-loaOfSub-if-foo-enable.nix -checkConfigOutput 'true' "$@" ./define-enable.nix ./define-loaOfSub-foo-if-enable.nix -checkConfigOutput 'true' "$@" ./define-enable.nix ./define-loaOfSub-foo-enable-if.nix +checkConfigError 'attribute .*foo.* .* not found' config.attrsOfSub.foo.enable ./declare-enable.nix ./declare-attrsOfSub-any-enable.nix +set -- config.attrsOfSub.foo.enable ./declare-enable.nix ./declare-attrsOfSub-any-enable.nix +checkConfigError 'attribute .*foo.* .* not found' "$@" ./define-if-attrsOfSub-foo-enable.nix +checkConfigError 'attribute .*foo.* .* not found' "$@" ./define-attrsOfSub-if-foo-enable.nix +checkConfigError 'attribute .*foo.* .* not found' "$@" ./define-attrsOfSub-foo-if-enable.nix +checkConfigOutput 'false' "$@" ./define-attrsOfSub-foo-enable-if.nix +checkConfigOutput 'true' "$@" ./define-enable.nix ./define-if-attrsOfSub-foo-enable.nix +checkConfigOutput 'true' "$@" ./define-enable.nix ./define-attrsOfSub-if-foo-enable.nix +checkConfigOutput 'true' "$@" ./define-enable.nix ./define-attrsOfSub-foo-if-enable.nix +checkConfigOutput 'true' "$@" ./define-enable.nix ./define-attrsOfSub-foo-enable-if.nix # Check disabledModules with config definitions and option declarations. set -- config.enable ./define-enable.nix ./declare-enable.nix @@ -138,7 +138,7 @@ checkConfigError 'while evaluating the module argument .*custom.* in .*import-cu checkConfigError 'infinite recursion encountered' "$@" # Check _module.check. -set -- config.enable ./declare-enable.nix ./define-enable.nix ./define-loaOfSub-foo.nix +set -- config.enable ./declare-enable.nix ./define-enable.nix ./define-attrsOfSub-foo.nix checkConfigError 'The option .* defined in .* does not exist.' "$@" checkConfigOutput "true" "$@" ./define-module-check.nix @@ -152,12 +152,6 @@ checkConfigOutput "12" config.value ./declare-coerced-value-unsound.nix checkConfigError 'The option value .* in .* is not.*8 bit signed integer.* or string convertible to it' config.value ./declare-coerced-value-unsound.nix ./define-value-string-bigint.nix checkConfigError 'unrecognised JSON value' config.value ./declare-coerced-value-unsound.nix ./define-value-string-arbitrary.nix -# Check loaOf with long list. -checkConfigOutput "1 2 3 4 5 6 7 8 9 10" config.result ./loaOf-with-long-list.nix - -# Check loaOf with many merges of lists. -checkConfigOutput "1 2 3 4 5 6 7 8 9 10" config.result ./loaOf-with-many-list-merges.nix - # Check mkAliasOptionModule. checkConfigOutput "true" config.enable ./alias-with-priority.nix checkConfigOutput "true" config.enableAlias ./alias-with-priority.nix diff --git a/lib/tests/modules/declare-loaOfSub-any-enable.nix b/lib/tests/modules/declare-attrsOfSub-any-enable.nix index 71dad1c9135..986d07227e1 100644 --- a/lib/tests/modules/declare-loaOfSub-any-enable.nix +++ b/lib/tests/modules/declare-attrsOfSub-any-enable.nix @@ -17,10 +17,10 @@ in { options = { - loaOfSub = lib.mkOption { + attrsOfSub = lib.mkOption { default = {}; example = {}; - type = lib.types.loaOf (lib.types.submodule [ submod ]); + type = lib.types.attrsOf (lib.types.submodule [ submod ]); description = '' Some descriptive text ''; diff --git a/lib/tests/modules/define-attrsOfSub-bar-enable.nix b/lib/tests/modules/define-attrsOfSub-bar-enable.nix new file mode 100644 index 00000000000..99c55d8b360 --- /dev/null +++ b/lib/tests/modules/define-attrsOfSub-bar-enable.nix @@ -0,0 +1,3 @@ +{ + attrsOfSub.bar.enable = true; +} diff --git a/lib/tests/modules/define-attrsOfSub-bar.nix b/lib/tests/modules/define-attrsOfSub-bar.nix new file mode 100644 index 00000000000..2a33068a568 --- /dev/null +++ b/lib/tests/modules/define-attrsOfSub-bar.nix @@ -0,0 +1,3 @@ +{ + attrsOfSub.bar = {}; +} diff --git a/lib/tests/modules/define-attrsOfSub-foo-enable-force.nix b/lib/tests/modules/define-attrsOfSub-foo-enable-force.nix new file mode 100644 index 00000000000..c9ee36446f1 --- /dev/null +++ b/lib/tests/modules/define-attrsOfSub-foo-enable-force.nix @@ -0,0 +1,5 @@ +{ lib, ... }: + +{ + attrsOfSub.foo.enable = lib.mkForce false; +} diff --git a/lib/tests/modules/define-attrsOfSub-foo-enable-if.nix b/lib/tests/modules/define-attrsOfSub-foo-enable-if.nix new file mode 100644 index 00000000000..0b3baddb5ec --- /dev/null +++ b/lib/tests/modules/define-attrsOfSub-foo-enable-if.nix @@ -0,0 +1,5 @@ +{ config, lib, ... }: + +{ + attrsOfSub.foo.enable = lib.mkIf config.enable true; +} diff --git a/lib/tests/modules/define-attrsOfSub-foo-enable.nix b/lib/tests/modules/define-attrsOfSub-foo-enable.nix new file mode 100644 index 00000000000..39cd63cef72 --- /dev/null +++ b/lib/tests/modules/define-attrsOfSub-foo-enable.nix @@ -0,0 +1,3 @@ +{ + attrsOfSub.foo.enable = true; +} diff --git a/lib/tests/modules/define-loaOfSub-foo-force-enable.nix b/lib/tests/modules/define-attrsOfSub-foo-force-enable.nix index dce0ef547b3..009da7c77cd 100644 --- a/lib/tests/modules/define-loaOfSub-foo-force-enable.nix +++ b/lib/tests/modules/define-attrsOfSub-foo-force-enable.nix @@ -1,7 +1,7 @@ { lib, ... }: { - loaOfSub.foo = lib.mkForce { + attrsOfSub.foo = lib.mkForce { enable = false; }; } diff --git a/lib/tests/modules/define-loaOfSub-foo-if-enable.nix b/lib/tests/modules/define-attrsOfSub-foo-if-enable.nix index 236b2840ee5..93702dfa86f 100644 --- a/lib/tests/modules/define-loaOfSub-foo-if-enable.nix +++ b/lib/tests/modules/define-attrsOfSub-foo-if-enable.nix @@ -1,7 +1,7 @@ { config, lib, ... }: { - loaOfSub.foo = lib.mkIf config.enable { + attrsOfSub.foo = lib.mkIf config.enable { enable = true; }; } diff --git a/lib/tests/modules/define-attrsOfSub-foo.nix b/lib/tests/modules/define-attrsOfSub-foo.nix new file mode 100644 index 00000000000..e6bb531dedd --- /dev/null +++ b/lib/tests/modules/define-attrsOfSub-foo.nix @@ -0,0 +1,3 @@ +{ + attrsOfSub.foo = {}; +} diff --git a/lib/tests/modules/define-loaOfSub-force-foo-enable.nix b/lib/tests/modules/define-attrsOfSub-force-foo-enable.nix index df5722274ee..5c02dd34314 100644 --- a/lib/tests/modules/define-loaOfSub-force-foo-enable.nix +++ b/lib/tests/modules/define-attrsOfSub-force-foo-enable.nix @@ -1,7 +1,7 @@ { lib, ... }: { - loaOfSub = lib.mkForce { + attrsOfSub = lib.mkForce { foo.enable = false; }; } diff --git a/lib/tests/modules/define-loaOfSub-if-foo-enable.nix b/lib/tests/modules/define-attrsOfSub-if-foo-enable.nix index bd2d068d31a..a3fe6051d41 100644 --- a/lib/tests/modules/define-loaOfSub-if-foo-enable.nix +++ b/lib/tests/modules/define-attrsOfSub-if-foo-enable.nix @@ -1,7 +1,7 @@ { config, lib, ... }: { - loaOfSub = lib.mkIf config.enable { + attrsOfSub = lib.mkIf config.enable { foo.enable = true; }; } diff --git a/lib/tests/modules/define-force-attrsOfSub-foo-enable.nix b/lib/tests/modules/define-force-attrsOfSub-foo-enable.nix new file mode 100644 index 00000000000..dafb2360e1f --- /dev/null +++ b/lib/tests/modules/define-force-attrsOfSub-foo-enable.nix @@ -0,0 +1,5 @@ +{ lib, ... }: + +lib.mkForce { + attrsOfSub.foo.enable = false; +} diff --git a/lib/tests/modules/define-force-loaOfSub-foo-enable.nix b/lib/tests/modules/define-force-loaOfSub-foo-enable.nix deleted file mode 100644 index bfd8e084b59..00000000000 --- a/lib/tests/modules/define-force-loaOfSub-foo-enable.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ lib, ... }: - -lib.mkForce { - loaOfSub.foo.enable = false; -} diff --git a/lib/tests/modules/define-if-loaOfSub-foo-enable.nix b/lib/tests/modules/define-if-attrsOfSub-foo-enable.nix index 4288d74dec0..6a8e32e802a 100644 --- a/lib/tests/modules/define-if-loaOfSub-foo-enable.nix +++ b/lib/tests/modules/define-if-attrsOfSub-foo-enable.nix @@ -1,5 +1,5 @@ { config, lib, ... }: lib.mkIf config.enable { - loaOfSub.foo.enable = true; + attrsOfSub.foo.enable = true; } diff --git a/lib/tests/modules/define-loaOfSub-bar-enable.nix b/lib/tests/modules/define-loaOfSub-bar-enable.nix deleted file mode 100644 index 422bb0a600b..00000000000 --- a/lib/tests/modules/define-loaOfSub-bar-enable.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - loaOfSub.bar.enable = true; -} diff --git a/lib/tests/modules/define-loaOfSub-bar.nix b/lib/tests/modules/define-loaOfSub-bar.nix deleted file mode 100644 index c24315e09b6..00000000000 --- a/lib/tests/modules/define-loaOfSub-bar.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - loaOfSub.bar = {}; -} diff --git a/lib/tests/modules/define-loaOfSub-foo-enable-force.nix b/lib/tests/modules/define-loaOfSub-foo-enable-force.nix deleted file mode 100644 index c1d7b198be5..00000000000 --- a/lib/tests/modules/define-loaOfSub-foo-enable-force.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ lib, ... }: - -{ - loaOfSub.foo.enable = lib.mkForce false; -} diff --git a/lib/tests/modules/define-loaOfSub-foo-enable-if.nix b/lib/tests/modules/define-loaOfSub-foo-enable-if.nix deleted file mode 100644 index 44b2c96cd02..00000000000 --- a/lib/tests/modules/define-loaOfSub-foo-enable-if.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ config, lib, ... }: - -{ - loaOfSub.foo.enable = lib.mkIf config.enable true; -} diff --git a/lib/tests/modules/define-loaOfSub-foo-enable.nix b/lib/tests/modules/define-loaOfSub-foo-enable.nix deleted file mode 100644 index 822425c71bb..00000000000 --- a/lib/tests/modules/define-loaOfSub-foo-enable.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - loaOfSub.foo.enable = true; -} diff --git a/lib/tests/modules/define-loaOfSub-foo.nix b/lib/tests/modules/define-loaOfSub-foo.nix deleted file mode 100644 index e9b2e631f2e..00000000000 --- a/lib/tests/modules/define-loaOfSub-foo.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - loaOfSub.foo = {}; -} diff --git a/lib/tests/modules/loaOf-with-long-list.nix b/lib/tests/modules/loaOf-with-long-list.nix deleted file mode 100644 index f30903c47e5..00000000000 --- a/lib/tests/modules/loaOf-with-long-list.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ config, lib, ... }: - -{ - options = { - loaOfInt = lib.mkOption { - type = lib.types.loaOf lib.types.int; - }; - - result = lib.mkOption { - type = lib.types.str; - }; - }; - - config = { - loaOfInt = [ 1 2 3 4 5 6 7 8 9 10 ]; - - result = toString (lib.attrValues config.loaOfInt); - }; -} diff --git a/lib/tests/modules/loaOf-with-many-list-merges.nix b/lib/tests/modules/loaOf-with-many-list-merges.nix deleted file mode 100644 index f8f8a8da82b..00000000000 --- a/lib/tests/modules/loaOf-with-many-list-merges.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ config, lib, ... }: - -{ - options = { - loaOfInt = lib.mkOption { - type = lib.types.loaOf lib.types.int; - }; - - result = lib.mkOption { - type = lib.types.str; - }; - }; - - config = { - loaOfInt = lib.mkMerge (map lib.singleton [ 1 2 3 4 5 6 7 8 9 10 ]); - - result = toString (lib.attrValues config.loaOfInt); - }; -} diff --git a/lib/types.nix b/lib/types.nix index de3c4f0d603..4872a676657 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -242,8 +242,7 @@ rec { path = mkOptionType { name = "path"; - # Hacky: there is no ‘isPath’ primop. - check = x: builtins.substring 0 1 (toString x) == "/"; + check = x: isCoercibleToString x && builtins.substring 0 1 (toString x) == "/"; merge = mergeEqualOption; }; @@ -295,26 +294,43 @@ rec { # List or attribute set of ... loaOf = elemType: let - convertAllLists = defs: + convertAllLists = loc: defs: let padWidth = stringLength (toString (length defs)); unnamedPrefix = i: "unnamed-" + fixedWidthNumber padWidth i + "."; in - imap1 (i: convertIfList (unnamedPrefix i)) defs; - - convertIfList = unnamedPrefix: def: + imap1 (i: convertIfList loc (unnamedPrefix i)) defs; + convertIfList = loc: unnamedPrefix: def: if isList def.value then let padWidth = stringLength (toString (length def.value)); unnamed = i: unnamedPrefix + fixedWidthNumber padWidth i; + res = + { inherit (def) file; + value = listToAttrs ( + imap1 (elemIdx: elem: + { name = elem.name or (unnamed elemIdx); + value = elem; + }) def.value); + }; + option = concatStringsSep "." loc; + sample = take 3 def.value; + list = concatMapStrings (x: ''{ name = "${x.name or "unnamed"}"; ...} '') sample; + set = concatMapStrings (x: ''${x.name or "unnamed"} = {...}; '') sample; + msg = '' + In file ${def.file} + a list is being assigned to the option config.${option}. + This will soon be an error as type loaOf is deprecated. + See https://git.io/fj2zm for more information. + Do + ${option} = + { ${set}...} + instead of + ${option} = + [ ${list}...] + ''; in - { inherit (def) file; - value = listToAttrs ( - imap1 (elemIdx: elem: - { name = elem.name or (unnamed elemIdx); - value = elem; - }) def.value); - } + lib.warn msg res else def; attrOnly = attrsOf elemType; @@ -322,7 +338,7 @@ rec { name = "loaOf"; description = "list or attribute set of ${elemType.description}s"; check = x: isList x || isAttrs x; - merge = loc: defs: attrOnly.merge loc (convertAllLists defs); + merge = loc: defs: attrOnly.merge loc (convertAllLists loc defs); getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["<name?>"]); getSubModules = elemType.getSubModules; substSubModules = m: loaOf (elemType.substSubModules m); |