mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-11-07 07:26:13 -05:00
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.
This commit is contained in:
parent
94d92c7796
commit
f9aefa2d5f
6 changed files with 52 additions and 4 deletions
|
@ -95,6 +95,7 @@ (define-module (guix store)
|
|||
path-info-registration-time
|
||||
path-info-nar-size
|
||||
|
||||
built-in-builders
|
||||
references
|
||||
references/substitutes
|
||||
requisites
|
||||
|
@ -187,7 +188,8 @@ (define-enumerate-type operation-id
|
|||
(query-substitutable-paths 32)
|
||||
(query-valid-derivers 33)
|
||||
(optimize-store 34)
|
||||
(verify-store 35))
|
||||
(verify-store 35)
|
||||
(built-in-builders 80))
|
||||
|
||||
(define-enumerate-type hash-algo
|
||||
;; hash.hh
|
||||
|
@ -283,7 +285,7 @@ (define-syntax write-arg
|
|||
(write-string (bytevector->base16-string arg) p))))
|
||||
|
||||
(define-syntax read-arg
|
||||
(syntax-rules (integer boolean string store-path store-path-list
|
||||
(syntax-rules (integer boolean string store-path store-path-list string-list
|
||||
substitutable-path-list path-info base16)
|
||||
((_ integer p)
|
||||
(read-int p))
|
||||
|
@ -295,6 +297,8 @@ (define-syntax read-arg
|
|||
(read-store-path p))
|
||||
((_ store-path-list p)
|
||||
(read-store-path-list p))
|
||||
((_ string-list p)
|
||||
(read-string-list p))
|
||||
((_ substitutable-path-list p)
|
||||
(read-substitutable-path-list p))
|
||||
((_ path-info p)
|
||||
|
@ -914,6 +918,23 @@ (define substitutable-path-info
|
|||
order of PATHS."
|
||||
substitutable-path-list))
|
||||
|
||||
(define built-in-builders
|
||||
(let ((builders (operation (built-in-builders)
|
||||
"Return the built-in builders."
|
||||
string-list)))
|
||||
(lambda (store)
|
||||
"Return the names of the supported built-in derivation builders
|
||||
supported by STORE."
|
||||
;; Check whether STORE's version supports this RPC and built-in
|
||||
;; derivation builders in general, which appeared in Guix > 0.11.0.
|
||||
;; Return the empty list if it doesn't. Note that this RPC does not
|
||||
;; exist in 'nix-daemon'.
|
||||
(if (or (> (nix-server-major-version store) #x100)
|
||||
(and (= (nix-server-major-version store) #x100)
|
||||
(>= (nix-server-minor-version store) #x60)))
|
||||
(builders store)
|
||||
'()))))
|
||||
|
||||
(define-operation (optimize-store)
|
||||
"Optimize the store by hard-linking identical files (\"deduplication\".)
|
||||
Return #t on success."
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -211,6 +211,10 @@ (define prefix-len (string-length dir))
|
|||
(= (stat:ino (lstat file1))
|
||||
(stat:ino (lstat file2))))))))
|
||||
|
||||
(test-equal "built-in-builders"
|
||||
'("download")
|
||||
(built-in-builders %store))
|
||||
|
||||
(test-assert "unknown built-in builder"
|
||||
(let ((drv (derivation %store "ohoh" "builtin:does-not-exist" '())))
|
||||
(guard (c ((nix-protocol-error? c)
|
||||
|
|
Loading…
Reference in a new issue