Don't use readDerivation() in addValidPath()

readDerivation() requires a valid path.

Fixes #4210.
This commit is contained in:
Eelco Dolstra 2020-11-02 18:46:44 +01:00
parent 8b15650e74
commit 7cf874c17d

View file

@ -623,7 +623,10 @@ uint64_t LocalStore::addValidPath(State & state,
efficiently query whether a path is an output of some efficiently query whether a path is an output of some
derivation. */ derivation. */
if (info.path.isDerivation()) { if (info.path.isDerivation()) {
auto drv = readDerivation(info.path); auto drv = parseDerivation(
*this,
readFile(Store::toRealPath(info.path)),
Derivation::nameFromPath(info.path));
/* Verify that the output paths in the derivation are correct /* Verify that the output paths in the derivation are correct
(i.e., follow the scheme for computing output paths from (i.e., follow the scheme for computing output paths from
@ -1000,7 +1003,11 @@ void LocalStore::registerValidPaths(const ValidPathInfos & infos)
for (auto & i : infos) for (auto & i : infos)
if (i.path.isDerivation()) { if (i.path.isDerivation()) {
// FIXME: inefficient; we already loaded the derivation in addValidPath(). // FIXME: inefficient; we already loaded the derivation in addValidPath().
checkDerivationOutputs(i.path, readDerivation(i.path)); checkDerivationOutputs(i.path,
parseDerivation(
*this,
readFile(Store::toRealPath(i.path)),
Derivation::nameFromPath(i.path)));
} }
/* Do a topological sort of the paths. This will throw an /* Do a topological sort of the paths. This will throw an