From: Daniel Hahler Date: Mon, 8 Dec 2014 20:37:25 +0000 (+0100) Subject: Fixes after using `setopt nounset` during tests X-Git-Url: http://www.git.stargrave.org/?p=zsh-autoenv.git;a=commitdiff_plain;h=e567a4059230880d1f9359567a913dbbf8078fea Fixes after using `setopt nounset` during tests Also add tests for unset variable with varstash. --- diff --git a/autoenv.zsh b/autoenv.zsh index f87f350..db77553 100644 --- a/autoenv.zsh +++ b/autoenv.zsh @@ -41,9 +41,8 @@ autoenv_source_parent() { # Internal functions. {{{ # Internal: stack of entered (and handled) directories. {{{ -_autoenv_stack_entered=() +typeset -a _autoenv_stack_entered typeset -A _autoenv_stack_entered_mtime -_autoenv_stack_entered_mtime=() # Add an entry to the stack, and remember its mtime. _autoenv_stack_entered_add() { @@ -126,10 +125,8 @@ zmodload -F zsh/stat b:zstat # A fixed hash value can be given as 2nd arg, but is used with tests only. _autoenv_hash_pair() { local env_file=${1:A} - local env_shasum - if [[ -n $2 ]]; then - env_shasum=$2 - else + local env_shasum=${2:-} + if [[ -z $env_shasum ]]; then if ! [[ -e $env_file ]]; then echo "Missing file argument for _autoenv_hash_pair!" >&2 return 1 @@ -220,7 +217,7 @@ _autoenv_source() { # Change to directory of env file, source it and cd back. local new_dir=$PWD builtin cd -q $_autoenv_envfile_dir - _autoenv_debug "== SOURCE: ${bold_color}$env_file${reset_color}\n PWD: $PWD" + _autoenv_debug "== SOURCE: ${bold_color:-}$env_file${reset_color:-}\n PWD: $PWD" (( _autoenv_debug_indent++ )) source $env_file (( _autoenv_debug_indent-- )) @@ -276,7 +273,7 @@ _autoenv_chpwd_handler() { _autoenv_source $env_file_leave leave $prev_dir fi - # Unstash any autostash'd stuff. + # Unstash any autostashed stuff. varstash_dir=$prev_dir autounstash _autoenv_stack_entered_remove $prev_file diff --git a/tests/autoenv.t b/tests/autoenv.t index 19d0592..701e3b4 100644 --- a/tests/autoenv.t +++ b/tests/autoenv.t @@ -12,7 +12,7 @@ Manually create auth file Now try to make it accept it - $ unset _autoenv_stack_entered + $ _autoenv_stack_entered=() $ rm $AUTOENV_ENV_FILENAME $ _autoenv_ask_for_yes() { echo "yes" } $ cd . @@ -33,11 +33,11 @@ The last "ENTERED" is because it executed the command. Now lets see that it actually checks the shasum value. - $ unset _autoenv_stack_entered + $ _autoenv_stack_entered=() $ cd . ENTERED - $ unset _autoenv_stack_entered + $ _autoenv_stack_entered=() $ rm $AUTOENV_ENV_FILENAME $ test_autoenv_add_to_env $PWD/.env mischief $ cd . @@ -56,7 +56,7 @@ Now lets see that it actually checks the shasum value. Now, will it take no for an answer? - $ unset _autoenv_stack_entered + $ _autoenv_stack_entered=() $ rm $AUTOENV_ENV_FILENAME $ _autoenv_ask_for_yes() { echo "no"; return 1 } $ cd . diff --git a/tests/setup.sh b/tests/setup.sh index 90bfc51..5c6ae9e 100644 --- a/tests/setup.sh +++ b/tests/setup.sh @@ -1,6 +1,10 @@ # Ensure we have our mocked out AUTOENV_ENV_FILENAME # (via .zshenv). +# Treat unset variables as errors. +# Not handled in varstash yet. +# setopt nounset + [[ $AUTOENV_ENV_FILENAME[0,4] == '/tmp' ]] || return 1 # Reset any authentication. @@ -8,7 +12,7 @@ echo -n > $AUTOENV_ENV_FILENAME # Add file $1 (with optional hash $2) to authentication file. test_autoenv_add_to_env() { - _autoenv_hash_pair $1 $2 >> $AUTOENV_ENV_FILENAME + _autoenv_hash_pair $1 ${2:-} >> $AUTOENV_ENV_FILENAME } # Add enter and leave env files to authentication file. diff --git a/tests/varstash.t b/tests/varstash.t index 30a45dd..cdb47a8 100644 --- a/tests/varstash.t +++ b/tests/varstash.t @@ -36,31 +36,23 @@ Test autounstashing when leaving a directory. {{{ Setup: + $ unset VAR $ cd sub ENTER $ echo 'echo ENTER; autostash VAR=changed' > $AUTOENV_FILE_ENTER $ echo 'echo LEAVE; echo "no explicit call to autounstash"' > $AUTOENV_FILE_LEAVE $ test_autoenv_auth_env_files -$VAR is empty: +$VAR is unset: - $ echo VAR:$VAR - VAR: + $ echo VAR_set:$+VAR + VAR_set:0 -Set it: +Trigger the autostashing in the enter file. - $ VAR=orig $ cd .. LEAVE no explicit call to autounstash - -Leaving the directory keeps it intact - nothing had been stashed yet. - - $ echo $VAR - orig - -Enter the dir, trigger the autostashing. - $ cd sub ENTER $ echo $VAR @@ -71,9 +63,8 @@ Now leave again. $ cd .. LEAVE no explicit call to autounstash - $ echo $VAR - orig - + $ echo VAR_set:$+VAR + VAR_set:0 Remove the leave file, auto-unstashing should still happen. @@ -83,7 +74,20 @@ Remove the leave file, auto-unstashing should still happen. $ echo $VAR changed $ cd .. + $ echo VAR_set:$+VAR + VAR_set:0 + +And once again where a value gets restored. + + $ VAR=orig_2 $ echo $VAR - orig + orig_2 + $ cd sub + ENTER + $ echo $VAR + changed + $ cd .. + $ echo $VAR + orig_2 }}}