Merge pull request #140763 from hercules-ci/abort-on-warn

lib.warn: Add NIX_ABORT_ON_WARN for call traces

Changed files
+20 -1
lib
+20 -1
lib/trivial.nix
···
# TODO: figure out a clever way to integrate location information from
# something like __unsafeGetAttrPos.
-
warn = msg: builtins.trace "warning: ${msg}";
warnIf = cond: msg: if cond then warn msg else id;
info = msg: builtins.trace "INFO: ${msg}";
···
# TODO: figure out a clever way to integrate location information from
# something like __unsafeGetAttrPos.
+
/*
+
Print a warning before returning the second argument. This function behaves
+
like `builtins.trace`, but requires a string message and formats it as a
+
warning, including the `warning: ` prefix.
+
+
To get a call stack trace and abort evaluation, set the environment variable
+
`NIX_ABORT_ON_WARN=true` and set the Nix options `--option pure-eval false --show-trace`
+
+
Type: string -> a -> a
+
*/
+
warn =
+
if lib.elem (builtins.getEnv "NIX_ABORT_ON_WARN") ["1" "true" "yes"]
+
then msg: builtins.trace "warning: ${msg}" (abort "NIX_ABORT_ON_WARN=true; warnings are treated as unrecoverable errors.")
+
else msg: builtins.trace "warning: ${msg}";
+
+
/*
+
Like warn, but only warn when the first argument is `true`.
+
+
Type: bool -> string -> a -> a
+
*/
warnIf = cond: msg: if cond then warn msg else id;
info = msg: builtins.trace "INFO: ${msg}";