about summary refs log tree commit diff
path: root/src/libstore/builtins.cc
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2015-07-20T02·30+0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2015-07-20T02·38+0200
commit0a2bee307b20411f5b0dda0c662b1f9bb9e0e131 (patch)
treee0449738da384147f851a2343f8d21ae7591a3e0 /src/libstore/builtins.cc
parenteda2f36c2ac847e02e871c327e7633693d92cd8d (diff)
Make <nix/fetchurl.nix> a builtin builder
This ensures that 1) the derivation doesn't change when Nix changes;
2) the derivation closure doesn't contain Nix and its dependencies; 3)
we don't have to rely on ugly chroot hacks.
Diffstat (limited to 'src/libstore/builtins.cc')
-rw-r--r--src/libstore/builtins.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/libstore/builtins.cc b/src/libstore/builtins.cc
new file mode 100644
index 000000000000..97d6cb943402
--- /dev/null
+++ b/src/libstore/builtins.cc
@@ -0,0 +1,24 @@
+#include "builtins.hh"
+#include "download.hh"
+
+namespace nix {
+
+void builtinFetchurl(const BasicDerivation & drv)
+{
+    auto url = drv.env.find("url");
+    if (url == drv.env.end()) throw Error("attribute ‘url’ missing");
+    printMsg(lvlInfo, format("downloading ‘%1%’...") % url->second);
+    auto data = downloadFile(url->second); // FIXME: show progress
+
+    auto out = drv.env.find("out");
+    if (out == drv.env.end()) throw Error("attribute ‘url’ missing");
+    writeFile(out->second, data.data);
+
+    auto executable = drv.env.find("out");
+    if (executable != drv.env.end() && executable->second == "1") {
+        if (chmod(out->second.c_str(), 0755) == -1)
+            throw SysError(format("making ‘%1%’ executable") % out->second);
+    }
+}
+
+}