Browse Source

Merge pull request #1839 from Kronuz/patch-1

Fixed recursion. Git not needed for it to work.
Robby Russell 11 years ago
parent
commit
688225a07e
1 changed files with 23 additions and 13 deletions
  1. 23 13
      plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh

+ 23 - 13
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