1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-11-09 03:56:01 +01:00

Add reasons to dyndrv xp messages

This commit is contained in:
Robert Hensing 2025-10-13 14:20:08 +02:00
parent 0fd890a8d6
commit 71aa9a4798
4 changed files with 12 additions and 7 deletions

View file

@ -1420,7 +1420,8 @@ static void derivationStrictInternal(EvalState & state, std::string_view drvName
.debugThrow(); .debugThrow();
} }
if (ingestionMethod == ContentAddressMethod::Raw::Text) if (ingestionMethod == ContentAddressMethod::Raw::Text)
experimentalFeatureSettings.require(Xp::DynamicDerivations); experimentalFeatureSettings.require(
Xp::DynamicDerivations, fmt("text-hashed derivation '%s', outputHashMode = \"text\"", drvName));
if (ingestionMethod == ContentAddressMethod::Raw::Git) if (ingestionMethod == ContentAddressMethod::Raw::Git)
experimentalFeatureSettings.require(Xp::GitHashing); experimentalFeatureSettings.require(Xp::GitHashing);
}; };

View file

@ -288,7 +288,7 @@ static DerivationOutput parseDerivationOutput(
if (!hashAlgoStr.empty()) { if (!hashAlgoStr.empty()) {
ContentAddressMethod method = ContentAddressMethod::parsePrefix(hashAlgoStr); ContentAddressMethod method = ContentAddressMethod::parsePrefix(hashAlgoStr);
if (method == ContentAddressMethod::Raw::Text) if (method == ContentAddressMethod::Raw::Text)
xpSettings.require(Xp::DynamicDerivations); xpSettings.require(Xp::DynamicDerivations, "text-hashed derivation output");
const auto hashAlgo = parseHashAlgo(hashAlgoStr); const auto hashAlgo = parseHashAlgo(hashAlgoStr);
if (hashS == "impure"sv) { if (hashS == "impure"sv) {
xpSettings.require(Xp::ImpureDerivations); xpSettings.require(Xp::ImpureDerivations);
@ -426,7 +426,7 @@ Derivation parseDerivation(
if (*versionS == "xp-dyn-drv"sv) { if (*versionS == "xp-dyn-drv"sv) {
// Only version we have so far // Only version we have so far
version = DerivationATermVersion::DynamicDerivations; version = DerivationATermVersion::DynamicDerivations;
xpSettings.require(Xp::DynamicDerivations); xpSettings.require(Xp::DynamicDerivations, fmt("derivation '%s', ATerm format version 'xp-dyn-drv'", name));
} else { } else {
throw FormatError("Unknown derivation ATerm format version '%s'", *versionS); throw FormatError("Unknown derivation ATerm format version '%s'", *versionS);
} }
@ -1301,7 +1301,7 @@ DerivationOutput::fromJSON(const nlohmann::json & _json, const ExperimentalFeatu
auto methodAlgo = [&]() -> std::pair<ContentAddressMethod, HashAlgorithm> { auto methodAlgo = [&]() -> std::pair<ContentAddressMethod, HashAlgorithm> {
ContentAddressMethod method = ContentAddressMethod::parse(getString(valueAt(json, "method"))); ContentAddressMethod method = ContentAddressMethod::parse(getString(valueAt(json, "method")));
if (method == ContentAddressMethod::Raw::Text) if (method == ContentAddressMethod::Raw::Text)
xpSettings.require(Xp::DynamicDerivations); xpSettings.require(Xp::DynamicDerivations, "text-hashed derivation output in JSON");
auto hashAlgo = parseHashAlgo(getString(valueAt(json, "hashAlgo"))); auto hashAlgo = parseHashAlgo(getString(valueAt(json, "hashAlgo")));
return {std::move(method), std::move(hashAlgo)}; return {std::move(method), std::move(hashAlgo)};
@ -1454,7 +1454,7 @@ Derivation Derivation::fromJSON(const nlohmann::json & _json, const Experimental
node.value = getStringSet(valueAt(json, "outputs")); node.value = getStringSet(valueAt(json, "outputs"));
auto drvs = getObject(valueAt(json, "dynamicOutputs")); auto drvs = getObject(valueAt(json, "dynamicOutputs"));
for (auto & [outputId, childNode] : drvs) { for (auto & [outputId, childNode] : drvs) {
xpSettings.require(Xp::DynamicDerivations); xpSettings.require(Xp::DynamicDerivations, fmt("dynamic output '%s' in JSON", outputId));
node.childMap[outputId] = doInput(childNode); node.childMap[outputId] = doInput(childNode);
} }
return node; return node;

View file

@ -85,7 +85,11 @@ void drvRequireExperiment(const SingleDerivedPath & drv, const ExperimentalFeatu
[&](const SingleDerivedPath::Opaque &) { [&](const SingleDerivedPath::Opaque &) {
// plain drv path; no experimental features required. // plain drv path; no experimental features required.
}, },
[&](const SingleDerivedPath::Built &) { xpSettings.require(Xp::DynamicDerivations); }, [&](const SingleDerivedPath::Built & b) {
xpSettings.require(
Xp::DynamicDerivations,
fmt("building output '%s' of '%s'", b.output, b.drvPath->getBaseStorePath().to_string()));
},
}, },
drv.raw()); drv.raw());
} }

View file

@ -24,7 +24,7 @@ DownstreamPlaceholder DownstreamPlaceholder::unknownDerivation(
OutputNameView outputName, OutputNameView outputName,
const ExperimentalFeatureSettings & xpSettings) const ExperimentalFeatureSettings & xpSettings)
{ {
xpSettings.require(Xp::DynamicDerivations); xpSettings.require(Xp::DynamicDerivations, fmt("placeholder for unknown derivation output '%s'", outputName));
auto compressed = compressHash(placeholder.hash, 20); auto compressed = compressHash(placeholder.hash, 20);
auto clearText = auto clearText =
"nix-computed-output:" + compressed.to_string(HashFormat::Nix32, false) + ":" + std::string{outputName}; "nix-computed-output:" + compressed.to_string(HashFormat::Nix32, false) + ":" + std::string{outputName};