386b38d1

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

config: exclude DeprecatedWarnSetting names from GlobalConfig::toKeyValue()

Since nix 2.34 (commit 5184f844b, "New diagnostics infra"), every `nix`
command run inside a post-build-hook emits a spurious deprecation warning:

  warning: 'warn-short-path-literals' is deprecated,
           use 'lint-short-path-literals = ignore' instead

even when the user never set `warn-short-path-literals`. The cause:
`DeprecatedWarnSetting` registers the deprecated name via `addSetting()`
with `isAlias = false`, making it a primary setting. `Config::getSettings()`
skips aliases but includes primary settings. `GlobalConfig::toKeyValue()`
calls `getSettings()` and serialises the result into `NIX_CONFIG`. The
daemon injects this into every post-build-hook subprocess environment
(`derivation-goal.cc`) and into `nix repl` subprocesses (`repl.cc`). Any
`nix` command in the hook then reads `NIX_CONFIG`, hits
`DeprecatedWarnSetting::assign()`, and fires the warning.

Fix: add an `excludeFromKeyValue` flag to `Config::SettingData`. When set,
`getSettings()` skips the setting, removing it from `GlobalConfig::toKeyValue()`
/ `NIX_CONFIG`. A new `Config::excludeSettingFromKeyValue()` method (which
asserts the name exists, to catch misuse) sets the flag. `DeprecatedWarnSetting`
calls it immediately after `addSetting()`.

This is preferable to making the setting a true alias (`isAlias = true`),
which would also drop the `--warn-short-path-literals` /
`--no-warn-short-path-literals` CLI flags since `convertToArgs()` skips
aliases. With `excludeFromKeyValue`, reading the setting from `nix.conf` /
`NIX_CONFIG` still works and still emits the deprecation warning when
explicitly set by the user; CLI flags are unaffected.

Add a regression test in `tests/functional/short-path-literals.sh` that
builds a derivation with a post-build-hook capturing `$NIX_CONFIG` and
asserts `warn-short-path-literals` is absent.

