mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-22 05:56:15 +02:00
fix: warn and document when advanced attributes will have no impact due to __structuredAttrs
This commit is contained in:
parent
12355e7ac5
commit
4809e59b7e
5 changed files with 48 additions and 1 deletions
|
@ -301,6 +301,12 @@ Derivations can declare some infrequently used optional attributes.
|
||||||
(associative) arrays. For example, the attribute `hardening.format = true`
|
(associative) arrays. For example, the attribute `hardening.format = true`
|
||||||
ends up as the Bash associative array element `${hardening[format]}`.
|
ends up as the Bash associative array element `${hardening[format]}`.
|
||||||
|
|
||||||
|
> **Warning**
|
||||||
|
>
|
||||||
|
> If set to `true`, other advanced attributes such as [`allowedReferences`](#adv-attr-allowedReferences), [`allowedReferences`](#adv-attr-allowedReferences), [`allowedRequisites`](#adv-attr-allowedRequisites),
|
||||||
|
[`disallowedReferences`](#adv-attr-disallowedReferences) and [`disallowedRequisites`](#adv-attr-disallowedRequisites), maxSize, and maxClosureSize.
|
||||||
|
will have no effect.
|
||||||
|
|
||||||
- [`outputChecks`]{#adv-attr-outputChecks}\
|
- [`outputChecks`]{#adv-attr-outputChecks}\
|
||||||
When using [structured attributes](#adv-attr-structuredAttrs), the `outputChecks`
|
When using [structured attributes](#adv-attr-structuredAttrs), the `outputChecks`
|
||||||
attribute allows defining checks per-output.
|
attribute allows defining checks per-output.
|
||||||
|
|
|
@ -423,6 +423,12 @@ EvalState::EvalState(
|
||||||
, sRight(symbols.create("right"))
|
, sRight(symbols.create("right"))
|
||||||
, sWrong(symbols.create("wrong"))
|
, sWrong(symbols.create("wrong"))
|
||||||
, sStructuredAttrs(symbols.create("__structuredAttrs"))
|
, sStructuredAttrs(symbols.create("__structuredAttrs"))
|
||||||
|
, sAllowedReferences(symbols.create("allowedReferences"))
|
||||||
|
, sAllowedRequisites(symbols.create("allowedRequisites"))
|
||||||
|
, sDisallowedReferences(symbols.create("disallowedReferences"))
|
||||||
|
, sDisallowedRequisites(symbols.create("disallowedRequisites"))
|
||||||
|
, sMaxSize(symbols.create("maxSize"))
|
||||||
|
, sMaxClosureSize(symbols.create("maxClosureSize"))
|
||||||
, sBuilder(symbols.create("builder"))
|
, sBuilder(symbols.create("builder"))
|
||||||
, sArgs(symbols.create("args"))
|
, sArgs(symbols.create("args"))
|
||||||
, sContentAddressed(symbols.create("__contentAddressed"))
|
, sContentAddressed(symbols.create("__contentAddressed"))
|
||||||
|
|
|
@ -173,7 +173,10 @@ public:
|
||||||
const Symbol sWith, sOutPath, sDrvPath, sType, sMeta, sName, sValue,
|
const Symbol sWith, sOutPath, sDrvPath, sType, sMeta, sName, sValue,
|
||||||
sSystem, sOverrides, sOutputs, sOutputName, sIgnoreNulls,
|
sSystem, sOverrides, sOutputs, sOutputName, sIgnoreNulls,
|
||||||
sFile, sLine, sColumn, sFunctor, sToString,
|
sFile, sLine, sColumn, sFunctor, sToString,
|
||||||
sRight, sWrong, sStructuredAttrs, sBuilder, sArgs,
|
sRight, sWrong, sStructuredAttrs,
|
||||||
|
sAllowedReferences, sAllowedRequisites, sDisallowedReferences, sDisallowedRequisites,
|
||||||
|
sMaxSize, sMaxClosureSize,
|
||||||
|
sBuilder, sArgs,
|
||||||
sContentAddressed, sImpure,
|
sContentAddressed, sImpure,
|
||||||
sOutputHash, sOutputHashAlgo, sOutputHashMode,
|
sOutputHash, sOutputHashAlgo, sOutputHashMode,
|
||||||
sRecurseForDerivations,
|
sRecurseForDerivations,
|
||||||
|
|
|
@ -1308,6 +1308,20 @@ static void derivationStrictInternal(
|
||||||
handleOutputs(ss);
|
handleOutputs(ss);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (i->name == state.sAllowedReferences)
|
||||||
|
warn("In a derivation named '%s', 'structuredAttrs' disables the effect of the derivation attribute 'allowedReferences'; use 'outputChecks.<output>.allowedReferences' instead", drvName);
|
||||||
|
if (i->name == state.sAllowedRequisites)
|
||||||
|
warn("In a derivation named '%s', 'structuredAttrs' disables the effect of the derivation attribute 'allowedRequisites'; use 'outputChecks.<output>.allowedRequisites' instead", drvName);
|
||||||
|
if (i->name == state.sDisallowedReferences)
|
||||||
|
warn("In a derivation named '%s', 'structuredAttrs' disables the effect of the derivation attribute 'disallowedReferences'; use 'outputChecks.<output>.disallowedReferences' instead", drvName);
|
||||||
|
if (i->name == state.sDisallowedRequisites)
|
||||||
|
warn("In a derivation named '%s', 'structuredAttrs' disables the effect of the derivation attribute 'disallowedRequisites'; use 'outputChecks.<output>.disallowedRequisites' instead", drvName);
|
||||||
|
if (i->name == state.sMaxSize)
|
||||||
|
warn("In a derivation named '%s', 'structuredAttrs' disables the effect of the derivation attribute 'maxSize'; use 'outputChecks.<output>.maxSize' instead", drvName);
|
||||||
|
if (i->name == state.sMaxClosureSize)
|
||||||
|
warn("In a derivation named '%s', 'structuredAttrs' disables the effect of the derivation attribute 'maxClosureSize'; use 'outputChecks.<output>.maxClosureSize' instead", drvName);
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
auto s = state.coerceToString(pos, *i->value, context, context_below, true).toOwned();
|
auto s = state.coerceToString(pos, *i->value, context, context_below, true).toOwned();
|
||||||
drv.env.emplace(key, s);
|
drv.env.emplace(key, s);
|
||||||
|
|
|
@ -2904,6 +2904,24 @@ void LocalDerivationGoal::checkOutputs(const std::map<std::string, ValidPathInfo
|
||||||
};
|
};
|
||||||
|
|
||||||
if (auto structuredAttrs = parsedDrv->getStructuredAttrs()) {
|
if (auto structuredAttrs = parsedDrv->getStructuredAttrs()) {
|
||||||
|
if (get(*structuredAttrs, "allowedReferences")){
|
||||||
|
warn("'structuredAttrs' disables the effect of the top-level attribute 'allowedReferences'; use 'outputChecks' instead");
|
||||||
|
}
|
||||||
|
if (get(*structuredAttrs, "allowedRequisites")){
|
||||||
|
warn("'structuredAttrs' disables the effect of the top-level attribute 'allowedRequisites'; use 'outputChecks' instead");
|
||||||
|
}
|
||||||
|
if (get(*structuredAttrs, "disallowedRequisites")){
|
||||||
|
warn("'structuredAttrs' disables the effect of the top-level attribute 'disallowedRequisites'; use 'outputChecks' instead");
|
||||||
|
}
|
||||||
|
if (get(*structuredAttrs, "disallowedReferences")){
|
||||||
|
warn("'structuredAttrs' disables the effect of the top-level attribute 'disallowedReferences'; use 'outputChecks' instead");
|
||||||
|
}
|
||||||
|
if (get(*structuredAttrs, "maxSize")){
|
||||||
|
warn("'structuredAttrs' disables the effect of the top-level attribute 'maxSize'; use 'outputChecks' instead");
|
||||||
|
}
|
||||||
|
if (get(*structuredAttrs, "maxClosureSize")){
|
||||||
|
warn("'structuredAttrs' disables the effect of the top-level attribute 'maxClosureSize'; use 'outputChecks' instead");
|
||||||
|
}
|
||||||
if (auto outputChecks = get(*structuredAttrs, "outputChecks")) {
|
if (auto outputChecks = get(*structuredAttrs, "outputChecks")) {
|
||||||
if (auto output = get(*outputChecks, outputName)) {
|
if (auto output = get(*outputChecks, outputName)) {
|
||||||
Checks checks;
|
Checks checks;
|
||||||
|
|
Loading…
Reference in a new issue