aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/build-remote/build-remote.cc2
-rw-r--r--src/libexpr/primops.cc2
-rw-r--r--src/libstore/daemon.cc2
-rw-r--r--src/libstore/derivations.cc8
-rw-r--r--src/libstore/local-store.cc5
-rw-r--r--src/libstore/store-api.hh3
-rw-r--r--src/nix/show-derivation.cc6
7 files changed, 17 insertions, 11 deletions
diff --git a/src/build-remote/build-remote.cc b/src/build-remote/build-remote.cc
index 00340b787..d2ea6c956 100644
--- a/src/build-remote/build-remote.cc
+++ b/src/build-remote/build-remote.cc
@@ -241,7 +241,7 @@ connected:
uploadLock = -1;
- BasicDerivation drv(readDerivation(*store, store->realStoreDir + "/" + std::string(drvPath->to_string())));
+ auto drv = store->readDerivation(*drvPath);
drv.inputSrcs = store->parseStorePathSet(inputs);
auto result = sshStore->buildDerivation(*drvPath, drv);
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index 9efb8eae5..3a27527a0 100644
--- a/src/libexpr/primops.cc
+++ b/src/libexpr/primops.cc
@@ -688,7 +688,7 @@ static void prim_derivationStrict(EvalState & state, const Pos & pos, Value * *
for (auto & j : refs) {
drv.inputSrcs.insert(j.clone());
if (j.isDerivation())
- drv.inputDrvs[j.clone()] = readDerivation(*state.store, state.store->toRealPath(j)).outputNames();
+ drv.inputDrvs[j.clone()] = state.store->readDerivation(j).outputNames();
}
}
diff --git a/src/libstore/daemon.cc b/src/libstore/daemon.cc
index dc2015579..877c70a03 100644
--- a/src/libstore/daemon.cc
+++ b/src/libstore/daemon.cc
@@ -329,7 +329,7 @@ static void performOp(TunnelLogger * logger, ref<Store> store,
case wopQueryDerivationOutputNames: {
auto path = store->parseStorePath(readString(from));
logger->startWork();
- auto names = readDerivation(*store, store->toRealPath(path)).outputNames();
+ auto names = store->readDerivation(path).outputNames();
logger->stopWork();
to << names;
break;
diff --git a/src/libstore/derivations.cc b/src/libstore/derivations.cc
index 6de91ec97..e268c65ff 100644
--- a/src/libstore/derivations.cc
+++ b/src/libstore/derivations.cc
@@ -204,6 +204,12 @@ Derivation readDerivation(const Store & store, const Path & drvPath)
Derivation Store::derivationFromPath(const StorePath & drvPath)
{
ensurePath(drvPath);
+ return readDerivation(drvPath);
+}
+
+
+Derivation Store::readDerivation(const StorePath & drvPath)
+{
auto accessor = getFSAccessor();
try {
return parseDerivation(*this, accessor->readFile(printStorePath(drvPath)));
@@ -378,7 +384,7 @@ Hash hashDerivationModulo(Store & store, const Derivation & drv, bool maskOutput
if (h == drvHashes.end()) {
assert(store.isValidPath(i.first));
h = drvHashes.insert_or_assign(i.first.clone(), hashDerivationModulo(store,
- readDerivation(store, store.toRealPath(i.first)), false)).first;
+ store.readDerivation(i.first), false)).first;
}
inputs2.insert_or_assign(h->second.to_string(Base16, false), i.second);
}
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index e379db426..c2c45b4c2 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -595,7 +595,7 @@ uint64_t LocalStore::addValidPath(State & state,
efficiently query whether a path is an output of some
derivation. */
if (info.path.isDerivation()) {
- auto drv = readDerivation(*this, realStoreDir + "/" + std::string(info.path.to_string()));
+ auto drv = readDerivation(info.path);
/* Verify that the output paths in the derivation are correct
(i.e., follow the scheme for computing output paths from
@@ -911,8 +911,7 @@ void LocalStore::registerValidPaths(const ValidPathInfos & infos)
for (auto & i : infos)
if (i.path.isDerivation()) {
// FIXME: inefficient; we already loaded the derivation in addValidPath().
- checkDerivationOutputs(i.path,
- readDerivation(*this, realStoreDir + "/" + std::string(i.path.to_string())));
+ checkDerivationOutputs(i.path, readDerivation(i.path));
}
/* Do a topological sort of the paths. This will throw an
diff --git a/src/libstore/store-api.hh b/src/libstore/store-api.hh
index 5ba17e0bc..5ef506326 100644
--- a/src/libstore/store-api.hh
+++ b/src/libstore/store-api.hh
@@ -583,6 +583,9 @@ public:
ensurePath(). */
Derivation derivationFromPath(const StorePath & drvPath);
+ /* Read a derivation (which must already be valid). */
+ Derivation readDerivation(const StorePath & drvPath);
+
/* Place in `out' the set of all store paths in the file system
closure of `storePath'; that is, all paths than can be directly
or indirectly reached from it. `out' is not cleared. If
diff --git a/src/nix/show-derivation.cc b/src/nix/show-derivation.cc
index 22c569f3c..2d31894c2 100644
--- a/src/nix/show-derivation.cc
+++ b/src/nix/show-derivation.cc
@@ -61,11 +61,9 @@ struct CmdShowDerivation : InstallablesCommand
for (auto & drvPath : drvPaths) {
if (!drvPath.isDerivation()) continue;
- auto drvPathS = store->printStorePath(drvPath);
+ auto drvObj(jsonRoot.object(store->printStorePath(drvPath)));
- auto drvObj(jsonRoot.object(drvPathS));
-
- auto drv = readDerivation(*store, drvPathS);
+ auto drv = store->readDerivation(drvPath);
{
auto outputsObj(drvObj.object("outputs"));