libstore: move Goal::ex to WorkResult

yet another duplicated field. it's the last one though.

Change-Id: I352df8d306794d262d8c9066f3be78acd40e82cf
This commit is contained in:
eldritch horrors 2024-10-05 00:38:35 +02:00
parent 1caf2afb1d
commit 03cbc0ecb9
3 changed files with 6 additions and 13 deletions

View file

@ -26,11 +26,11 @@ void Store::buildPaths(const std::vector<DerivedPath> & reqs, BuildMode buildMod
StringSet failed;
std::shared_ptr<Error> ex;
for (auto & [i, result] : goals) {
if (i->ex) {
if (result.ex) {
if (ex)
logError(i->ex->info());
logError(result.ex->info());
else
ex = i->ex;
ex = result.ex;
}
if (result.exitCode != Goal::ecSuccess) {
if (auto i2 = dynamic_cast<DerivationGoal *>(i.get()))
@ -119,9 +119,9 @@ void Store::ensurePath(const StorePath & path)
auto [goal, result] = *goals.begin();
if (result.exitCode != Goal::ecSuccess) {
if (goal->ex) {
goal->ex->withExitStatus(worker.failingExitStatus());
throw std::move(*goal->ex);
if (result.ex) {
result.ex->withExitStatus(worker.failingExitStatus());
throw std::move(*result.ex);
} else
throw Error(worker.failingExitStatus(), "path '%s' does not exist and cannot be created", printStorePath(path));
}

View file

@ -25,7 +25,6 @@ try {
BOOST_OUTCOME_CO_TRY(auto result, co_await workImpl());
trace("done");
ex = result.ex;
notify->fulfill(result);
cleanup();

View file

@ -118,12 +118,6 @@ protected:
virtual kj::Promise<Result<WorkResult>> workImpl() noexcept = 0;
public:
/**
* Exception containing an error message, if any.
*/
std::shared_ptr<Error> ex;
explicit Goal(Worker & worker, bool isDependency)
: worker(worker)
, isDependency(isDependency)