aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2020-11-17 13:58:55 +0100
committerEelco Dolstra <edolstra@gmail.com>2020-11-17 13:58:55 +0100
commite6b7c7b79c697f1d8508930964e8c810f04a8963 (patch)
tree0085f736803a3217f11aa429620a120145d2c00b
parentbccff827dc968b08bddda03aadcb3d9cc41c2719 (diff)
Cleanup
-rw-r--r--src/libstore/derivations.cc5
-rw-r--r--src/libstore/local-store.cc10
-rw-r--r--src/libstore/store-api.cc8
-rw-r--r--src/libstore/store-api.hh3
4 files changed, 14 insertions, 12 deletions
diff --git a/src/libstore/derivations.cc b/src/libstore/derivations.cc
index eea129df3..106ec5daa 100644
--- a/src/libstore/derivations.cc
+++ b/src/libstore/derivations.cc
@@ -468,10 +468,7 @@ static const DrvHashModulo & pathDerivationModulo(Store & store, const StorePath
drvPath,
hashDerivationModulo(
store,
- parseDerivation(
- store,
- readFile(store.toRealPath(drvPath)),
- Derivation::nameFromPath(drvPath)),
+ store.readInvalidDerivation(drvPath),
false)).first;
}
return h->second;
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index e4e404dca..93d073768 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -624,10 +624,7 @@ uint64_t LocalStore::addValidPath(State & state,
efficiently query whether a path is an output of some
derivation. */
if (info.path.isDerivation()) {
- auto drv = parseDerivation(
- *this,
- readFile(Store::toRealPath(info.path)),
- Derivation::nameFromPath(info.path));
+ auto drv = readInvalidDerivation(info.path);
/* Verify that the output paths in the derivation are correct
(i.e., follow the scheme for computing output paths from
@@ -1003,10 +1000,7 @@ void LocalStore::registerValidPaths(const ValidPathInfos & infos)
if (i.path.isDerivation()) {
// FIXME: inefficient; we already loaded the derivation in addValidPath().
checkDerivationOutputs(i.path,
- parseDerivation(
- *this,
- readFile(Store::toRealPath(i.path)),
- Derivation::nameFromPath(i.path)));
+ readInvalidDerivation(i.path));
}
/* Do a topological sort of the paths. This will throw an
diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc
index 83d3a1fa1..7f808f45a 100644
--- a/src/libstore/store-api.cc
+++ b/src/libstore/store-api.cc
@@ -1007,6 +1007,14 @@ Derivation Store::readDerivation(const StorePath & drvPath)
}
}
+Derivation Store::readInvalidDerivation(const StorePath & drvPath)
+{
+ return parseDerivation(
+ *this,
+ readFile(Store::toRealPath(drvPath)),
+ Derivation::nameFromPath(drvPath));
+}
+
}
diff --git a/src/libstore/store-api.hh b/src/libstore/store-api.hh
index f77bc21d1..30c9e7d0a 100644
--- a/src/libstore/store-api.hh
+++ b/src/libstore/store-api.hh
@@ -611,6 +611,9 @@ public:
/* Read a derivation (which must already be valid). */
Derivation readDerivation(const StorePath & drvPath);
+ /* Read a derivation from a potentially invalid path. */
+ Derivation readInvalidDerivation(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