From b3a9fb9d05e5117413eb87867cebd0ecc2f59b7e Mon Sep 17 00:00:00 2001 From: V Date: Thu, 29 Feb 2024 00:18:40 +0100 Subject: [PATCH] treewide: stop `run` from discarding error messages In most cases where this function is used, suppressing only the standard output is more appropriate. Culling diagnostic output hides error messages and makes debugging more difficult and confusing. `$DRY_RUN_NULL`, which the `--silence` flag replaced, was used both for suppressing standard output on its own, and for doing so along with diagnostic output; however, when the `run` function was added this distinction was lost, and both outputs would be discarded. This reintroduces the needed functionality, and changes usages of `--silence` to `--quiet` where previously only standard output was suppressed, or where this should have probably been the case anyway. Change-Id: Ifb1b52a1d1eea0117261c782d686ad7c71b43162 --- lib/bash/home-manager.sh | 12 +++++++++++- modules/files.nix | 2 +- modules/home-environment.nix | 6 ++++++ modules/lib-bash/activation-init.sh | 2 +- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/bash/home-manager.sh b/lib/bash/home-manager.sh index 19cbaa687..2b9c2d01e 100644 --- a/lib/bash/home-manager.sh +++ b/lib/bash/home-manager.sh @@ -99,16 +99,26 @@ function _iVerbose() { # Runs the given command on live run, otherwise prints the command to standard # output. # +# If given the command line option `--quiet`, then the command's standard output +# is sent to `/dev/null` on a live run. +# # If given the command line option `--silence`, then the command's standard and # error output is sent to `/dev/null` on a live run. +# +# The `--silence` and `--quiet` flags are mutually exclusive. function run() { - if [[ $1 == '--silence' ]]; then + if [[ $1 == '--quiet' ]]; then + local quiet=1 + shift + elif [[ $1 == '--silence' ]]; then local silence=1 shift fi if [[ -v DRY_RUN ]] ; then echo "$@" + elif [[ -v quiet ]] ; then + "$@" > /dev/null elif [[ -v silence ]] ; then "$@" > /dev/null 2>&1 else diff --git a/modules/files.nix b/modules/files.nix index 327cf1bbd..05445e843 100644 --- a/modules/files.nix +++ b/modules/files.nix @@ -274,7 +274,7 @@ in run nix-env $VERBOSE_ARG --profile "$genProfilePath" --set "$newGenPath" fi - run --silence nix-store --realise "$newGenPath" --add-root "$newGenGcPath" + run --quiet nix-store --realise "$newGenPath" --add-root "$newGenGcPath" if [[ -e "$legacyGenGcPath" ]]; then run rm $VERBOSE_ARG "$legacyGenGcPath" fi diff --git a/modules/home-environment.nix b/modules/home-environment.nix index 27a71e457..1728fa458 100644 --- a/modules/home-environment.nix +++ b/modules/home-environment.nix @@ -405,11 +405,17 @@ in : Runs the given command on live run, otherwise prints the command to standard output. + {command}`run --quiet {command}` + : Runs the given command on live run and sends its standard output to + {file}`/dev/null`, otherwise prints the command to standard output. + {command}`run --silence {command}` : Runs the given command on live run and sends its standard and error output to {file}`/dev/null`, otherwise prints the command to standard output. + The `--quiet` and `--silence` flags are mutually exclusive. + A script block should also respect the {var}`VERBOSE` variable, and if set print information on standard out that may be useful for debugging any issue that may arise. The variable {var}`VERBOSE_ARG` is set to diff --git a/modules/lib-bash/activation-init.sh b/modules/lib-bash/activation-init.sh index 9a38e7c5a..9e5ea200f 100755 --- a/modules/lib-bash/activation-init.sh +++ b/modules/lib-bash/activation-init.sh @@ -115,7 +115,7 @@ function nixProfileRemove() { nixProfileList "$1" | xargs -rt $DRY_RUN_CMD nix profile remove $VERBOSE_ARG else if nix-env -q | grep -q "^$1$"; then - run --silence nix-env -e "$1" + run --quiet nix-env -e "$1" fi fi }