aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/remote-fs-accessor.hh
diff options
context:
space:
mode:
authorregnat <rg@regnat.ovh>2020-12-15 10:54:24 +0100
committerregnat <rg@regnat.ovh>2020-12-15 20:10:46 +0100
commit7080321618e29033a8b5dc2f9fc938dcf2df270d (patch)
treed950e9e64bfa798c23fce3a881f805e7470cae81 /src/libstore/remote-fs-accessor.hh
parentf2f60bf5d6c95453f89e47e01fe0bd6a7fdc85bb (diff)
Use the fs accessor for readInvalidDerivation
Extend `FSAccessor::readFile` to allow not checking that the path is a valid one, and rewrite `readInvalidDerivation` using this extended `readFile`. Several places in the code use `readInvalidDerivation`, either because they need to read a derivation that has been written in the store but not registered yet, or more generally to prevent a deadlock because `readDerivation` tries to lock the state, so can't be called from a place where the lock is already held. However, `readInvalidDerivation` implicitely assumes that the store is a `LocalFSStore`, which isn't always the case. The concrete motivation for this is that it's required for `nix copy --from someBinaryCache` to work, which is tremendously useful for the tests.
Diffstat (limited to 'src/libstore/remote-fs-accessor.hh')
-rw-r--r--src/libstore/remote-fs-accessor.hh4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/libstore/remote-fs-accessor.hh b/src/libstore/remote-fs-accessor.hh
index 347cf5764..594852d0e 100644
--- a/src/libstore/remote-fs-accessor.hh
+++ b/src/libstore/remote-fs-accessor.hh
@@ -14,7 +14,7 @@ class RemoteFSAccessor : public FSAccessor
Path cacheDir;
- std::pair<ref<FSAccessor>, Path> fetch(const Path & path_);
+ std::pair<ref<FSAccessor>, Path> fetch(const Path & path_, bool requireValidPath = true);
friend class BinaryCacheStore;
@@ -32,7 +32,7 @@ public:
StringSet readDirectory(const Path & path) override;
- std::string readFile(const Path & path) override;
+ std::string readFile(const Path & path, bool requireValidPath = true) override;
std::string readLink(const Path & path) override;
};