aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/build-result.hh
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2022-03-08 19:50:46 +0100
committerEelco Dolstra <edolstra@gmail.com>2022-03-08 19:56:34 +0100
commita4604f19284254ac98f19a13ff7c2216de7fe176 (patch)
tree446fa74304e4d7d9bf434f209e0804543652983a /src/libstore/build-result.hh
parent92b8d4d8861b908a7ec500526a84155c597d6d2b (diff)
Add Store::buildPathsWithResults()
This function is like buildPaths(), except that it returns a vector of BuildResults containing the exact statuses and output paths of each derivation / substitution. This is convenient for functions like Installable::build(), because they then don't need to do another series of calls to get the outputs of CA derivations. It's also a precondition to impure derivations, where we *can't* query the output of those derivations since they're not stored in the Nix database. Note that PathSubstitutionGoal can now also return a BuildStatus.
Diffstat (limited to 'src/libstore/build-result.hh')
-rw-r--r--src/libstore/build-result.hh14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/libstore/build-result.hh b/src/libstore/build-result.hh
index 018ba31b3..c16027808 100644
--- a/src/libstore/build-result.hh
+++ b/src/libstore/build-result.hh
@@ -28,6 +28,7 @@ struct BuildResult
LogLimitExceeded,
NotDeterministic,
ResolvesToAlreadyValid,
+ NoSubstituters,
} status = MiscFailure;
std::string errorMsg;
@@ -63,15 +64,26 @@ struct BuildResult
non-determinism.) */
bool isNonDeterministic = false;
+ /* For derivations, the derivation path and the wanted outputs. */
+ std::optional<StorePath> drvPath;
DrvOutputs builtOutputs;
+ /* For substitutions, the substituted path. */
+ std::optional<StorePath> outPath;
+
/* The start/stop times of the build (or one of the rounds, if it
was repeated). */
time_t startTime = 0, stopTime = 0;
- bool success() {
+ bool success()
+ {
return status == Built || status == Substituted || status == AlreadyValid || status == ResolvesToAlreadyValid;
}
+
+ void rethrow()
+ {
+ throw Error("%s", errorMsg);
+ }
};
}