varstash integration

Fixes: https://github.com/Tarrasch/zsh-autoenv/issues/5
This commit is contained in:
Daniel Hahler 2014-11-15 20:59:39 +01:00
parent 0bcbeb5ae5
commit 5b553ba1ed
2 changed files with 53 additions and 5 deletions

View File

@ -82,14 +82,26 @@ _dotenv_check_authorized_env_file() {
return 0
}
: ${_dotenv_sourced_varstash:=0}
_dotenv_this_dir=${0:A:h}
_dotenv_source() {
local env_file=$1
_dotenv_event=$2
_dotenv_cwd=$PWD
_dotenv_cwd=$3
builtin cd -q ${env_file:h}
source $env_file
# Source varstash library once.
if [[ $_dotenv_sourced_varstash == 0 ]]; then
source $_dotenv_this_dir/lib/varstash
export _dotenv_sourced_varstash=1
fi
# varstash_dir=${env_file:h}
# Change to directory of env file, source it and cd back.
local new_dir=$PWD
builtin cd -q $_dotenv_cwd
source $env_file
builtin cd -q $new_dir
unset _dotenv_event _dotenv_cwd
}
@ -103,7 +115,7 @@ _dotenv_chpwd_handler() {
if ! [[ ${PWD}/ == ${prev_dir}/* ]]; then
local env_file_leave=$prev_dir/$DOTENV_FILE_LEAVE
if _dotenv_check_authorized_env_file $env_file_leave; then
_dotenv_source $env_file_leave leave
_dotenv_source $env_file_leave leave $prev_dir
fi
# Remove this entry from the stack.
_dotenv_stack_entered=(${_dotenv_stack_entered#$prev_dir})
@ -136,7 +148,7 @@ _dotenv_chpwd_handler() {
_dotenv_stack_entered+=(${env_file_dir})
_dotenv_source $env_file enter
_dotenv_source $env_file enter $PWD
}
autoload -U add-zsh-hook

36
tests/varstash.t Normal file
View File

@ -0,0 +1,36 @@
Test varstash integration.
$ source $TESTDIR/setup.sh
Setup test environment.
# Defaults:
# $ DOTENV_FILE_ENTER=.env
# $ DOTENV_FILE_LEAVE=.env.leave
# $ DOTENV_HANDLE_LEAVE=1
$ mkdir sub
$ cd sub
$ echo "autostash FOO=baz" > $DOTENV_FILE_ENTER
$ echo "autounstash" > $DOTENV_FILE_LEAVE
Manually create auth file
$ echo "$PWD/$DOTENV_FILE_ENTER:$(echo $(<$DOTENV_FILE_ENTER) | shasum)" > $ENV_AUTHORIZATION_FILE
$ echo "$PWD/$DOTENV_FILE_LEAVE:$(echo $(<$DOTENV_FILE_LEAVE) | shasum)" >> $ENV_AUTHORIZATION_FILE
Set environment variable.
$ FOO=bar
Activating the env stashes it and applies a new value.
$ cd .
$ echo $FOO
baz
Leaving the directory unstashes it.
$ cd ..
$ echo $FOO
bar