libstore: remove upcast_goal
upcast_goal was only ever needed to break circular includes, but the
same solution that gave us upcast_goal also lets us fully remove it:
just upcast goals without a wrapper function, but only in .cc files.
Change-Id: I9c71654b2535121459ba7dcfd6c5da5606904032
This commit is contained in:
parent
a5d431a911
commit
4b109ec1a8
|
@ -12,6 +12,8 @@
|
||||||
#include "topo-sort.hh"
|
#include "topo-sort.hh"
|
||||||
#include "local-store.hh" // TODO remove, along with remaining downcasts
|
#include "local-store.hh" // TODO remove, along with remaining downcasts
|
||||||
#include "logging-json.hh"
|
#include "logging-json.hh"
|
||||||
|
#include "substitution-goal.hh"
|
||||||
|
#include "drv-output-substitution-goal.hh"
|
||||||
|
|
||||||
#include <regex>
|
#include <regex>
|
||||||
#include <queue>
|
#include <queue>
|
||||||
|
@ -175,7 +177,7 @@ void DerivationGoal::getDerivation()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
addWaitee(upcast_goal(worker.makePathSubstitutionGoal(drvPath)));
|
addWaitee(worker.makePathSubstitutionGoal(drvPath));
|
||||||
|
|
||||||
state = &DerivationGoal::loadDerivation;
|
state = &DerivationGoal::loadDerivation;
|
||||||
}
|
}
|
||||||
|
@ -276,19 +278,17 @@ void DerivationGoal::haveDerivation()
|
||||||
if (!status.wanted) continue;
|
if (!status.wanted) continue;
|
||||||
if (!status.known)
|
if (!status.known)
|
||||||
addWaitee(
|
addWaitee(
|
||||||
upcast_goal(
|
worker.makeDrvOutputSubstitutionGoal(
|
||||||
worker.makeDrvOutputSubstitutionGoal(
|
DrvOutput{status.outputHash, outputName},
|
||||||
DrvOutput{status.outputHash, outputName},
|
buildMode == bmRepair ? Repair : NoRepair
|
||||||
buildMode == bmRepair ? Repair : NoRepair
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
else {
|
else {
|
||||||
auto * cap = getDerivationCA(*drv);
|
auto * cap = getDerivationCA(*drv);
|
||||||
addWaitee(upcast_goal(worker.makePathSubstitutionGoal(
|
addWaitee(worker.makePathSubstitutionGoal(
|
||||||
status.known->path,
|
status.known->path,
|
||||||
buildMode == bmRepair ? Repair : NoRepair,
|
buildMode == bmRepair ? Repair : NoRepair,
|
||||||
cap ? std::optional { *cap } : std::nullopt)));
|
cap ? std::optional { *cap } : std::nullopt));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -426,7 +426,7 @@ void DerivationGoal::gaveUpOnSubstitution()
|
||||||
if (!settings.useSubstitutes)
|
if (!settings.useSubstitutes)
|
||||||
throw Error("dependency '%s' of '%s' does not exist, and substitution is disabled",
|
throw Error("dependency '%s' of '%s' does not exist, and substitution is disabled",
|
||||||
worker.store.printStorePath(i), worker.store.printStorePath(drvPath));
|
worker.store.printStorePath(i), worker.store.printStorePath(drvPath));
|
||||||
addWaitee(upcast_goal(worker.makePathSubstitutionGoal(i)));
|
addWaitee(worker.makePathSubstitutionGoal(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (waitees.empty()) /* to prevent hang (no wake-up event) */
|
if (waitees.empty()) /* to prevent hang (no wake-up event) */
|
||||||
|
@ -479,7 +479,7 @@ void DerivationGoal::repairClosure()
|
||||||
worker.store.printStorePath(i), worker.store.printStorePath(drvPath));
|
worker.store.printStorePath(i), worker.store.printStorePath(drvPath));
|
||||||
auto drvPath2 = outputsToDrv.find(i);
|
auto drvPath2 = outputsToDrv.find(i);
|
||||||
if (drvPath2 == outputsToDrv.end())
|
if (drvPath2 == outputsToDrv.end())
|
||||||
addWaitee(upcast_goal(worker.makePathSubstitutionGoal(i, Repair)));
|
addWaitee(worker.makePathSubstitutionGoal(i, Repair));
|
||||||
else
|
else
|
||||||
addWaitee(worker.makeGoal(
|
addWaitee(worker.makeGoal(
|
||||||
DerivedPath::Built {
|
DerivedPath::Built {
|
||||||
|
|
|
@ -537,15 +537,4 @@ void Worker::markContentsGood(const StorePath & path)
|
||||||
pathContentsGoodCache.insert_or_assign(path, true);
|
pathContentsGoodCache.insert_or_assign(path, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
GoalPtr upcast_goal(std::shared_ptr<PathSubstitutionGoal> subGoal)
|
|
||||||
{
|
|
||||||
return subGoal;
|
|
||||||
}
|
|
||||||
|
|
||||||
GoalPtr upcast_goal(std::shared_ptr<DrvOutputSubstitutionGoal> subGoal)
|
|
||||||
{
|
|
||||||
return subGoal;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,21 +17,6 @@ struct DerivationGoal;
|
||||||
struct PathSubstitutionGoal;
|
struct PathSubstitutionGoal;
|
||||||
class DrvOutputSubstitutionGoal;
|
class DrvOutputSubstitutionGoal;
|
||||||
|
|
||||||
/**
|
|
||||||
* Workaround for not being able to declare a something like
|
|
||||||
*
|
|
||||||
* ```c++
|
|
||||||
* class PathSubstitutionGoal : public Goal;
|
|
||||||
* ```
|
|
||||||
* even when Goal is a complete type.
|
|
||||||
*
|
|
||||||
* This is still a static cast. The purpose of exporting it is to define it in
|
|
||||||
* a place where `PathSubstitutionGoal` is concrete, and use it in a place where it
|
|
||||||
* is opaque.
|
|
||||||
*/
|
|
||||||
GoalPtr upcast_goal(std::shared_ptr<PathSubstitutionGoal> subGoal);
|
|
||||||
GoalPtr upcast_goal(std::shared_ptr<DrvOutputSubstitutionGoal> subGoal);
|
|
||||||
|
|
||||||
typedef std::chrono::time_point<std::chrono::steady_clock> steady_time_point;
|
typedef std::chrono::time_point<std::chrono::steady_clock> steady_time_point;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue