diff options
Diffstat (limited to 'plugins/virtualenvwrapper')
| -rw-r--r-- | plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh | 33 | 
1 files changed, 19 insertions, 14 deletions
| diff --git a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh index 9fd0d3d8f..6cd30732e 100644 --- a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh +++ b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh @@ -14,43 +14,50 @@ elif [[ -f "/etc/bash_completion.d/virtualenvwrapper" ]]; then      source "/etc/bash_completion.d/virtualenvwrapper"    }  else -  print "zsh virtualenvwrapper plugin: Cannot find ${virtualenvwrapper}.\n"\ +  print "[oh-my-zsh] virtualenvwrapper plugin: Cannot find ${virtualenvwrapper}.\n"\          "Please install with \`pip install virtualenvwrapper\`" >&2    return  fi  if ! type workon &>/dev/null; then -  print "zsh virtualenvwrapper plugin: shell function 'workon' not defined.\n"\ +  print "[oh-my-zsh] virtualenvwrapper plugin: shell function 'workon' not defined.\n"\          "Please check ${virtualenvwrapper}" >&2    return  fi  if [[ "$WORKON_HOME" == "" ]]; then -  print "\$WORKON_HOME is not defined so ZSH plugin virtualenvwrapper will not work" >&2 +  print "[oh-my-zsh] \$WORKON_HOME is not defined so plugin virtualenvwrapper will not work" >&2    return  fi  if [[ ! $DISABLE_VENV_CD -eq 1 ]]; then -  # Automatically activate Git projects's virtual environments based on the +  # Automatically activate Git projects or other customized virtualenvwrapper projects 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 +  # by placing a .venv file in the project root with a virtualenv name in it.    function workon_cwd { -    if [ ! $WORKON_CWD ]; then -      WORKON_CWD=1 +    if [[ -z "$WORKON_CWD" ]]; then +      local WORKON_CWD=1        # Check if this is a Git repo -      PROJECT_ROOT=`pwd` -      while [[ "$PROJECT_ROOT" != "/" && ! -e "$PROJECT_ROOT/.venv" ]]; do -        PROJECT_ROOT=`realpath $PROJECT_ROOT/..` +      local GIT_REPO_ROOT="" +      local GIT_TOPLEVEL="$(git rev-parse --show-toplevel 2> /dev/null)" +      if [[ $? == 0 ]]; then +        GIT_REPO_ROOT="$GIT_TOPLEVEL" +      fi +      # Get absolute path, resolving symlinks +      local PROJECT_ROOT="${PWD:A}" +      while [[ "$PROJECT_ROOT" != "/" && ! -e "$PROJECT_ROOT/.venv" \ +               && ! -d "$PROJECT_ROOT/.git"  && "$PROJECT_ROOT" != "$GIT_REPO_ROOT" ]]; do +        PROJECT_ROOT="${PROJECT_ROOT:h}"        done        if [[ "$PROJECT_ROOT" == "/" ]]; then          PROJECT_ROOT="."        fi        # Check for virtualenv name override        if [[ -f "$PROJECT_ROOT/.venv" ]]; then -        ENV_NAME=`cat "$PROJECT_ROOT/.venv"` +        ENV_NAME="$(cat "$PROJECT_ROOT/.venv")"        elif [[ -f "$PROJECT_ROOT/.venv/bin/activate" ]];then          ENV_NAME="$PROJECT_ROOT/.venv"        elif [[ "$PROJECT_ROOT" != "." ]]; then -        ENV_NAME=`basename "$PROJECT_ROOT"` +        ENV_NAME="${PROJECT_ROOT:t}"        else          ENV_NAME=""        fi @@ -68,8 +75,6 @@ if [[ ! $DISABLE_VENV_CD -eq 1 ]]; then          # Note: this only happens if the virtualenv was activated automatically          deactivate && unset CD_VIRTUAL_ENV        fi -      unset PROJECT_ROOT -      unset WORKON_CWD      fi    } | 
