aboutsummaryrefslogtreecommitdiff
path: root/src/libstore
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/binary-cache-store.hh19
-rw-r--r--src/libstore/serve-protocol.hh23
-rw-r--r--src/libstore/store-api.cc13
-rw-r--r--src/libstore/store-api.hh14
4 files changed, 43 insertions, 26 deletions
diff --git a/src/libstore/binary-cache-store.hh b/src/libstore/binary-cache-store.hh
index 7b228422d..a70d50d49 100644
--- a/src/libstore/binary-cache-store.hh
+++ b/src/libstore/binary-cache-store.hh
@@ -71,9 +71,6 @@ public:
PathSet & referrers) override
{ notImpl(); }
- PathSet queryValidDerivers(const Path & path) override
- { return {}; }
-
PathSet queryDerivationOutputs(const Path & path) override
{ notImpl(); }
@@ -83,13 +80,6 @@ public:
Path queryPathFromHashPart(const string & hashPart) override
{ notImpl(); }
- PathSet querySubstitutablePaths(const PathSet & paths) override
- { return {}; }
-
- void querySubstitutablePathInfos(const PathSet & paths,
- SubstitutablePathInfos & infos) override
- { }
-
bool wantMassQuery() override { return wantMassQuery_; }
void addToStore(const ValidPathInfo & info, const ref<std::string> & nar,
@@ -121,21 +111,12 @@ public:
void addIndirectRoot(const Path & path) override
{ notImpl(); }
- void syncWithGC() override
- { }
-
Roots findRoots() override
{ notImpl(); }
void collectGarbage(const GCOptions & options, GCResults & results) override
{ notImpl(); }
- void optimiseStore() override
- { }
-
- bool verifyStore(bool checkContents, bool repair) override
- { return true; }
-
ref<FSAccessor> getFSAccessor() override;
void addSignatures(const Path & storePath, const StringSet & sigs) override
diff --git a/src/libstore/serve-protocol.hh b/src/libstore/serve-protocol.hh
new file mode 100644
index 000000000..f8cc9a4b6
--- /dev/null
+++ b/src/libstore/serve-protocol.hh
@@ -0,0 +1,23 @@
+#pragma once
+
+namespace nix {
+
+#define SERVE_MAGIC_1 0x390c9deb
+#define SERVE_MAGIC_2 0x5452eecb
+
+#define SERVE_PROTOCOL_VERSION 0x203
+#define GET_PROTOCOL_MAJOR(x) ((x) & 0xff00)
+#define GET_PROTOCOL_MINOR(x) ((x) & 0x00ff)
+
+typedef enum {
+ cmdQueryValidPaths = 1,
+ cmdQueryPathInfos = 2,
+ cmdDumpStorePath = 3,
+ cmdImportPaths = 4,
+ cmdExportPaths = 5,
+ cmdBuildPaths = 6,
+ cmdQueryClosure = 7,
+ cmdBuildDerivation = 8,
+} ServeCommand;
+
+}
diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc
index a42d11834..f98ba3840 100644
--- a/src/libstore/store-api.cc
+++ b/src/libstore/store-api.cc
@@ -285,6 +285,19 @@ bool Store::isValidPath(const Path & storePath)
}
+/* Default implementation for stores that only implement
+ queryPathInfoUncached(). */
+bool Store::isValidPathUncached(const Path & path)
+{
+ try {
+ queryPathInfo(path);
+ return true;
+ } catch (InvalidPath &) {
+ return false;
+ }
+}
+
+
ref<const ValidPathInfo> Store::queryPathInfo(const Path & storePath)
{
std::promise<ref<ValidPathInfo>> promise;
diff --git a/src/libstore/store-api.hh b/src/libstore/store-api.hh
index 3fee99907..8058daf14 100644
--- a/src/libstore/store-api.hh
+++ b/src/libstore/store-api.hh
@@ -320,7 +320,7 @@ public:
protected:
- virtual bool isValidPathUncached(const Path & path) = 0;
+ virtual bool isValidPathUncached(const Path & path);
public:
@@ -360,7 +360,7 @@ public:
output. (Note that the result of `queryDeriver()' is the
derivation that was actually used to produce `path', which may
not exist anymore.) */
- virtual PathSet queryValidDerivers(const Path & path) = 0;
+ virtual PathSet queryValidDerivers(const Path & path) { return {}; };
/* Query the outputs of the derivation denoted by `path'. */
virtual PathSet queryDerivationOutputs(const Path & path) = 0;
@@ -373,13 +373,13 @@ public:
virtual Path queryPathFromHashPart(const string & hashPart) = 0;
/* Query which of the given paths have substitutes. */
- virtual PathSet querySubstitutablePaths(const PathSet & paths) = 0;
+ virtual PathSet querySubstitutablePaths(const PathSet & paths) { return {}; };
/* Query substitute info (i.e. references, derivers and download
sizes) of a set of paths. If a path does not have substitute
info, it's omitted from the resulting ‘infos’ map. */
virtual void querySubstitutablePathInfos(const PathSet & paths,
- SubstitutablePathInfos & infos) = 0;
+ SubstitutablePathInfos & infos) { return; };
virtual bool wantMassQuery() { return false; }
@@ -454,7 +454,7 @@ public:
permanent root and sees our's.
In either case the permanent root is seen by the collector. */
- virtual void syncWithGC() = 0;
+ virtual void syncWithGC() { };
/* Find the roots of the garbage collector. Each root is a pair
(link, storepath) where `link' is the path of the symlink
@@ -485,11 +485,11 @@ public:
/* Optimise the disk space usage of the Nix store by hard-linking files
with the same contents. */
- virtual void optimiseStore() = 0;
+ virtual void optimiseStore() { };
/* Check the integrity of the Nix store. Returns true if errors
remain. */
- virtual bool verifyStore(bool checkContents, bool repair) = 0;
+ virtual bool verifyStore(bool checkContents, bool repair) { return false; };
/* Return an object to access files in the Nix store. */
virtual ref<FSAccessor> getFSAccessor() = 0;