Fixes: https://github.com/NixOS/nix/issues/15819
dockerImageinstallTestsinstallerScriptForGHAnix-everything-pkg-confignix-expr-tests-runnix-fetchers-tests-runnix-flake-tests-runnix-functional-testsnix-json-schema-checksnix-manual-linkchecknix-store-tests-runnix-util-tests-runnixpkgsLibTestspackaging-overridingperlBindingspre-commitrepl-completionrl-nextconfigurecross-armv6l-unknown-linux-gnueabihfcross-armv7l-unknown-linux-gnueabihfcross-riscv64-unknown-linux-gnucross-x86_64-unknown-freebsdcross-x86_64-w64-mingw32devShellllvm-ccacheStdenvllvm-clangStdenvllvm-gccStdenvllvm-libcxxStdenvllvm-stdenvnativenative-ccacheStdenvnative-clangStdenvnative-gccStdenvnative-libcxxStdenvnative-stdenvstatic-ccacheStdenvstatic-clangStdenvstatic-gccStdenvstatic-libcxxStdenvstatic-stdenvbinaryTarballchangelog-ddefaultdockerImageinstallerScriptForGHAnixnix-clinix-cli-armv6l-unknown-linux-gnueabihfnix-cli-armv7l-unknown-linux-gnueabihfnix-cli-ccacheStdenvnix-cli-clangStdenvnix-cli-gccStdenvnix-cli-libcxxStdenvnix-cli-llvmnix-cli-riscv64-unknown-linux-gnunix-cli-staticnix-cli-stdenvnix-cli-x86_64-unknown-freebsdnix-cli-x86_64-w64-mingw32nix-cmdnix-cmd-armv6l-unknown-linux-gnueabihfnix-cmd-armv7l-unknown-linux-gnueabihfnix-cmd-ccacheStdenvnix-cmd-clangStdenvnix-cmd-gccStdenvnix-cmd-libcxxStdenvnix-cmd-llvmnix-cmd-riscv64-unknown-linux-gnunix-cmd-staticnix-cmd-stdenvnix-cmd-x86_64-unknown-freebsdnix-cmd-x86_64-w64-mingw32nix-everythingnix-everything-armv6l-unknown-linux-gnueabihfnix-everything-armv7l-unknown-linux-gnueabihfnix-everything-ccacheStdenvnix-everything-clangStdenvnix-everything-gccStdenvnix-everything-libcxxStdenvnix-everything-llvmnix-everything-riscv64-unknown-linux-gnunix-everything-staticnix-everything-stdenvnix-everything-x86_64-unknown-freebsdnix-everything-x86_64-w64-mingw32nix-exprnix-expr-armv6l-unknown-linux-gnueabihfnix-expr-armv7l-unknown-linux-gnueabihfnix-expr-cnix-expr-c-armv6l-unknown-linux-gnueabihfnix-expr-c-armv7l-unknown-linux-gnueabihfnix-expr-c-ccacheStdenvnix-expr-c-clangStdenvnix-expr-c-gccStdenvnix-expr-c-libcxxStdenvnix-expr-c-llvmnix-expr-c-riscv64-unknown-linux-gnunix-expr-c-staticnix-expr-c-stdenvnix-expr-c-x86_64-unknown-freebsdnix-expr-c-x86_64-w64-mingw32nix-expr-ccacheStdenvnix-expr-clangStdenvnix-expr-gccStdenvnix-expr-libcxxStdenvnix-expr-llvmnix-expr-riscv64-unknown-linux-gnunix-expr-staticnix-expr-stdenvnix-expr-test-supportnix-expr-test-support-armv6l-unknown-linux-gnueabihfnix-expr-test-support-armv7l-unknown-linux-gnueabihfnix-expr-test-support-ccacheStdenvnix-expr-test-support-clangStdenvnix-expr-test-support-gccStdenvnix-expr-test-support-libcxxStdenvnix-expr-test-support-llvmnix-expr-test-support-riscv64-unknown-linux-gnunix-expr-test-support-staticnix-expr-test-support-stdenvnix-expr-test-support-x86_64-unknown-freebsdnix-expr-test-support-x86_64-w64-mingw32nix-expr-testsnix-expr-tests-armv6l-unknown-linux-gnueabihfnix-expr-tests-armv7l-unknown-linux-gnueabihfnix-expr-tests-ccacheStdenvnix-expr-tests-clangStdenvnix-expr-tests-gccStdenvnix-expr-tests-libcxxStdenvnix-expr-tests-llvmnix-expr-tests-riscv64-unknown-linux-gnunix-expr-tests-staticnix-expr-tests-stdenvnix-expr-tests-x86_64-unknown-freebsdnix-expr-tests-x86_64-w64-mingw32nix-expr-x86_64-unknown-freebsdnix-expr-x86_64-w64-mingw32nix-external-api-docsnix-fetchersnix-fetchers-armv6l-unknown-linux-gnueabihfnix-fetchers-armv7l-unknown-linux-gnueabihfnix-fetchers-cnix-fetchers-c-armv6l-unknown-linux-gnueabihfnix-fetchers-c-armv7l-unknown-linux-gnueabihfnix-fetchers-c-ccacheStdenvnix-fetchers-c-clangStdenvnix-fetchers-c-gccStdenvnix-fetchers-c-libcxxStdenvnix-fetchers-c-llvmnix-fetchers-c-riscv64-unknown-linux-gnunix-fetchers-c-staticnix-fetchers-c-stdenvnix-fetchers-c-x86_64-unknown-freebsdnix-fetchers-c-x86_64-w64-mingw32nix-fetchers-ccacheStdenvnix-fetchers-clangStdenvnix-fetchers-gccStdenvnix-fetchers-libcxxStdenvnix-fetchers-llvmnix-fetchers-riscv64-unknown-linux-gnunix-fetchers-staticnix-fetchers-stdenvnix-fetchers-testsnix-fetchers-tests-armv6l-unknown-linux-gnueabihfnix-fetchers-tests-armv7l-unknown-linux-gnueabihfnix-fetchers-tests-ccacheStdenvnix-fetchers-tests-clangStdenvnix-fetchers-tests-gccStdenvnix-fetchers-tests-libcxxStdenvnix-fetchers-tests-llvmnix-fetchers-tests-riscv64-unknown-linux-gnunix-fetchers-tests-staticnix-fetchers-tests-stdenvnix-fetchers-tests-x86_64-unknown-freebsdnix-fetchers-tests-x86_64-w64-mingw32nix-fetchers-x86_64-unknown-freebsdnix-fetchers-x86_64-w64-mingw32nix-flakenix-flake-armv6l-unknown-linux-gnueabihfnix-flake-armv7l-unknown-linux-gnueabihfnix-flake-cnix-flake-c-armv6l-unknown-linux-gnueabihfnix-flake-c-armv7l-unknown-linux-gnueabihfnix-flake-c-ccacheStdenvnix-flake-c-clangStdenvnix-flake-c-gccStdenvnix-flake-c-libcxxStdenvnix-flake-c-llvmnix-flake-c-riscv64-unknown-linux-gnunix-flake-c-staticnix-flake-c-stdenvnix-flake-c-x86_64-unknown-freebsdnix-flake-c-x86_64-w64-mingw32nix-flake-ccacheStdenvnix-flake-clangStdenvnix-flake-gccStdenvnix-flake-libcxxStdenvnix-flake-llvmnix-flake-riscv64-unknown-linux-gnunix-flake-staticnix-flake-stdenvnix-flake-testsnix-flake-tests-armv6l-unknown-linux-gnueabihfnix-flake-tests-armv7l-unknown-linux-gnueabihfnix-flake-tests-ccacheStdenvnix-flake-tests-clangStdenvnix-flake-tests-gccStdenvnix-flake-tests-libcxxStdenvnix-flake-tests-llvmnix-flake-tests-riscv64-unknown-linux-gnunix-flake-tests-staticnix-flake-tests-stdenvnix-flake-tests-x86_64-unknown-freebsdnix-flake-tests-x86_64-w64-mingw32nix-flake-x86_64-unknown-freebsdnix-flake-x86_64-w64-mingw32nix-functional-testsnix-functional-tests-ccacheStdenvnix-functional-tests-clangStdenvnix-functional-tests-gccStdenvnix-functional-tests-libcxxStdenvnix-functional-tests-llvmnix-functional-tests-staticnix-functional-tests-stdenvnix-internal-api-docsnix-json-schema-checksnix-json-schema-checks-ccacheStdenvnix-json-schema-checks-clangStdenvnix-json-schema-checks-gccStdenvnix-json-schema-checks-libcxxStdenvnix-json-schema-checks-llvmnix-json-schema-checks-staticnix-json-schema-checks-stdenvnix-mainnix-main-armv6l-unknown-linux-gnueabihfnix-main-armv7l-unknown-linux-gnueabihfnix-main-cnix-main-c-armv6l-unknown-linux-gnueabihfnix-main-c-armv7l-unknown-linux-gnueabihfnix-main-c-ccacheStdenvnix-main-c-clangStdenvnix-main-c-gccStdenvnix-main-c-libcxxStdenvnix-main-c-llvmnix-main-c-riscv64-unknown-linux-gnunix-main-c-staticnix-main-c-stdenvnix-main-c-x86_64-unknown-freebsdnix-main-c-x86_64-w64-mingw32nix-main-ccacheStdenvnix-main-clangStdenvnix-main-gccStdenvnix-main-libcxxStdenvnix-main-llvmnix-main-riscv64-unknown-linux-gnunix-main-staticnix-main-stdenvnix-main-x86_64-unknown-freebsdnix-main-x86_64-w64-mingw32nix-manualnix-manual-manpages-onlynix-nswrappernix-nswrapper-armv6l-unknown-linux-gnueabihfnix-nswrapper-armv7l-unknown-linux-gnueabihfnix-nswrapper-ccacheStdenvnix-nswrapper-clangStdenvnix-nswrapper-gccStdenvnix-nswrapper-libcxxStdenvnix-nswrapper-llvmnix-nswrapper-riscv64-unknown-linux-gnunix-nswrapper-staticnix-nswrapper-stdenvnix-perl-bindingsnix-perl-bindings-ccacheStdenvnix-perl-bindings-clangStdenvnix-perl-bindings-gccStdenvnix-perl-bindings-libcxxStdenvnix-perl-bindings-llvmnix-perl-bindings-staticnix-perl-bindings-stdenvnix-storenix-store-armv6l-unknown-linux-gnueabihfnix-store-armv7l-unknown-linux-gnueabihfnix-store-cnix-store-c-armv6l-unknown-linux-gnueabihfnix-store-c-armv7l-unknown-linux-gnueabihfnix-store-c-ccacheStdenvnix-store-c-clangStdenvnix-store-c-gccStdenvnix-store-c-libcxxStdenvnix-store-c-llvmnix-store-c-riscv64-unknown-linux-gnunix-store-c-staticnix-store-c-stdenvnix-store-c-x86_64-unknown-freebsdnix-store-c-x86_64-w64-mingw32nix-store-ccacheStdenvnix-store-clangStdenvnix-store-gccStdenvnix-store-libcxxStdenvnix-store-llvmnix-store-riscv64-unknown-linux-gnunix-store-staticnix-store-stdenvnix-store-test-supportnix-store-test-support-armv6l-unknown-linux-gnueabihfnix-store-test-support-armv7l-unknown-linux-gnueabihfnix-store-test-support-ccacheStdenvnix-store-test-support-clangStdenvnix-store-test-support-gccStdenvnix-store-test-support-libcxxStdenvnix-store-test-support-llvmnix-store-test-support-riscv64-unknown-linux-gnunix-store-test-support-staticnix-store-test-support-stdenvnix-store-test-support-x86_64-unknown-freebsdnix-store-test-support-x86_64-w64-mingw32nix-store-testsnix-store-tests-armv6l-unknown-linux-gnueabihfnix-store-tests-armv7l-unknown-linux-gnueabihfnix-store-tests-ccacheStdenvnix-store-tests-clangStdenvnix-store-tests-gccStdenvnix-store-tests-libcxxStdenvnix-store-tests-llvmnix-store-tests-riscv64-unknown-linux-gnunix-store-tests-staticnix-store-tests-stdenvnix-store-tests-x86_64-unknown-freebsdnix-store-tests-x86_64-w64-mingw32nix-store-x86_64-unknown-freebsdnix-store-x86_64-w64-mingw32nix-utilnix-util-armv6l-unknown-linux-gnueabihfnix-util-armv7l-unknown-linux-gnueabihfnix-util-cnix-util-c-armv6l-unknown-linux-gnueabihfnix-util-c-armv7l-unknown-linux-gnueabihfnix-util-c-ccacheStdenvnix-util-c-clangStdenvnix-util-c-gccStdenvnix-util-c-libcxxStdenvnix-util-c-llvmnix-util-c-riscv64-unknown-linux-gnunix-util-c-staticnix-util-c-stdenvnix-util-c-x86_64-unknown-freebsdnix-util-c-x86_64-w64-mingw32nix-util-ccacheStdenvnix-util-clangStdenvnix-util-gccStdenvnix-util-libcxxStdenvnix-util-llvmnix-util-riscv64-unknown-linux-gnunix-util-staticnix-util-stdenvnix-util-test-supportnix-util-test-support-armv6l-unknown-linux-gnueabihfnix-util-test-support-armv7l-unknown-linux-gnueabihfnix-util-test-support-ccacheStdenvnix-util-test-support-clangStdenvnix-util-test-support-gccStdenvnix-util-test-support-libcxxStdenvnix-util-test-support-llvmnix-util-test-support-riscv64-unknown-linux-gnunix-util-test-support-staticnix-util-test-support-stdenvnix-util-test-support-x86_64-unknown-freebsdnix-util-test-support-x86_64-w64-mingw32nix-util-testsnix-util-tests-armv6l-unknown-linux-gnueabihfnix-util-tests-armv7l-unknown-linux-gnueabihfnix-util-tests-ccacheStdenvnix-util-tests-clangStdenvnix-util-tests-gccStdenvnix-util-tests-libcxxStdenvnix-util-tests-llvmnix-util-tests-riscv64-unknown-linux-gnunix-util-tests-staticnix-util-tests-stdenvnix-util-tests-x86_64-unknown-freebsdnix-util-tests-x86_64-w64-mingw32nix-util-x86_64-unknown-freebsdnix-util-x86_64-w64-mingw32x86_64-linux