# Source the next .env file from parent directories.
# This is useful if you want to use a base .env file for a directory subtree.
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 ]] \
&& _autoenv_check_authorized_env_file $parent_env_file; then
# Change to directory of env file, source it and cd back.
local new_dir=$PWD
- builtin cd -q $_autoenv_envfile_dir
_autoenv_debug "== SOURCE: ${bold_color:-}$env_file${reset_color:-}\n PWD: $PWD"
(( _autoenv_debug_indent++ ))
source $env_file
(( _autoenv_debug_indent-- ))
_autoenv_debug "== END SOURCE =="
- builtin cd -q $new_dir
if [[ $autoenv_event == enter ]]; then
_autoenv_stack_entered_add $env_file
$ AUTOENV_LOOK_UPWARDS=1
$ mkdir -p sub/sub2
$ cd sub
- $ echo 'echo ENTERED: 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 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} pwd:${${"$(pwd)"}:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t} event:${autoenv_event}' > .env.leave
Manually create auth files.
The actual tests.
$ cd .
- ENTERED: PWD:sub from:sub to:sub event:enter
+ ENTERED: PWD:sub pwd:sub from:sub to:sub event:enter
$ 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
- 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.
$ 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
$ 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
- ENTERED: PWD:sub from:sub_linked to:sub2 event:enter
+ ENTERED: PWD:sub2 pwd:sub2 from:sub_linked to:sub2 event:enter
$ cd .
$ mkdir -p sub/sub2
$ 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 LEFT_sub: PWD:${PWD:t} from:${autoenv_from_dir:t} to:${autoenv_to_dir:t}' > .env.leave
ENTERED_sub: PWD:sub from:sub to:sub
$ 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
- ENTERED_sub: PWD:sub from:recurse-upwards.t to:sub2
+ ENTERED_sub: PWD:sub2 from:recurse-upwards.t to:sub2
$ cd ..
$ test_autoenv_add_to_env sub2/.env
$ cd sub2
autoenv_source_parent_from_sub2:
- ENTERED_sub: PWD:sub from:sub to:sub2
+ ENTERED_sub: PWD:sub2 from:sub to:sub2
ENTER2
done_sub2
$ touch -t 201401010102 .env
$ cd .
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
$ mv ../.env.out ../.env
$ cd .
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
ENTER2
done_sub
$ cd sub2
autoenv_source_parent_from_sub2:
autoenv_source_parent_from_sub:
- ENTERED_root: PWD:recurse-upwards.t from:sub to:sub
- ENTERED_sub: PWD:sub from:sub to:sub
+ ENTERED_root: PWD:sub2 from:sub to:sub2
+ ENTERED_sub: PWD:sub2 from:sub to:sub2
ENTER2
done_sub
done_sub2
autoenv_source_parent already.
$ 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.
$ 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
$ cd sub/sub2/sub3
autoenv_source_parent_from_sub2:
autoenv_source_parent_from_sub:
NEW
- ENTERED_sub: PWD:sub from:recurse-upwards.t to:sub
+ ENTERED_sub: PWD:sub3 from:recurse-upwards.t to:sub3
ENTER2
done_sub
done_sub2