mirror of
https://github.com/hercules-ci/flake-parts.git
synced 2024-12-14 11:47:31 +00:00
perSystem: Check that inputs'.<name> is a flake, for better error message
The alternative would have been to try and make this not an evaluation error, but that would cause problems. Idea: use filterAttrs to construct an attrset "inputFlakes". This would be bad because it requires that we evaluate all inputs, just to see whether they're flakes or not. If Nix were to provide this metadata independently, which it could do very efficiently, we still ought to wonder what's the purpose of eliding those attributes. The only ways you'll encounter this exception in `inputs'.<broken>` is by either - making a mistake, in which case the error message is great - or traversing all inputs, which nobody should do. See https://flake.parts/best-practices-for-module-writing#do-not-traverse-inputs Other idea: return *something empty*. This avoids the strictness problem above, but still optimizes for the wrong use case. Ultimately though, attribute transposition should not be needed at all, but this project is largely dependent on the implicit schema imposed by Nix.
This commit is contained in:
parent
ac5d0b2d4d
commit
3a0408e3ac
1 changed files with 18 additions and 2 deletions
|
@ -6,6 +6,9 @@ let
|
|||
mkOption
|
||||
types
|
||||
;
|
||||
inherit (lib.strings)
|
||||
escapeNixIdentifier
|
||||
;
|
||||
inherit (flake-parts-lib)
|
||||
mkPerSystemType
|
||||
;
|
||||
|
@ -92,8 +95,21 @@ in
|
|||
type = mkPerSystemType ({ config, system, ... }: {
|
||||
_file = ./perSystem.nix;
|
||||
config = {
|
||||
_module.args.inputs' = mapAttrs (k: rootConfig.perInput system) self.inputs;
|
||||
_module.args.self' = rootConfig.perInput system self;
|
||||
_module.args.inputs' =
|
||||
mapAttrs
|
||||
(inputName: input:
|
||||
builtins.addErrorContext "while retrieving system-dependent attributes for input ${escapeNixIdentifier inputName}" (
|
||||
if input._type or null == "flake"
|
||||
then rootConfig.perInput system input
|
||||
else
|
||||
throw "Trying to retrieve system-dependent attributes for input ${escapeNixIdentifier inputName}, but this input is not a flake. Perhaps flake = false was added to the input declarations by mistake, or you meant to use a different input, or you meant to use plain old inputs, not inputs'."
|
||||
)
|
||||
)
|
||||
self.inputs;
|
||||
_module.args.self' =
|
||||
builtins.addErrorContext "while retrieving system-dependent attributes for a flake's own outputs" (
|
||||
rootConfig.perInput system self
|
||||
);
|
||||
|
||||
# Custom error messages
|
||||
_module.args.self = throwAliasError' "self";
|
||||
|
|
Loading…
Reference in a new issue