diff --git a/libexec/pyenv b/libexec/pyenv index fbdd880c..4147d780 100755 --- a/libexec/pyenv +++ b/libexec/pyenv @@ -41,12 +41,15 @@ else # Use a subshell to avoid changing the current path ( while [ -n "$path" ]; do - cd "${path%/*}" - local name="${path##*/}" + cd_path="${path%/*}" + if [[ "$cd_path" != "$path" ]]; then + cd "$cd_path" + fi + name="${path##*/}" path="$(resolve_link "$name" || true)" done - pwd + echo "$PWD" ) } fi diff --git a/plugins/python-build/bin/python-build b/plugins/python-build/bin/python-build index a5a2f4a4..6a66aee6 100755 --- a/plugins/python-build/bin/python-build +++ b/plugins/python-build/bin/python-build @@ -60,20 +60,21 @@ resolve_link() { } abs_dirname() { - local cwd="$(pwd)" local path="$1" - # Use a subshell to avoid modifying the current path + # Use a subshell to avoid changing the current path ( while [ -n "$path" ]; do - cd "${path%/*}" - local name="${path##*/}" + cd_path="${path%/*}" + if [[ "$cd_path" != "$path" ]]; then + cd "$cd_path" + fi + name="${path##*/}" path="$(resolve_link "$name" || true)" done - pwd + echo "$PWD" ) -# cd "$cwd" } capitalize() { diff --git a/test/pyenv_ext.bats b/test/pyenv_ext.bats index fdae87fc..4a3a4a8f 100644 --- a/test/pyenv_ext.bats +++ b/test/pyenv_ext.bats @@ -28,3 +28,12 @@ load test_helper PYENV_FILE_ARG="${PYENV_TEST_DIR}/dir2/symlink.py" run pyenv echo PYENV_DIR assert_output "${PYENV_TEST_DIR}/dir1" } + +@test "should handle relative symlinks for file argument (#580)" { + mkdir -p "${PYENV_TEST_DIR}" + cd "${PYENV_TEST_DIR}" + touch file.py + ln -s file.py symlink.py + PYENV_FILE_ARG="symlink.py" run pyenv echo PYENV_DIR + assert_output "${PYENV_TEST_DIR}" +}