aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr/primops/derivation.nix
diff options
context:
space:
mode:
authorGregory Hale <greghale@octobook.local>2020-09-25 12:10:58 -0400
committerGregory Hale <greghale@octobook.local>2020-09-25 12:10:58 -0400
commitfaa5607f546b825c505696d4f61e73ce3d4aa053 (patch)
tree9e69487d2d79414b726c110dd071ebe1e68f40d2 /src/libexpr/primops/derivation.nix
parenta303c0b6dc71b1e0d6a57986c3f7a9b61361cd92 (diff)
parent7d815824885305eaed83f025826f8a8c3330693d (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.nix27
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