aboutsummaryrefslogtreecommitdiff
path: root/src/libstore
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2021-02-26 12:30:25 +0100
committerEelco Dolstra <edolstra@gmail.com>2021-02-26 12:30:25 +0100
commit73daffb81b77ef73e187553cc215d106795c5a0b (patch)
tree77ad334cea3b81d919e4ab175f9625c498f0f3ae /src/libstore
parentd2803406b527fdabc893e09c7167a3cdf5a5fc08 (diff)
parentba1a256d0875592b28d902f3e40663b2adedfe9c (diff)
Merge remote-tracking branch 'origin/deduplicate-static-hashes-computation'
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/build/derivation-goal.cc37
-rw-r--r--src/libstore/build/derivation-goal.hh2
2 files changed, 14 insertions, 25 deletions
diff --git a/src/libstore/build/derivation-goal.cc b/src/libstore/build/derivation-goal.cc
index d8a89a2d0..804a79e4c 100644
--- a/src/libstore/build/derivation-goal.cc
+++ b/src/libstore/build/derivation-goal.cc
@@ -123,17 +123,7 @@ DerivationGoal::DerivationGoal(const StorePath & drvPath, const BasicDerivation
, wantedOutputs(wantedOutputs)
, buildMode(buildMode)
{
- this->drv = std::make_unique<BasicDerivation>(BasicDerivation(drv));
-
- auto outputHashes = staticOutputHashes(worker.store, drv);
- for (auto &[outputName, outputHash] : outputHashes)
- initialOutputs.insert({
- outputName,
- InitialOutput{
- .wanted = true, // Will be refined later
- .outputHash = outputHash
- }
- });
+ this->drv = std::make_unique<Derivation>(drv);
state = &DerivationGoal::haveDerivation;
name = fmt(
@@ -271,18 +261,8 @@ void DerivationGoal::loadDerivation()
auto fullDrv = new Derivation(worker.store.derivationFromPath(drvPath));
- auto outputHashes = staticOutputHashes(worker.store, *fullDrv);
- for (auto &[outputName, outputHash] : outputHashes)
- initialOutputs.insert({
- outputName,
- InitialOutput{
- .wanted = true, // Will be refined later
- .outputHash = outputHash
- }
- });
-
/* Get the derivation. */
- drv = std::unique_ptr<BasicDerivation>(fullDrv);
+ drv = std::unique_ptr<Derivation>(fullDrv);
haveDerivation();
}
@@ -301,6 +281,16 @@ void DerivationGoal::haveDerivation()
if (i.second.second)
worker.store.addTempRoot(*i.second.second);
+ auto outputHashes = staticOutputHashes(worker.store, *drv);
+ for (auto &[outputName, outputHash] : outputHashes)
+ initialOutputs.insert({
+ outputName,
+ InitialOutput{
+ .wanted = true, // Will be refined later
+ .outputHash = outputHash
+ }
+ });
+
/* Check what outputs paths are not already valid. */
checkPathValidity();
bool allValid = true;
@@ -3517,10 +3507,9 @@ void DerivationGoal::registerOutputs()
but it's fine to do in all cases. */
if (settings.isExperimentalFeatureEnabled("ca-derivations")) {
- auto outputHashes = staticOutputHashes(worker.store, *drv);
for (auto& [outputName, newInfo] : infos)
worker.store.registerDrvOutput(Realisation{
- .id = DrvOutput{outputHashes.at(outputName), outputName},
+ .id = DrvOutput{initialOutputs.at(outputName).outputHash, outputName},
.outPath = newInfo.path});
}
}
diff --git a/src/libstore/build/derivation-goal.hh b/src/libstore/build/derivation-goal.hh
index 761100d3a..6dc164922 100644
--- a/src/libstore/build/derivation-goal.hh
+++ b/src/libstore/build/derivation-goal.hh
@@ -64,7 +64,7 @@ struct DerivationGoal : public Goal
bool retrySubstitution;
/* The derivation stored at drvPath. */
- std::unique_ptr<BasicDerivation> drv;
+ std::unique_ptr<Derivation> drv;
std::unique_ptr<ParsedDerivation> parsedDrv;