From 1dd8e8bd46d7984ae04fffac46b9a225fee8eeb7 Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Tue, 26 Apr 2016 20:07:33 +0200 Subject: [PATCH] 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. --- autoenv.zsh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/autoenv.zsh b/autoenv.zsh index 12e058d..ee0daa0 100644 --- a/autoenv.zsh +++ b/autoenv.zsh @@ -260,8 +260,12 @@ _autoenv_source() { local autoenv_to_dir=$PWD # 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 - source ${${funcsourcetrace[1]%:*}:h}/lib/varstash + if \grep -qE '\b(autostash|autounstash|stash)\b' $autoenv_env_file; then + source ${${funcsourcetrace[1]%:*}:h}/lib/varstash + fi # NOTE: Varstash uses $PWD as default for varstash_dir, we might set it to # ${autoenv_env_file:h}. fi @@ -331,7 +335,9 @@ _autoenv_chpwd_handler() { fi # Unstash any autostashed stuff. - varstash_dir=$prev_dir autounstash + if [[ -n "$functions[(I)autostash]" ]]; then + varstash_dir=$prev_dir autounstash + fi _autoenv_stack_entered_remove $prev_file fi