diff --git a/bin/pyenv-sh-activate b/bin/pyenv-sh-activate index d6b0d35..38091ee 100755 --- a/bin/pyenv-sh-activate +++ b/bin/pyenv-sh-activate @@ -96,8 +96,8 @@ fi venv="${versions}" if [ -n "${VIRTUAL_ENV}" ]; then - # exit as success if some virtualenv is already activated outside from pyenv-virtualenv - if [ -z "${PYENV_VIRTUAL_ENV}" ]; then + # exit as success if a non-pyenv virtualenv is active + if [[ -z $PYENV_VIRTUAL_ENV || $PYENV_VIRTUAL_ENV != "$VIRTUAL_ENV" ]]; then if [ -z "${FORCE}" ]; then if [ -z "${QUIET}" ]; then echo "pyenv-virtualenv: virtualenv \`${VIRTUAL_ENV}' is already activated" 1>&2 diff --git a/test/activate.bats b/test/activate.bats index 9c1fc67..8c1760a 100644 --- a/test/activate.bats +++ b/test/activate.bats @@ -439,6 +439,34 @@ EOS unstub pyenv-prefix } +@test "do nothing if a 3rd-party virtualenv is active" { + export PYENV_VIRTUALENV_INIT=1 + export VIRTUAL_ENV="${TMP}/venv-3rd-party" + unset PYENV_VIRTUAL_ENV + + PYENV_SHELL="bash" run pyenv-sh-activate "venv" + + assert_success + assert_output <&${!_STUB_DEBUG} -fi +[ -n "${!_STUB_LOG}" ] || eval "${_STUB_LOG}"="${TMPDIR}/${program}-stub-log" +if test -z "${!_STUB_END}"; then echo "$program" "$@" >>"${!_STUB_LOG}"; fi [ -e "${!_STUB_PLAN}" ] || exit 1 [ -n "${!_STUB_RUN}" ] || eval "${_STUB_RUN}"="${TMPDIR}/${program}-stub-run" @@ -24,7 +23,7 @@ fi # Initialize or load the stub run information. eval "${_STUB_INDEX}"=1 eval "${_STUB_RESULT}"=0 -[ ! -e "${!_STUB_RUN}" ] || source "${!_STUB_RUN}" +if test -e "${!_STUB_RUN}"; then source "${!_STUB_RUN}"; fi # Loop over each line in the plan. @@ -80,14 +79,26 @@ done < "${!_STUB_PLAN}" if [ -n "${!_STUB_END}" ]; then - # Clean up the run file. - rm -f "${!_STUB_RUN}" - # If the number of lines in the plan is larger than # the requested index, we failed. if [ $index -ge "${!_STUB_INDEX}" ]; then eval "${_STUB_RESULT}"=1 fi + if [ "${!_STUB_RESULT}" -ne 0 ]; then + { + echo "index: $index; stub index: ${!_STUB_INDEX}" + echo "plan:" + cat "${!_STUB_PLAN}" || true + echo "run:" + cat "${!_STUB_RUN}" || true + echo "log:" + cat "${!_STUB_LOG}" || true + } >&2 + fi + + # Clean up the run file. + rm -f "${!_STUB_RUN}" + rm -f "${!_STUB_LOG}" # Return the result. exit "${!_STUB_RESULT}" diff --git a/test/test_helper.bash b/test/test_helper.bash index 08bcb79..d63b874 100644 --- a/test/test_helper.bash +++ b/test/test_helper.bash @@ -16,6 +16,7 @@ stub() { export "${prefix}_STUB_PLAN"="${TMP}/${program}-stub-plan" export "${prefix}_STUB_RUN"="${TMP}/${program}-stub-run" + export "${prefix}_STUB_LOG"="${TMP}/${program}-stub-log" export "${prefix}_STUB_END"= mkdir -p "${TMP}/bin"