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

Only source varstash lib if it's being used

I have noticed that `autostash` called an (accidentally)
defined/overwritten `stash` function.

While it's not possible to put this into a local scope, this will at
least make it less polluting by default (when autostashing is not used).

Additionally we could source it always (not just once), but then it
would only re-overwrite the function.

A better fix would be to prefix the functions explicitly, e.g.
`autoenv_autostash` etc.

Closes https://github.com/Tarrasch/zsh-autoenv/pull/42.
This commit is contained in:
Daniel Hahler 2016-04-26 20:07:33 +02:00
parent f021750e89
commit ecf2b2961f
2 changed files with 27 additions and 6 deletions

View File

@ -260,8 +260,12 @@ _autoenv_source() {
local autoenv_to_dir=$PWD local autoenv_to_dir=$PWD
# Source varstash library once. # Source varstash library once.
# XXX: pollutes environment with e.g. `stash`, and `autostash` will cause
# an overwritten `stash` function to be called!
if [[ -z "$functions[(I)autostash]" ]]; then if [[ -z "$functions[(I)autostash]" ]]; then
if \grep -qE '\b(autostash|autounstash|stash)\b' $autoenv_env_file; then
source ${${funcsourcetrace[1]%:*}:h}/lib/varstash source ${${funcsourcetrace[1]%:*}:h}/lib/varstash
fi
# NOTE: Varstash uses $PWD as default for varstash_dir, we might set it to # NOTE: Varstash uses $PWD as default for varstash_dir, we might set it to
# ${autoenv_env_file:h}. # ${autoenv_env_file:h}.
fi fi
@ -331,7 +335,9 @@ _autoenv_chpwd_handler() {
fi fi
# Unstash any autostashed stuff. # Unstash any autostashed stuff.
if [[ -n "$functions[(I)autostash]" ]]; then
varstash_dir=$prev_dir autounstash varstash_dir=$prev_dir autounstash
fi
_autoenv_stack_entered_remove $prev_file _autoenv_stack_entered_remove $prev_file
fi fi

View File

@ -6,11 +6,22 @@ Setup test environment.
$ mkdir sub $ mkdir sub
$ cd sub $ cd sub
The varstash library should not get loaded always.
$ echo 'echo ENTER' > $AUTOENV_FILE_ENTER
$ echo 'echo LEAVE' > $AUTOENV_FILE_LEAVE
$ test_autoenv_auth_env_files
$ cd .
ENTER
$ type -w autostash
autostash: none
[1]
Now on to some stashing.
$ echo 'echo ENTER; autostash FOO=changed' > $AUTOENV_FILE_ENTER $ echo 'echo ENTER; autostash FOO=changed' > $AUTOENV_FILE_ENTER
$ echo 'echo LEAVE; autounstash' > $AUTOENV_FILE_LEAVE $ echo 'echo LEAVE; autounstash' > $AUTOENV_FILE_LEAVE
Manually create auth file
$ test_autoenv_auth_env_files $ test_autoenv_auth_env_files
Set environment variable. Set environment variable.
@ -19,8 +30,12 @@ Set environment variable.
Activating the env stashes it and applies a new value. Activating the env stashes it and applies a new value.
$ cd . $ cd ..
LEAVE
$ cd sub
ENTER ENTER
$ type -w autostash
autostash: function
$ echo $FOO $ echo $FOO
changed changed