mirror of
https://github.com/Tarrasch/zsh-autoenv.git
synced 2024-11-22 15:30:59 +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
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
: ${_dotenv_sourced_varstash:=0}
|
||||||
|
_dotenv_this_dir=${0:A:h}
|
||||||
|
|
||||||
_dotenv_source() {
|
_dotenv_source() {
|
||||||
local env_file=$1
|
local env_file=$1
|
||||||
_dotenv_event=$2
|
_dotenv_event=$2
|
||||||
_dotenv_cwd=$PWD
|
_dotenv_cwd=$3
|
||||||
|
|
||||||
builtin cd -q ${env_file:h}
|
# Source varstash library once.
|
||||||
source $env_file
|
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
|
builtin cd -q $_dotenv_cwd
|
||||||
|
source $env_file
|
||||||
|
builtin cd -q $new_dir
|
||||||
|
|
||||||
unset _dotenv_event _dotenv_cwd
|
unset _dotenv_event _dotenv_cwd
|
||||||
}
|
}
|
||||||
@ -103,7 +115,7 @@ _dotenv_chpwd_handler() {
|
|||||||
if ! [[ ${PWD}/ == ${prev_dir}/* ]]; then
|
if ! [[ ${PWD}/ == ${prev_dir}/* ]]; then
|
||||||
local env_file_leave=$prev_dir/$DOTENV_FILE_LEAVE
|
local env_file_leave=$prev_dir/$DOTENV_FILE_LEAVE
|
||||||
if _dotenv_check_authorized_env_file $env_file_leave; then
|
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
|
fi
|
||||||
# Remove this entry from the stack.
|
# Remove this entry from the stack.
|
||||||
_dotenv_stack_entered=(${_dotenv_stack_entered#$prev_dir})
|
_dotenv_stack_entered=(${_dotenv_stack_entered#$prev_dir})
|
||||||
@ -136,7 +148,7 @@ _dotenv_chpwd_handler() {
|
|||||||
|
|
||||||
_dotenv_stack_entered+=(${env_file_dir})
|
_dotenv_stack_entered+=(${env_file_dir})
|
||||||
|
|
||||||
_dotenv_source $env_file enter
|
_dotenv_source $env_file enter $PWD
|
||||||
}
|
}
|
||||||
|
|
||||||
autoload -U add-zsh-hook
|
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