ohmyzsh/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh
Graeme Coupar d31b292d0d Updated virtualenvwrapper plugin to use which
Previously the virtualenvwrapper plugin contained some hard-coded paths
to potential locations for virtualenvwrapper.sh.  This works most of the
time, however this falls apart if virtualenvwrapper.sh is not installed
in one of the listed locations (for example if it's installed using pip
--user).

To fix, I've replaced the hard-coded /usr/bin and /usr/local/bin paths
with `which virtualenvwrapper.sh`. This should find the shell script
anywhere if it's on the path which seems like better behaviour than
relying on it being in specific locations.
2012-08-17 16:19:55 +01:00

46 lines
1.8 KiB
Bash

WRAPPER_FOUND=0
for wrapsource in `which virtualenvwrapper.sh 2>&1` "/etc/bash_completion.d/virtualenvwrapper" ; do
if [[ -e $wrapsource ]] ; then
WRAPPER_FOUND=1
source $wrapsource
if [[ ! $DISABLE_VENV_CD -eq 1 ]]; then
# Automatically activate Git projects' virtual environments based on the
# directory name of the project. Virtual environment name can be overridden
# by placing a .venv file in the project root with a virtualenv name in it
function workon_cwd {
# Check that this is a Git repo
PROJECT_ROOT=`git rev-parse --show-toplevel 2> /dev/null`
if (( $? == 0 )); then
# Check for virtualenv name override
ENV_NAME=`basename "$PROJECT_ROOT"`
if [[ -f "$PROJECT_ROOT/.venv" ]]; then
ENV_NAME=`cat "$PROJECT_ROOT/.venv"`
fi
# Activate the environment only if it is not already active
if [[ "$VIRTUAL_ENV" != "$WORKON_HOME/$ENV_NAME" ]]; then
if [[ -e "$WORKON_HOME/$ENV_NAME/bin/activate" ]]; then
workon "$ENV_NAME" && export CD_VIRTUAL_ENV="$ENV_NAME"
fi
fi
elif [ $CD_VIRTUAL_ENV ]; then
# We've just left the repo, deactivate the environment
# Note: this only happens if the virtualenv was activated automatically
deactivate && unset CD_VIRTUAL_ENV
fi
unset PROJECT_ROOT
}
# New cd function that does the virtualenv magic
function cd {
builtin cd "$@" && workon_cwd
}
fi
break
fi
done
if [ $WRAPPER_FOUND -eq 0 ] ; then
print "zsh virtualenvwrapper plugin: Couldn't activate virtualenvwrapper. Please run \`pip install virtualenvwrapper\`."
fi