From 4b05e548d0b56238521b07dac1969e8cd2dcf608 Mon Sep 17 00:00:00 2001 From: benjaoming Date: Fri, 22 Nov 2013 11:48:13 +0100 Subject: Throw an error message when $WORKON_HOME is not set Took me a while to figure this one out, and I have a default installation of virtualenvwrapper -- this is a soft fix, just put an error message. But perhaps the fix should be to use the default value `~/.virtualenvs`. --- .../virtualenvwrapper/virtualenvwrapper.plugin.zsh | 92 ++++++++++++---------- 1 file changed, 49 insertions(+), 43 deletions(-) (limited to 'plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh') diff --git a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh index f58bda1ad..52e02d3e0 100644 --- a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh +++ b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh @@ -1,57 +1,63 @@ virtualenvwrapper='virtualenvwrapper.sh' if (( $+commands[$virtualenvwrapper] )); then + source ${${virtualenvwrapper}:c} - if [[ ! $DISABLE_VENV_CD -eq 1 ]]; then - # Automatically activate Git projects's 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 { + if [[ "$WORKON_HOME" == "" ]]; then + echo "\$WORKON_HOME is not defined so ZSH plugin virtualenvwrapper will not work" + else + + if [[ ! $DISABLE_VENV_CD -eq 1 ]]; then + # Automatically activate Git projects's 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 { 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 - if [[ -f "$PROJECT_ROOT/.venv" ]]; then - 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"` - else - ENV_NAME="" - fi - 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" - elif [[ -e "$ENV_NAME/bin/activate" ]]; then - source $ENV_NAME/bin/activate && 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 + 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 + if [[ -f "$PROJECT_ROOT/.venv" ]]; then + 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"` + else + ENV_NAME="" + fi + 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" + elif [[ -e "$ENV_NAME/bin/activate" ]]; then + source $ENV_NAME/bin/activate && export CD_VIRTUAL_ENV="$ENV_NAME" + fi fi - unset PROJECT_ROOT - unset WORKON_CWD + 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 + unset WORKON_CWD fi - } + } - # Append workon_cwd to the chpwd_functions array, so it will be called on cd - # http://zsh.sourceforge.net/Doc/Release/Functions.html - # TODO: replace with 'add-zsh-hook chpwd workon_cwd' when oh-my-zsh min version is raised above 4.3.4 - if (( ${+chpwd_functions} )); then + # Append workon_cwd to the chpwd_functions array, so it will be called on cd + # http://zsh.sourceforge.net/Doc/Release/Functions.html + # TODO: replace with 'add-zsh-hook chpwd workon_cwd' when oh-my-zsh min version is raised above 4.3.4 + if (( ${+chpwd_functions} )); then if (( $chpwd_functions[(I)workon_cwd] == 0 )); then - set -A chpwd_functions $chpwd_functions workon_cwd + set -A chpwd_functions $chpwd_functions workon_cwd fi - else + else set -A chpwd_functions workon_cwd + fi fi fi else -- cgit v1.2.3-70-g09d2 From 833e6f5958b9851d2dbcf8ae706474af4079a25e Mon Sep 17 00:00:00 2001 From: Jyrki Pulliainen Date: Wed, 7 Jan 2015 18:15:00 +0100 Subject: virtualenvwrapper: Deactivate only if in virtualenv If user manually deactivates the virtualenv when using this mode, zsh will produce following error: deactivate:12: command not found: virtualenv_deactivate To avoid this, check that the VIRTUAL_ENV flag is set before trying to automatically deactivate the virtual environment. Fixes #2185 --- plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh') diff --git a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh index 52e02d3e0..217ab0722 100644 --- a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh +++ b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh @@ -38,7 +38,7 @@ if (( $+commands[$virtualenvwrapper] )); then source $ENV_NAME/bin/activate && export CD_VIRTUAL_ENV="$ENV_NAME" fi fi - elif [ $CD_VIRTUAL_ENV ]; then + elif [[ -n $CD_VIRTUAL_ENV && -n $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 -- cgit v1.2.3-70-g09d2 From 4161aa4f9de45233bdee7073933498422a50d213 Mon Sep 17 00:00:00 2001 From: Brandon Sandrowicz Date: Tue, 20 May 2014 09:41:36 -0400 Subject: Fixing virtualenvwrapper plugin for Ubuntu (and Debian) Ubuntu and Debian store the system-installed virtualenvwrapper in /etc/bash_completion.d/virtualenvwrapper, so that it gets automatically sourced at startup in Bash. By not putting it somewhere in $PATH, they end up excluding others (e.g. Zsh) that might want to use that file. Oops! The virtualenvwrapper plugin should account for this so that Ubuntu (or Debian) users don't end up with this message: zsh virtualenvwrapper plugin: Cannot find virtualenvwrapper.sh. Please install with `pip install virtualenvwrapper`. even when they have a virtualenvwrapper installed to a known location. --- plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh') diff --git a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh index 217ab0722..9a0616b72 100644 --- a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh +++ b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh @@ -1,12 +1,19 @@ virtualenvwrapper='virtualenvwrapper.sh' -if (( $+commands[$virtualenvwrapper] )); then +if (( $+commands[$virtualenvwrapper] )); then source ${${virtualenvwrapper}:c} +elif [[ -f "/etc/bash_completion.d/virtualenvwrapper" ]]; then + virtualenvwrapper="/etc/bash_completion.d/virtualenvwrapper" + source "/etc/bash_completion.d/virtualenvwrapper" +else + print "zsh virtualenvwrapper plugin: Cannot find ${virtualenvwrapper}. Please install with \`pip install virtualenvwrapper\`." + return +fi +if type workon 2>&1 >/dev/null; then if [[ "$WORKON_HOME" == "" ]]; then echo "\$WORKON_HOME is not defined so ZSH plugin virtualenvwrapper will not work" else - if [[ ! $DISABLE_VENV_CD -eq 1 ]]; then # Automatically activate Git projects's virtual environments based on the # directory name of the project. Virtual environment name can be overridden @@ -61,5 +68,5 @@ if (( $+commands[$virtualenvwrapper] )); then fi fi else - print "zsh virtualenvwrapper plugin: Cannot find ${virtualenvwrapper}. Please install with \`pip install virtualenvwrapper\`." + print "zsh virtualenvwrapper plugin: shell function 'workon' not defined. Please check ${virtualenvwrapper}." >&2 fi -- cgit v1.2.3-70-g09d2 From b62911660d3743d3dfb0116f5b05aabd67a24a06 Mon Sep 17 00:00:00 2001 From: Marc Cornellà Date: Tue, 10 Feb 2015 12:20:24 +0100 Subject: Organize error checking in virtualenwrapper plugin --- .../virtualenvwrapper/virtualenvwrapper.plugin.zsh | 113 +++++++++++---------- 1 file changed, 58 insertions(+), 55 deletions(-) (limited to 'plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh') diff --git a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh index 9a0616b72..0ad336917 100644 --- a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh +++ b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh @@ -6,67 +6,70 @@ elif [[ -f "/etc/bash_completion.d/virtualenvwrapper" ]]; then virtualenvwrapper="/etc/bash_completion.d/virtualenvwrapper" source "/etc/bash_completion.d/virtualenvwrapper" else - print "zsh virtualenvwrapper plugin: Cannot find ${virtualenvwrapper}. Please install with \`pip install virtualenvwrapper\`." + print "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"\ + "Please check ${virtualenvwrapper}" >&2 return fi -if type workon 2>&1 >/dev/null; then - if [[ "$WORKON_HOME" == "" ]]; then - echo "\$WORKON_HOME is not defined so ZSH plugin virtualenvwrapper will not work" - else - if [[ ! $DISABLE_VENV_CD -eq 1 ]]; then - # Automatically activate Git projects's 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 { - 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 - if [[ -f "$PROJECT_ROOT/.venv" ]]; then - 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"` - else - ENV_NAME="" - fi - 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" - elif [[ -e "$ENV_NAME/bin/activate" ]]; then - source $ENV_NAME/bin/activate && export CD_VIRTUAL_ENV="$ENV_NAME" - fi - fi - elif [[ -n $CD_VIRTUAL_ENV && -n $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 - unset WORKON_CWD - fi - } +if [[ "$WORKON_HOME" == "" ]]; then + print "\$WORKON_HOME is not defined so ZSH plugin virtualenvwrapper will not work" >&2 + return +fi - # Append workon_cwd to the chpwd_functions array, so it will be called on cd - # http://zsh.sourceforge.net/Doc/Release/Functions.html - # TODO: replace with 'add-zsh-hook chpwd workon_cwd' when oh-my-zsh min version is raised above 4.3.4 - if (( ${+chpwd_functions} )); then - if (( $chpwd_functions[(I)workon_cwd] == 0 )); then - set -A chpwd_functions $chpwd_functions workon_cwd - fi +if [[ ! $DISABLE_VENV_CD -eq 1 ]]; then + # Automatically activate Git projects's 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 { + 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 + if [[ -f "$PROJECT_ROOT/.venv" ]]; then + 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"` else - set -A chpwd_functions workon_cwd + ENV_NAME="" + fi + 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" + elif [[ -e "$ENV_NAME/bin/activate" ]]; then + source $ENV_NAME/bin/activate && export CD_VIRTUAL_ENV="$ENV_NAME" + fi + fi + elif [[ -n $CD_VIRTUAL_ENV && -n $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 + unset WORKON_CWD fi + } + + # Append workon_cwd to the chpwd_functions array, so it will be called on cd + # http://zsh.sourceforge.net/Doc/Release/Functions.html + # TODO: replace with 'add-zsh-hook chpwd workon_cwd' when oh-my-zsh min version is raised above 4.3.4 + if (( ${+chpwd_functions} )); then + if (( $chpwd_functions[(I)workon_cwd] == 0 )); then + set -A chpwd_functions $chpwd_functions workon_cwd + fi + else + set -A chpwd_functions workon_cwd fi -else - print "zsh virtualenvwrapper plugin: shell function 'workon' not defined. Please check ${virtualenvwrapper}." >&2 fi -- cgit v1.2.3-70-g09d2 From 732c7b8070a75ac5ad5384b4d22d19f499e8424f Mon Sep 17 00:00:00 2001 From: Marc Cornellà Date: Tue, 10 Feb 2015 12:24:05 +0100 Subject: Simplify adding workon_cwd to chpwd hook --- plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh') diff --git a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh index 0ad336917..5faa1a823 100644 --- a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh +++ b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh @@ -64,12 +64,7 @@ if [[ ! $DISABLE_VENV_CD -eq 1 ]]; then # Append workon_cwd to the chpwd_functions array, so it will be called on cd # http://zsh.sourceforge.net/Doc/Release/Functions.html - # TODO: replace with 'add-zsh-hook chpwd workon_cwd' when oh-my-zsh min version is raised above 4.3.4 - if (( ${+chpwd_functions} )); then - if (( $chpwd_functions[(I)workon_cwd] == 0 )); then - set -A chpwd_functions $chpwd_functions workon_cwd - fi - else - set -A chpwd_functions workon_cwd + if ! (( $chpwd_functions[(I)workon_cwd] )); then + chpwd_functions+=(workon_cwd) fi fi -- cgit v1.2.3-70-g09d2 From 7b478d75a3a0db466e78b6e46a0e468d64354618 Mon Sep 17 00:00:00 2001 From: epelletier Date: Thu, 21 May 2015 17:34:24 +0200 Subject: Detect the .venv in any parent directory of the current directory --- plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh') diff --git a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh index 5faa1a823..b3a3b56d5 100644 --- a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh +++ b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh @@ -29,8 +29,11 @@ if [[ ! $DISABLE_VENV_CD -eq 1 ]]; 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=`pwd` + while [[ "$PROJECT_ROOT" != "/" && ! -e "$PROJECT_ROOT/.venv" ]]; do + PROJECT_ROOT=`realpath $PROJECT_ROOT/..` + done + if [[ "$PROJECT_ROOT" == "/" ]]; then PROJECT_ROOT="." fi # Check for virtualenv name override -- cgit v1.2.3-70-g09d2 From d0b690b584fa48946cfd93014aa6033ec0cc7fc3 Mon Sep 17 00:00:00 2001 From: Tommy Wang Date: Wed, 10 Jun 2015 10:01:38 -0500 Subject: use local options to set no_equals before sourcing bash completion script --- plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh') diff --git a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh index 5faa1a823..b2c804edb 100644 --- a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh +++ b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh @@ -1,10 +1,18 @@ virtualenvwrapper='virtualenvwrapper.sh' if (( $+commands[$virtualenvwrapper] )); then - source ${${virtualenvwrapper}:c} + function { + setopt local_options + unsetopt equals + source ${${virtualenvwrapper}:c} + } elif [[ -f "/etc/bash_completion.d/virtualenvwrapper" ]]; then - virtualenvwrapper="/etc/bash_completion.d/virtualenvwrapper" - source "/etc/bash_completion.d/virtualenvwrapper" + function { + setopt local_options + unsetopt equals + virtualenvwrapper="/etc/bash_completion.d/virtualenvwrapper" + source "/etc/bash_completion.d/virtualenvwrapper" + } else print "zsh virtualenvwrapper plugin: Cannot find ${virtualenvwrapper}.\n"\ "Please install with \`pip install virtualenvwrapper\`" >&2 -- cgit v1.2.3-70-g09d2 From c1f1f91daad68fa000900dc647157bbfdb2b603f Mon Sep 17 00:00:00 2001 From: Andrew Janke Date: Mon, 29 Jun 2015 18:55:58 -0400 Subject: virtualenvwrapper: Replace "realpath" with portable zsh-native `:A` and `:h` modifiers --- plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh') diff --git a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh index 9fd0d3d8f..f5f37ff6f 100644 --- a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh +++ b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh @@ -30,16 +30,17 @@ if [[ "$WORKON_HOME" == "" ]]; then fi if [[ ! $DISABLE_VENV_CD -eq 1 ]]; then - # Automatically activate Git projects's virtual environments based on the + # 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 { if [ ! $WORKON_CWD ]; then WORKON_CWD=1 # Check if this is a Git repo - PROJECT_ROOT=`pwd` + # Get absolute path, resolving symlinks + PROJECT_ROOT="${PWD:A}" while [[ "$PROJECT_ROOT" != "/" && ! -e "$PROJECT_ROOT/.venv" ]]; do - PROJECT_ROOT=`realpath $PROJECT_ROOT/..` + PROJECT_ROOT="${PROJECT_ROOT:h}" done if [[ "$PROJECT_ROOT" == "/" ]]; then PROJECT_ROOT="." @@ -50,7 +51,7 @@ if [[ ! $DISABLE_VENV_CD -eq 1 ]]; then 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 -- cgit v1.2.3-70-g09d2 From f73e642e2265601b705b6aa9d9f71878ca98644a Mon Sep 17 00:00:00 2001 From: Andrew Janke Date: Thu, 2 Jul 2015 21:42:32 -0400 Subject: virtualenvwrapper: treat git repos as project roots again (instead of requiring a .venv customization directory) Change error output to more conventional OMZ format, so it's clear the plugin is for oh-my-zsh and not base zsh. Use `local` variables instead of manual unsetting. --- .../virtualenvwrapper/virtualenvwrapper.plugin.zsh | 28 ++++++++++++---------- 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh') diff --git a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh index f5f37ff6f..c40ca86ac 100644 --- a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh +++ b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh @@ -14,32 +14,38 @@ 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' 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 + 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 - PROJECT_ROOT="${PWD:A}" - while [[ "$PROJECT_ROOT" != "/" && ! -e "$PROJECT_ROOT/.venv" ]]; do + 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 @@ -47,7 +53,7 @@ if [[ ! $DISABLE_VENV_CD -eq 1 ]]; then 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 @@ -69,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 } -- cgit v1.2.3-70-g09d2 From ccb0ae57207b1701c3187faf49c417fb0a902f58 Mon Sep 17 00:00:00 2001 From: Marc Cornellà Date: Fri, 7 Aug 2015 22:45:46 +0200 Subject: Add quotes to support folders with whitespace --- plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh') diff --git a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh index c40ca86ac..6cd30732e 100644 --- a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh +++ b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh @@ -38,7 +38,7 @@ if [[ ! $DISABLE_VENV_CD -eq 1 ]]; then local WORKON_CWD=1 # Check if this is a Git repo local GIT_REPO_ROOT="" - local GIT_TOPLEVEL=$(git rev-parse --show-toplevel 2> /dev/null) + local GIT_TOPLEVEL="$(git rev-parse --show-toplevel 2> /dev/null)" if [[ $? == 0 ]]; then GIT_REPO_ROOT="$GIT_TOPLEVEL" fi @@ -53,7 +53,7 @@ if [[ ! $DISABLE_VENV_CD -eq 1 ]]; then 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 -- cgit v1.2.3-70-g09d2