diff options
author | Gregory Hale <greghale@octobook.local> | 2020-09-25 12:10:58 -0400 |
---|---|---|
committer | Gregory Hale <greghale@octobook.local> | 2020-09-25 12:10:58 -0400 |
commit | faa5607f546b825c505696d4f61e73ce3d4aa053 (patch) | |
tree | 9e69487d2d79414b726c110dd071ebe1e68f40d2 /src/libexpr/primops/derivation.nix | |
parent | a303c0b6dc71b1e0d6a57986c3f7a9b61361cd92 (diff) | |
parent | 7d815824885305eaed83f025826f8a8c3330693d (diff) |
Merge remote-tracking branch 'origin/master' into github-api-token
Diffstat (limited to 'src/libexpr/primops/derivation.nix')
-rw-r--r-- | src/libexpr/primops/derivation.nix | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/libexpr/primops/derivation.nix b/src/libexpr/primops/derivation.nix new file mode 100644 index 000000000..c0fbe8082 --- /dev/null +++ b/src/libexpr/primops/derivation.nix @@ -0,0 +1,27 @@ +/* This is the implementation of the ‘derivation’ builtin function. + It's actually a wrapper around the ‘derivationStrict’ primop. */ + +drvAttrs @ { outputs ? [ "out" ], ... }: + +let + + strict = derivationStrict drvAttrs; + + commonAttrs = drvAttrs // (builtins.listToAttrs outputsList) // + { all = map (x: x.value) outputsList; + inherit drvAttrs; + }; + + outputToAttrListElement = outputName: + { name = outputName; + value = commonAttrs // { + outPath = builtins.getAttr outputName strict; + drvPath = strict.drvPath; + type = "derivation"; + inherit outputName; + }; + }; + + outputsList = map outputToAttrListElement outputs; + +in (builtins.head outputsList).value |