From: Daniel Hahler Date: Tue, 20 Jan 2015 10:16:37 +0000 (+0100) Subject: Merge branch 'allow-disable' X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=e07a47f5662b865608978834bf65ee34d53e2e67;hp=-c;p=zsh-autoenv.git Merge branch 'allow-disable' Closes: #20 --- e07a47f5662b865608978834bf65ee34d53e2e67 diff --combined autoenv.zsh index c569ef8,d4cd642..24f4b04 --- a/autoenv.zsh +++ b/autoenv.zsh @@@ -21,6 -21,9 +21,9 @@@ export AUTOENV_ENV_FILENAME=$HOME/.env_ # Enable debugging. Multiple levels are supported (max 2). : ${AUTOENV_DEBUG:=0} + # (Temporarily) disable zsh-autoenv. This gets looked at in the chpwd handler. + : ${AUTOENV_DISABLED:=0} + # Public helper functions, which can be used from your .env files: # # Source the next .env file from parent directories. @@@ -74,24 -77,11 +77,24 @@@ _autoenv_stack_entered_remove() } # Is the given entry already in the stack? +# This checks for the env_file ($1) as-is and with symlinks resolved. _autoenv_stack_entered_contains() { local env_file=$1 + local f i if (( ${+_autoenv_stack_entered[(r)${env_file}]} )); then # Entry is in stack. - if [[ $_autoenv_stack_entered_mtime[$env_file] == $(_autoenv_get_file_mtime $env_file) ]]; then + f=$env_file + else + for i in $_autoenv_stack_entered; do + if [[ ${i:A} == ${env_file:A} ]]; then + # Entry is in stack (compared with resolved symlinks). + f=$i + break + fi + done + fi + if [[ -n $f ]]; then + if [[ $_autoenv_stack_entered_mtime[$f] == $(_autoenv_get_file_mtime $f) ]]; then # Entry has the expected mtime. return fi @@@ -280,16 -270,22 +283,22 @@@ _autoenv_get_file_upwards() _autoenv_chpwd_prev_dir=$PWD _autoenv_chpwd_handler() { - local env_file="$PWD/$AUTOENV_FILE_ENTER" - _autoenv_debug "Calling chpwd handler: PWD=$PWD" + if (( $AUTOENV_DISABLED )); then + _autoenv_debug "Disabled (AUTOENV_DISABLED)." + return + fi + + local env_file="$PWD/$AUTOENV_FILE_ENTER" + _autoenv_debug "env_file: $env_file" + # Handle leave event for previously sourced env files. if [[ $AUTOENV_HANDLE_LEAVE == 1 ]] && (( $#_autoenv_stack_entered )); then local prev_file prev_dir for prev_file in ${_autoenv_stack_entered}; do - prev_dir=${prev_file:A:h} - if ! [[ ${PWD:A}/ == ${prev_dir}/* ]]; then + prev_dir=${prev_file:h} + if ! [[ ${PWD}/ == ${prev_dir}/* ]]; then local env_file_leave=$prev_dir/$AUTOENV_FILE_LEAVE if _autoenv_check_authorized_env_file $env_file_leave; then _autoenv_source $env_file_leave leave $prev_dir