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
|
@ -95,6 +95,7 @@
|
||||||
path-info-registration-time
|
path-info-registration-time
|
||||||
path-info-nar-size
|
path-info-nar-size
|
||||||
|
|
||||||
|
built-in-builders
|
||||||
references
|
references
|
||||||
references/substitutes
|
references/substitutes
|
||||||
requisites
|
requisites
|
||||||
|
@ -187,7 +188,8 @@
|
||||||
(query-substitutable-paths 32)
|
(query-substitutable-paths 32)
|
||||||
(query-valid-derivers 33)
|
(query-valid-derivers 33)
|
||||||
(optimize-store 34)
|
(optimize-store 34)
|
||||||
(verify-store 35))
|
(verify-store 35)
|
||||||
|
(built-in-builders 80))
|
||||||
|
|
||||||
(define-enumerate-type hash-algo
|
(define-enumerate-type hash-algo
|
||||||
;; hash.hh
|
;; hash.hh
|
||||||
|
@ -283,7 +285,7 @@
|
||||||
(write-string (bytevector->base16-string arg) p))))
|
(write-string (bytevector->base16-string arg) p))))
|
||||||
|
|
||||||
(define-syntax read-arg
|
(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)
|
substitutable-path-list path-info base16)
|
||||||
((_ integer p)
|
((_ integer p)
|
||||||
(read-int p))
|
(read-int p))
|
||||||
|
@ -295,6 +297,8 @@
|
||||||
(read-store-path p))
|
(read-store-path p))
|
||||||
((_ store-path-list p)
|
((_ store-path-list p)
|
||||||
(read-store-path-list p))
|
(read-store-path-list p))
|
||||||
|
((_ string-list p)
|
||||||
|
(read-string-list p))
|
||||||
((_ substitutable-path-list p)
|
((_ substitutable-path-list p)
|
||||||
(read-substitutable-path-list p))
|
(read-substitutable-path-list p))
|
||||||
((_ path-info p)
|
((_ path-info p)
|
||||||
|
@ -914,6 +918,23 @@ that there is no guarantee that the order of the resulting list matches the
|
||||||
order of PATHS."
|
order of PATHS."
|
||||||
substitutable-path-list))
|
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)
|
(define-operation (optimize-store)
|
||||||
"Optimize the store by hard-linking identical files (\"deduplication\".)
|
"Optimize the store by hard-linking identical files (\"deduplication\".)
|
||||||
Return #t on success."
|
Return #t on success."
|
||||||
|
|
|
@ -66,4 +66,14 @@ derivationBuilder lookupBuiltinBuilder(const std::string & name)
|
||||||
return NULL;
|
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
|
/* Return the built-in builder called BUILDER, or NULL if none was
|
||||||
found. */
|
found. */
|
||||||
derivationBuilder lookupBuiltinBuilder(const std::string &builder);
|
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_1 0x6e697863
|
||||||
#define WORKER_MAGIC_2 0x6478696f
|
#define WORKER_MAGIC_2 0x6478696f
|
||||||
|
|
||||||
#define PROTOCOL_VERSION 0x10f
|
#define PROTOCOL_VERSION 0x160
|
||||||
#define GET_PROTOCOL_MAJOR(x) ((x) & 0xff00)
|
#define GET_PROTOCOL_MAJOR(x) ((x) & 0xff00)
|
||||||
#define GET_PROTOCOL_MINOR(x) ((x) & 0x00ff)
|
#define GET_PROTOCOL_MINOR(x) ((x) & 0x00ff)
|
||||||
|
|
||||||
|
@ -43,7 +43,8 @@ typedef enum {
|
||||||
wopQuerySubstitutablePaths = 32,
|
wopQuerySubstitutablePaths = 32,
|
||||||
wopQueryValidDerivers = 33,
|
wopQueryValidDerivers = 33,
|
||||||
wopOptimiseStore = 34,
|
wopOptimiseStore = 34,
|
||||||
wopVerifyStore = 35
|
wopVerifyStore = 35,
|
||||||
|
wopBuiltinBuilders = 80
|
||||||
} WorkerOp;
|
} WorkerOp;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include "archive.hh"
|
#include "archive.hh"
|
||||||
#include "affinity.hh"
|
#include "affinity.hh"
|
||||||
#include "globals.hh"
|
#include "globals.hh"
|
||||||
|
#include "builtins.hh"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
@ -671,6 +672,14 @@ static void performOp(bool trusted, unsigned int clientVersion,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case wopBuiltinBuilders: {
|
||||||
|
startWork();
|
||||||
|
auto names = builtinBuilderNames();
|
||||||
|
stopWork();
|
||||||
|
writeStrings(names, to);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw Error(format("invalid operation %1%") % op);
|
throw Error(format("invalid operation %1%") % op);
|
||||||
}
|
}
|
||||||
|
|
|
@ -211,6 +211,10 @@
|
||||||
(= (stat:ino (lstat file1))
|
(= (stat:ino (lstat file1))
|
||||||
(stat:ino (lstat file2))))))))
|
(stat:ino (lstat file2))))))))
|
||||||
|
|
||||||
|
(test-equal "built-in-builders"
|
||||||
|
'("download")
|
||||||
|
(built-in-builders %store))
|
||||||
|
|
||||||
(test-assert "unknown built-in builder"
|
(test-assert "unknown built-in builder"
|
||||||
(let ((drv (derivation %store "ohoh" "builtin:does-not-exist" '())))
|
(let ((drv (derivation %store "ohoh" "builtin:does-not-exist" '())))
|
||||||
(guard (c ((nix-protocol-error? c)
|
(guard (c ((nix-protocol-error? c)
|
||||||
|
|
Loading…
Reference in New Issue