_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.
This commit is contained in:
Rob Speed 2017-11-01 21:40:45 -04:00 committed by Daniel Hahler
parent 2db6d69774
commit 7e0d027b21
2 changed files with 10 additions and 1 deletions

View File

@ -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

View File

@ -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. {{{