aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/build-result.cc
diff options
context:
space:
mode:
authoreldritch horrors <pennae@lix.systems>2024-07-26 13:28:29 +0200
committereldritch horrors <pennae@lix.systems>2024-07-30 16:37:13 +0000
commit97a389b0bee7baf2d445121afa6ec84bef3a4bd7 (patch)
tree058ea8b5244ffb68cc189e1a61b6a5e4ff9f7e7e /src/libstore/build-result.cc
parent53bfcf2586dea1a43c4d977edc3c78b1538761a7 (diff)
libstore: move Goal::getBuildResult to BuildResult
there are no other uses for this yet, but asking for just a subset of outputs does seem at least somewhat useful to have as a generic thing Change-Id: I30ff5055a666c351b1b086b8d05b9d7c9fb1c77a
Diffstat (limited to 'src/libstore/build-result.cc')
-rw-r--r--src/libstore/build-result.cc23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/libstore/build-result.cc b/src/libstore/build-result.cc
index 18f519c5c..de280c13f 100644
--- a/src/libstore/build-result.cc
+++ b/src/libstore/build-result.cc
@@ -15,4 +15,27 @@ GENERATE_CMP_EXT(
me->cpuUser,
me->cpuSystem);
+KeyedBuildResult BuildResult::restrictTo(DerivedPath path) const
+{
+ KeyedBuildResult res{*this, std::move(path)};
+
+ if (auto pbp = std::get_if<DerivedPath::Built>(&res.path)) {
+ auto & bp = *pbp;
+
+ /* Because goals are in general shared between derived paths
+ that share the same derivation, we need to filter their
+ results to get back just the results we care about.
+ */
+
+ for (auto it = res.builtOutputs.begin(); it != res.builtOutputs.end();) {
+ if (bp.outputs.contains(it->first))
+ ++it;
+ else
+ it = res.builtOutputs.erase(it);
+ }
+ }
+
+ return res;
+}
+
}