Merge pull request #32521 from obsidiansystems/fix-splice

top-level: Fix splicing in the presence of evaluation errors
This commit is contained in:
John Ericson 2017-12-10 13:34:24 -05:00 committed by GitHub
commit b0114725f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -37,12 +37,15 @@ let
inherit name;
value = let
defaultValue = mash.${name};
buildValue = buildPkgs.${name} or {};
runValue = runPkgs.${name} or {};
buildValue = buildPkgs.${name};
runValue = runPkgs.${name};
augmentedValue = defaultValue
// (lib.optionalAttrs (buildPkgs ? ${name}) { nativeDrv = buildValue; })
// (lib.optionalAttrs (runPkgs ? ${name}) { crossDrv = runValue; });
# Get the set of outputs of a derivation
tryGetOutputs = value0: let
eval = builtins.tryEval value0;
in getOutputs (if eval.success then eval.value else {});
getOutputs = value: lib.genAttrs
(value.outputs or (lib.optional (value ? out) "out"))
(output: value.${output});
@ -54,7 +57,7 @@ let
# The derivation along with its outputs, which we recur
# on to splice them together.
else if lib.isDerivation defaultValue then augmentedValue
// splicer (getOutputs buildValue) (getOutputs runValue)
// splicer (tryGetOutputs buildValue) (getOutputs runValue)
# Just recur on plain attrsets
else if lib.isAttrs defaultValue then splicer buildValue runValue
# Don't be fancy about non-derivations. But we could have used used