From: Rob Speed Date: Thu, 2 Nov 2017 01:40:45 +0000 (-0400) Subject: _autoenv_get_file_upwards: do not dereference symlinks (#73) X-Git-Url: http://www.git.stargrave.org/?p=zsh-autoenv.git;a=commitdiff_plain;h=7e0d027b213b92a761c2c18c7272796fb5f1393c _autoenv_get_file_upwards: do not dereference symlinks (#73) This prevents issues where autoenv scripts use $0. When a shell enters the directory holding the autoenv scripts, it works as expected with $0 being the path to the symlink. However, if the shell enters one of its child directories the path to the script is dereferenced, and $0 is instead the path to the symlink's target. From `man 1 zshexpn`: > A – Turn a file name into an absolute path as the 'a' modifier does, and then pass the result through the realpath(3) library function to resolve symbolic links. Note: Symlinks are dereferenced elsewhere for authorization, so that behavior is unchanged. --- diff --git a/autoenv.zsh b/autoenv.zsh index 4ccc9ae..2deac54 100644 --- a/autoenv.zsh +++ b/autoenv.zsh @@ -339,7 +339,7 @@ _autoenv_get_file_upwards() { if [[ ${parent_file[1,2]} == './' ]]; then echo ${parent_file#./} else - echo ${parent_file:A} + echo ${parent_file:a} fi break fi diff --git a/tests/_autoenv_utils.t b/tests/_autoenv_utils.t index a23f189..c77779f 100644 --- a/tests/_autoenv_utils.t +++ b/tests/_autoenv_utils.t @@ -17,6 +17,15 @@ Should not get the file from the current dir. $ _autoenv_get_file_upwards $PWD file */_autoenv_utils.t/sub/file (glob) +_autoenv_get_file_upwards should not dereference symlinks. + + $ cd ../.. + $ ln -s sub symlink + $ cd symlink/sub2 + $ _autoenv_get_file_upwards . file + ../file + $ _autoenv_get_file_upwards $PWD file + */_autoenv_utils.t/symlink/file (glob) Tests for _autoenv_authorize. {{{