From 7e0d027b213b92a761c2c18c7272796fb5f1393c Mon Sep 17 00:00:00 2001 From: Rob Speed Date: Wed, 1 Nov 2017 21:40:45 -0400 Subject: [PATCH] _autoenv_get_file_upwards: do not dereference symlinks (#73) MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. --- autoenv.zsh | 2 +- tests/_autoenv_utils.t | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) 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. {{{ -- 2.44.0