diff options
| author | Germán M. Bravo <german.mb@gmail.com> | 2013-05-21 14:20:28 -0400 | 
|---|---|---|
| committer | Germán M. Bravo <german.mb@gmail.com> | 2013-05-21 14:20:28 -0400 | 
| commit | 69116fa806f5a7405d33cc1f7c66d4c26ad4253b (patch) | |
| tree | 9783cabcd37a58f36a6f38296d0ae5a99644dd88 /plugins/virtualenvwrapper | |
| parent | 27c6becffde091cc55e0df70875451ca82867935 (diff) | |
| download | zsh-69116fa806f5a7405d33cc1f7c66d4c26ad4253b.tar.gz zsh-69116fa806f5a7405d33cc1f7c66d4c26ad4253b.tar.bz2 zsh-69116fa806f5a7405d33cc1f7c66d4c26ad4253b.zip | |
Fixed recursion. Git not needed for it to work.
Avoid infinite `cd` loops under certain conditions. Try getting `.venv` from the current directory (not necessarily always using git)
Diffstat (limited to 'plugins/virtualenvwrapper')
| -rw-r--r-- | plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh | 36 | 
1 files changed, 23 insertions, 13 deletions
| diff --git a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh index 0ed2565b4..35de50874 100644 --- a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh +++ b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh @@ -8,26 +8,36 @@ if [[ -f "$wrapsource" ]]; then      # 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 +        if [ ! $WORKON_CWD ]; then +            WORKON_CWD=1 +            # Check if this is a Git repo +            PROJECT_ROOT=`git rev-parse --show-toplevel 2> /dev/null` +            if (( $? != 0 )); then +                PROJECT_ROOT="." +            fi              # Check for virtualenv name override -            ENV_NAME=`basename "$PROJECT_ROOT"`              if [[ -f "$PROJECT_ROOT/.venv" ]]; then                  ENV_NAME=`cat "$PROJECT_ROOT/.venv"` +            elif [[ "$PROJECT_ROOT" != "." ]]; then +                ENV_NAME=`basename "$PROJECT_ROOT"` +            else +                ENV_NAME=""              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" +            if [[ "$ENV_NAME" != "" ]]; then +                # 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 -        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 +            unset PROJECT_ROOT +            unset WORKON_CWD          fi -        unset PROJECT_ROOT      }      # New cd function that does the virtualenv magic | 
