aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2016-10-07 18:13:40 +0200
committerEelco Dolstra <edolstra@gmail.com>2016-10-07 18:13:40 +0200
commit629ab8002218e9b526d947a9b7a2eccddc3f331c (patch)
tree1c7afac50fcad1019c9b45b97e421d6a3d121823
parentb0f7f9c98f2b54e34e9344f817d30363533d108f (diff)
importPaths(): Fix accessor support for Hydra
-rw-r--r--src/libstore/binary-cache-store.cc8
-rw-r--r--src/libstore/binary-cache-store.hh6
-rw-r--r--src/libstore/export-import.cc9
-rw-r--r--src/libstore/store-api.hh11
4 files changed, 27 insertions, 7 deletions
diff --git a/src/libstore/binary-cache-store.cc b/src/libstore/binary-cache-store.cc
index 0ffbd6e55..01d1a7e24 100644
--- a/src/libstore/binary-cache-store.cc
+++ b/src/libstore/binary-cache-store.cc
@@ -318,4 +318,12 @@ ref<FSAccessor> BinaryCacheStore::getFSAccessor()
std::dynamic_pointer_cast<BinaryCacheStore>(shared_from_this())));
}
+void BinaryCacheStore::addPathToAccessor(ref<FSAccessor> accessor,
+ const Path & storePath, const ref<std::string> & data)
+{
+ auto accessor_ = accessor.dynamic_pointer_cast<BinaryCacheStoreAccessor>();
+ if (accessor_)
+ accessor_->nars.emplace(storePath, makeNarAccessor(data));
+}
+
}
diff --git a/src/libstore/binary-cache-store.hh b/src/libstore/binary-cache-store.hh
index 41671b7d9..e369abe46 100644
--- a/src/libstore/binary-cache-store.hh
+++ b/src/libstore/binary-cache-store.hh
@@ -134,6 +134,12 @@ public:
ref<FSAccessor> getFSAccessor() override;
+private:
+
+ void addPathToAccessor(ref<FSAccessor>, const Path & storePath, const ref<std::string> & data) override;
+
+public:
+
void addSignatures(const Path & storePath, const StringSet & sigs) override
{ notImpl(); }
diff --git a/src/libstore/export-import.cc b/src/libstore/export-import.cc
index 6090ee3e9..b7f43acf1 100644
--- a/src/libstore/export-import.cc
+++ b/src/libstore/export-import.cc
@@ -119,13 +119,8 @@ Paths Store::importPaths(Source & source, std::shared_ptr<FSAccessor> accessor,
addToStore(info, *tee.data, false, dontCheckSigs);
- // FIXME: implement accessors?
- assert(!accessor);
-#if 0
- auto accessor_ = std::dynamic_pointer_cast<BinaryCacheStoreAccessor>(accessor);
- if (accessor_)
- accessor_->nars.emplace(info.path, makeNarAccessor(tee.data));
-#endif
+ if (accessor)
+ addPathToAccessor(ref<FSAccessor>(accessor), info.path, tee.data);
res.push_back(info.path);
}
diff --git a/src/libstore/store-api.hh b/src/libstore/store-api.hh
index cba4deaad..8efacfd18 100644
--- a/src/libstore/store-api.hh
+++ b/src/libstore/store-api.hh
@@ -461,6 +461,17 @@ public:
/* Return an object to access files in the Nix store. */
virtual ref<FSAccessor> getFSAccessor() = 0;
+private:
+
+ /* Inform an accessor about the NAR contents of a store path. Used
+ by importPaths() to speed up subsequent access to the imported
+ paths when used with binary cache stores. */
+ virtual void addPathToAccessor(ref<FSAccessor>, const Path & storePath, const ref<std::string> & data)
+ {
+ }
+
+public:
+
/* Add signatures to the specified store path. The signatures are
not verified. */
virtual void addSignatures(const Path & storePath, const StringSet & sigs) = 0;