summary refs log tree commit diff
path: root/nix
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2016-11-13 22:59:54 +0100
committerLudovic Courtès <ludo@gnu.org>2016-11-16 18:19:54 +0100
commitf9aefa2d5fb3f6aad25a907939ee872c828b33d0 (patch)
tree51c87ff2ca17cb4aabf456446a14c43446956219 /nix
parent94d92c7796a3dd50c27d532315f7d497ac99f08e (diff)
downloadguix-f9aefa2d5fb3f6aad25a907939ee872c828b33d0.tar.gz
daemon: Add 'built-in-builders' RPC.
* nix/libstore/builtins.cc (builtinBuilderNames): New function.
* nix/libstore/builtins.hh (builtinBuilderNames): New declaration.
* nix/libstore/worker-protocol.hh (PROTOCOL_VERSION): Bump to 0x160.
(WorkerOp)[wopBuiltinBuilders]: New value.
* nix/nix-daemon/nix-daemon.cc (performOp): Handle it.
* guix/store.scm (operation-id)[built-in-builders]: New value.
* guix/store.scm (read-arg): Add 'string-list'.
(built-in-builders): New procedure.
* tests/derivations.scm ("built-in-builders"): New test.
Diffstat (limited to 'nix')
-rw-r--r--nix/libstore/builtins.cc10
-rw-r--r--nix/libstore/builtins.hh3
-rw-r--r--nix/libstore/worker-protocol.hh5
-rw-r--r--nix/nix-daemon/nix-daemon.cc9
4 files changed, 25 insertions, 2 deletions
diff --git a/nix/libstore/builtins.cc b/nix/libstore/builtins.cc
index 605e44079a..32af767dc4 100644
--- a/nix/libstore/builtins.cc
+++ b/nix/libstore/builtins.cc
@@ -66,4 +66,14 @@ derivationBuilder lookupBuiltinBuilder(const std::string & name)
 	return NULL;
 }
 
+std::list<std::string> builtinBuilderNames()
+{
+    std::list<std::string> result;
+    for(auto&& iter: builtins)
+    {
+	result.push_back(iter.first);
+    }
+    return result;
+}
+
 }
diff --git a/nix/libstore/builtins.hh b/nix/libstore/builtins.hh
index 0c6db651ab..79171fcb6c 100644
--- a/nix/libstore/builtins.hh
+++ b/nix/libstore/builtins.hh
@@ -38,4 +38,7 @@ namespace nix {
     /* Return the built-in builder called BUILDER, or NULL if none was
        found.  */
     derivationBuilder lookupBuiltinBuilder(const std::string &builder);
+
+    /* Return the list of supported built-in builder names.  */
+    std::list<std::string> builtinBuilderNames();
 }
diff --git a/nix/libstore/worker-protocol.hh b/nix/libstore/worker-protocol.hh
index 7b7be4a8a0..bdeaca2e3a 100644
--- a/nix/libstore/worker-protocol.hh
+++ b/nix/libstore/worker-protocol.hh
@@ -6,7 +6,7 @@ namespace nix {
 #define WORKER_MAGIC_1 0x6e697863
 #define WORKER_MAGIC_2 0x6478696f
 
-#define PROTOCOL_VERSION 0x10f
+#define PROTOCOL_VERSION 0x160
 #define GET_PROTOCOL_MAJOR(x) ((x) & 0xff00)
 #define GET_PROTOCOL_MINOR(x) ((x) & 0x00ff)
 
@@ -43,7 +43,8 @@ typedef enum {
     wopQuerySubstitutablePaths = 32,
     wopQueryValidDerivers = 33,
     wopOptimiseStore = 34,
-    wopVerifyStore = 35
+    wopVerifyStore = 35,
+    wopBuiltinBuilders = 80
 } WorkerOp;
 
 
diff --git a/nix/nix-daemon/nix-daemon.cc b/nix/nix-daemon/nix-daemon.cc
index 35c284f7e1..9b29b3e91d 100644
--- a/nix/nix-daemon/nix-daemon.cc
+++ b/nix/nix-daemon/nix-daemon.cc
@@ -6,6 +6,7 @@
 #include "archive.hh"
 #include "affinity.hh"
 #include "globals.hh"
+#include "builtins.hh"
 
 #include <algorithm>
 
@@ -671,6 +672,14 @@ static void performOp(bool trusted, unsigned int clientVersion,
         break;
     }
 
+    case wopBuiltinBuilders: {
+	startWork();
+	auto names = builtinBuilderNames();
+	stopWork();
+	writeStrings(names, to);
+	break;
+    }
+
     default:
         throw Error(format("invalid operation %1%") % op);
     }