mirror of
https://github.com/Tarrasch/zsh-autoenv.git
synced 2024-11-25 16:31:00 +02:00
varstash integration
Fixes: https://github.com/Tarrasch/zsh-autoenv/issues/5
This commit is contained in:
parent
0bcbeb5ae5
commit
5b553ba1ed
22
autoenv.zsh
22
autoenv.zsh
@ -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
36
tests/varstash.t
Normal 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
|
Loading…
Reference in New Issue
Block a user