Skip to content

Commit 211c5ad

Browse files
committed
fix nix_direnv_version terminating direnv
This function is used in our README for a long time to upgrade nix-direnv. Now it's failing execution instead.
1 parent c5b7db3 commit 211c5ad

1 file changed

Lines changed: 18 additions & 14 deletions

File tree

direnvrc

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,7 @@ _nix_direnv_warning() {
2626
fi
2727
}
2828

29-
_nix_direnv_fatal() {
30-
log_error "${_NIX_DIRENV_LOG_PREFIX}$*"
31-
# exit 1 rather than return 1 since we may not be running in strict mode
32-
exit 1
33-
}
29+
_nix_direnv_error() { log_error "${_NIX_DIRENV_LOG_PREFIX}$*"; }
3430

3531
_nix() {
3632
nix --extra-experimental-features "nix-command flakes" "$@"
@@ -39,15 +35,17 @@ _nix() {
3935
_require_version() {
4036
local cmd=$1 version=$2 required=$3
4137
if ! printf "%s\n" "$required" "$version" | LC_ALL=C sort -c -V 2>/dev/null; then
42-
_nix_direnv_fatal \
38+
_nix_direnv_error \
4339
"minimum required $(basename "$cmd") version is $required (installed: $version)"
40+
return 1
4441
fi
4542
}
4643

4744
_require_cmd_version() {
4845
local cmd=$1 required=$2 version
4946
if ! has "$cmd"; then
50-
_nix_direnv_fatal "command not found: $cmd"
47+
_nix_direnv_error "command not found: $cmd"
48+
return 1
5149
fi
5250
version=$($cmd --version)
5351
[[ $version =~ ([0-9]+\.[0-9]+\.[0-9]+) ]]
@@ -57,18 +55,20 @@ _require_cmd_version() {
5755
_nix_direnv_preflight() {
5856
if [[ -z $direnv ]]; then
5957
# shellcheck disable=2016
60-
_nix_direnv_fatal '$direnv environment variable was not defined. Was this script run inside direnv?'
58+
_nix_direnv_error '$direnv environment variable was not defined. Was this script run inside direnv?'
59+
return 1
6160
fi
6261

6362
# check command min versions
6463
if [[ -z ${NIX_DIRENV_SKIP_VERSION_CHECK:-} ]]; then
6564
# bash check uses $BASH_VERSION with _require_version instead of
6665
# _require_cmd_version because _require_cmd_version uses =~ operator which would be
6766
# a syntax error on bash < 3
68-
_require_version bash "$BASH_VERSION" "$BASH_MIN_VERSION"
69-
# direnv stdlib defines $direnv
70-
_require_cmd_version "$direnv" "$DIRENV_MIN_VERSION"
71-
_require_cmd_version nix "$NIX_MIN_VERSION"
67+
if ! _require_version bash "$BASH_VERSION" "$BASH_MIN_VERSION" ||
68+
! _require_cmd_version "$direnv" "$DIRENV_MIN_VERSION" || # direnv stdlib defines $direnv
69+
! _require_cmd_version nix "$NIX_MIN_VERSION"; then
70+
return 1
71+
fi
7272
fi
7373

7474
local layout_dir
@@ -240,7 +240,9 @@ _nix_direnv_warn_manual_reload() {
240240
}
241241

242242
use_flake() {
243-
_nix_direnv_preflight
243+
if ! _nix_direnv_preflight; then
244+
exit 1
245+
fi
244246

245247
flake_expr="${1:-.}"
246248
flake_dir="${flake_expr%#*}"
@@ -329,7 +331,9 @@ use_flake() {
329331
}
330332

331333
use_nix() {
332-
_nix_direnv_preflight
334+
if ! _nix_direnv_preflight; then
335+
exit 1
336+
fi
333337

334338
local layout_dir path version
335339
layout_dir=$(direnv_layout_dir)

0 commit comments

Comments
 (0)