aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/downstream-placeholder.cc
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2021-03-10 04:22:56 +0000
committerJohn Ericson <John.Ericson@Obsidian.Systems>2023-08-14 08:44:50 -0400
commite7c39ff00b81dfdc48ebe7f41847db84ba779676 (patch)
treeaa32fd11345e50e45500df107bd3af3a8d7b975d /src/libstore/downstream-placeholder.cc
parenta04720e68ce45943ce0eae3d477f9d554b0d63a4 (diff)
Rework evaluator `SingleDerivedPath` infra
`EvalState::mkSingleDerivedPathString` previously contained its own inverse (printing, rather than parsing) in order to validate what was parsed. Now that is pulled out into its own separate function: `EvalState::coerceToSingleDerivedPath`. In additional that pulled out logic is deduplicated with `EvalState::mkOutputString` via `EvalState::mkOutputStringRaw`, which is itself deduplicated (and generalized) with `DownstreamPlaceholder::mkOutputStringRaw`. All these changes make the unit tests simpler. (We would ideally write more unit tests for `mkSingleDerivedPathString` `coerceToSingleDerivedPath` directly, but we cannot yet do that because the IO in reading the store path won't work when the dummy store cannot hold anything. Someday we'll have a proper in-memory store which will work for this.) Co-authored-by: Robert Hensing <roberth@users.noreply.github.com>
Diffstat (limited to 'src/libstore/downstream-placeholder.cc')
-rw-r--r--src/libstore/downstream-placeholder.cc10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/libstore/downstream-placeholder.cc b/src/libstore/downstream-placeholder.cc
index 885b3604d..d951b7b7d 100644
--- a/src/libstore/downstream-placeholder.cc
+++ b/src/libstore/downstream-placeholder.cc
@@ -39,16 +39,18 @@ DownstreamPlaceholder DownstreamPlaceholder::unknownDerivation(
}
DownstreamPlaceholder DownstreamPlaceholder::fromSingleDerivedPathBuilt(
- const SingleDerivedPath::Built & b)
+ const SingleDerivedPath::Built & b,
+ const ExperimentalFeatureSettings & xpSettings)
{
return std::visit(overloaded {
[&](const SingleDerivedPath::Opaque & o) {
- return DownstreamPlaceholder::unknownCaOutput(o.path, b.output);
+ return DownstreamPlaceholder::unknownCaOutput(o.path, b.output, xpSettings);
},
[&](const SingleDerivedPath::Built & b2) {
return DownstreamPlaceholder::unknownDerivation(
- DownstreamPlaceholder::fromSingleDerivedPathBuilt(b2),
- b.output);
+ DownstreamPlaceholder::fromSingleDerivedPathBuilt(b2, xpSettings),
+ b.output,
+ xpSettings);
},
}, b.drvPath->raw());
}