1
0
mirror of https://github.com/Tarrasch/zsh-autoenv.git synced 2024-11-29 09:50:59 +02:00

Merge pull request #17 from Tarrasch/dont-cd-in-chpwd

Do not `cd` in the `chpwd` hook: changes $PWD behavior in .env files!
This commit is contained in:
Daniel Hahler 2015-01-17 20:39:06 +01:00
commit 9339306f60
3 changed files with 20 additions and 22 deletions

View File

@ -26,7 +26,7 @@ export AUTOENV_ENV_FILENAME=$HOME/.env_auth
# Source the next .env file from parent directories. # Source the next .env file from parent directories.
# This is useful if you want to use a base .env file for a directory subtree. # This is useful if you want to use a base .env file for a directory subtree.
autoenv_source_parent() { autoenv_source_parent() {
local parent_env_file=$(_autoenv_get_file_upwards $PWD) local parent_env_file=$(_autoenv_get_file_upwards ${autoenv_env_file:h})
if [[ -n $parent_env_file ]] \ if [[ -n $parent_env_file ]] \
&& _autoenv_check_authorized_env_file $parent_env_file; then && _autoenv_check_authorized_env_file $parent_env_file; then
@ -223,13 +223,11 @@ _autoenv_source() {
# Change to directory of env file, source it and cd back. # Change to directory of env file, source it and cd back.
local new_dir=$PWD 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++ )) (( _autoenv_debug_indent++ ))
source $env_file source $env_file
(( _autoenv_debug_indent-- )) (( _autoenv_debug_indent-- ))
_autoenv_debug "== END SOURCE ==" _autoenv_debug "== END SOURCE =="
builtin cd -q $new_dir
if [[ $autoenv_event == enter ]]; then if [[ $autoenv_event == enter ]]; then
_autoenv_stack_entered_add $env_file _autoenv_stack_entered_add $env_file

View File

@ -7,8 +7,8 @@ Setup env actions / output.
$ AUTOENV_LOOK_UPWARDS=1 $ AUTOENV_LOOK_UPWARDS=1
$ mkdir -p sub/sub2 $ mkdir -p sub/sub2
$ cd sub $ cd sub
$ echo 'echo ENTERED: PWD:${PWD:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t} event:${autoenv_event}' > .env $ echo 'echo ENTERED: PWD:${PWD:t} pwd:${${"$(pwd)"}:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t} event:${autoenv_event}' > .env
$ echo 'echo LEFT: PWD:${PWD:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t} event:${autoenv_event}' > .env.leave $ echo 'echo LEFT: PWD:${PWD:t} pwd:${${"$(pwd)"}:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t} event:${autoenv_event}' > .env.leave
Manually create auth files. Manually create auth files.
@ -17,21 +17,21 @@ Manually create auth files.
The actual tests. The actual tests.
$ cd . $ cd .
ENTERED: PWD:sub from:sub to:sub event:enter ENTERED: PWD:sub pwd:sub from:sub to:sub event:enter
$ cd .. $ cd ..
LEFT: PWD:sub from:sub to:cwd.t event:leave LEFT: PWD:cwd.t pwd:cwd.t from:sub to:cwd.t event:leave
$ cd sub/sub2 $ cd sub/sub2
ENTERED: PWD:sub from:cwd.t to:sub2 event:enter ENTERED: PWD:sub2 pwd:sub2 from:cwd.t to:sub2 event:enter
Check that symlinked dirs get handled correctly. Check that symlinked dirs get handled correctly.
$ cd ../.. $ cd ../..
LEFT: PWD:sub from:sub2 to:cwd.t event:leave LEFT: PWD:cwd.t pwd:cwd.t from:sub2 to:cwd.t event:leave
$ ln -s sub sub_linked $ ln -s sub sub_linked
$ cd sub_linked $ cd sub_linked
ENTERED: PWD:sub from:cwd.t to:sub_linked event:enter ENTERED: PWD:sub_linked pwd:sub_linked from:cwd.t to:sub_linked event:enter
$ cd sub2 $ cd sub2
ENTERED: PWD:sub from:sub_linked to:sub2 event:enter ENTERED: PWD:sub2 pwd:sub2 from:sub_linked to:sub2 event:enter
$ cd . $ cd .

View File

@ -16,7 +16,7 @@ Create env files in sub dir.
$ mkdir -p sub/sub2 $ mkdir -p sub/sub2
$ cd sub $ cd sub
ENTERED_root: PWD:recurse-upwards.t from:recurse-upwards.t to:sub ENTERED_root: PWD:sub from:recurse-upwards.t to:sub
$ echo 'echo ENTERED_sub: PWD:${PWD:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t}' > .env $ echo 'echo ENTERED_sub: PWD:${PWD:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t}' > .env
$ echo 'echo LEFT_sub: PWD:${PWD:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t}' > .env.leave $ echo 'echo LEFT_sub: PWD:${PWD:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t}' > .env.leave
@ -28,10 +28,10 @@ The actual tests.
ENTERED_sub: PWD:sub from:sub to:sub ENTERED_sub: PWD:sub from:sub to:sub
$ cd .. $ cd ..
LEFT_sub: PWD:sub from:sub to:recurse-upwards.t LEFT_sub: PWD:recurse-upwards.t from:sub to:recurse-upwards.t
$ cd sub/sub2 $ cd sub/sub2
ENTERED_sub: PWD:sub from:recurse-upwards.t to:sub2 ENTERED_sub: PWD:sub2 from:recurse-upwards.t to:sub2
$ cd .. $ cd ..
@ -54,7 +54,7 @@ Add sub/sub2/.env file, with a call to autoenv_source_parent.
$ test_autoenv_add_to_env sub2/.env $ test_autoenv_add_to_env sub2/.env
$ cd sub2 $ cd sub2
autoenv_source_parent_from_sub2: autoenv_source_parent_from_sub2:
ENTERED_sub: PWD:sub from:sub to:sub2 ENTERED_sub: PWD:sub2 from:sub to:sub2
ENTER2 ENTER2
done_sub2 done_sub2
@ -64,7 +64,7 @@ Move sub/.env away, now the root .env file should get sourced.
$ touch -t 201401010102 .env $ touch -t 201401010102 .env
$ cd . $ cd .
autoenv_source_parent_from_sub2: autoenv_source_parent_from_sub2:
ENTERED_root: PWD:recurse-upwards.t from:sub2 to:sub2 ENTERED_root: PWD:sub2 from:sub2 to:sub2
done_sub2 done_sub2
$ mv ../.env.out ../.env $ mv ../.env.out ../.env
@ -78,7 +78,7 @@ Prepend call to autoenv_source_parent to sub/.env file.
$ cd . $ cd .
autoenv_source_parent_from_sub: autoenv_source_parent_from_sub:
ENTERED_root: PWD:recurse-upwards.t from:sub to:sub ENTERED_root: PWD:sub from:sub to:sub
ENTERED_sub: PWD:sub from:sub to:sub ENTERED_sub: PWD:sub from:sub to:sub
ENTER2 ENTER2
done_sub done_sub
@ -91,8 +91,8 @@ Add sub/sub2/.env file.
$ cd sub2 $ cd sub2
autoenv_source_parent_from_sub2: autoenv_source_parent_from_sub2:
autoenv_source_parent_from_sub: autoenv_source_parent_from_sub:
ENTERED_root: PWD:recurse-upwards.t from:sub to:sub ENTERED_root: PWD:sub2 from:sub to:sub2
ENTERED_sub: PWD:sub from:sub to:sub ENTERED_sub: PWD:sub2 from:sub to:sub2
ENTER2 ENTER2
done_sub done_sub
done_sub2 done_sub2
@ -102,7 +102,7 @@ This should not trigger the enter event, because it was handled via
autoenv_source_parent already. autoenv_source_parent already.
$ cd ../.. $ cd ../..
LEFT_sub: PWD:sub from:sub2 to:recurse-upwards.t LEFT_sub: PWD:recurse-upwards.t from:sub2 to:recurse-upwards.t
Changing the root .env should trigger re-authentication via autoenv_source_parent. Changing the root .env should trigger re-authentication via autoenv_source_parent.
@ -155,13 +155,13 @@ Touching the .env file will now source the parent env file.
$ cd .. $ cd ..
LEFT_sub: PWD:sub from:sub to:recurse-upwards.t LEFT_sub: PWD:recurse-upwards.t from:sub to:recurse-upwards.t
$ mkdir sub/sub2/sub3 $ mkdir sub/sub2/sub3
$ cd sub/sub2/sub3 $ cd sub/sub2/sub3
autoenv_source_parent_from_sub2: autoenv_source_parent_from_sub2:
autoenv_source_parent_from_sub: autoenv_source_parent_from_sub:
NEW NEW
ENTERED_sub: PWD:sub from:recurse-upwards.t to:sub ENTERED_sub: PWD:sub3 from:recurse-upwards.t to:sub3
ENTER2 ENTER2
done_sub done_sub
done_sub2 done_sub2