diff options
author | John Ericson <John.Ericson@Obsidian.Systems> | 2023-04-17 19:02:45 -0400 |
---|---|---|
committer | John Ericson <John.Ericson@Obsidian.Systems> | 2023-04-17 19:02:45 -0400 |
commit | 668377f217c0fa4053d746f7094dfe887e07887c (patch) | |
tree | 40f1f7cc892b5f1bde41f1a2d105574c0bb5a716 /src/libexpr | |
parent | f56c4a5bdfb0ec881b8cb0c06940abbea71b5f2b (diff) |
`TextHashMethod` -> `TextIngestionMethod`, gate with XP feature
I suppose we can use `dynamic-derivations` for the few things we neeed.
Diffstat (limited to 'src/libexpr')
-rw-r--r-- | src/libexpr/primops.cc | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc index 2476b7e73..fc397db33 100644 --- a/src/libexpr/primops.cc +++ b/src/libexpr/primops.cc @@ -1105,8 +1105,10 @@ drvName, Bindings * attrs, Value & v) auto handleHashMode = [&](const std::string_view s) { if (s == "recursive") ingestionMethod = FileIngestionMethod::Recursive; else if (s == "flat") ingestionMethod = FileIngestionMethod::Flat; - else if (s == "text") ingestionMethod = TextHashMethod {}; - else + else if (s == "text") { + experimentalFeatureSettings.require(Xp::DynamicDerivations); + ingestionMethod = TextIngestionMethod {}; + } else state.debugThrowLastTrace(EvalError({ .msg = hintfmt("invalid value '%s' for 'outputHashMode' attribute", s), .errPos = state.positions[noPos] @@ -1274,11 +1276,16 @@ drvName, Bindings * attrs, Value & v) })); /* Check whether the derivation name is valid. */ - if (isDerivation(drvName) && ingestionMethod != ContentAddressMethod { TextHashMethod { } }) + if (isDerivation(drvName) && + !(ingestionMethod == ContentAddressMethod { TextIngestionMethod { } } && + outputs.size() == 1 && + *(outputs.begin()) == "out")) + { state.debugThrowLastTrace(EvalError({ .msg = hintfmt("derivation names are allowed to end in '%s' only if they produce a single derivation file", drvExtension), .errPos = state.positions[noPos] })); + } if (outputHash) { /* Handle fixed-output derivations. |