From 8cc5ea1ba8b9382d051b7448c7e5dad869734c72 Mon Sep 17 00:00:00 2001 From: Koen Punt Date: Sun, 21 Oct 2012 22:57:32 +0200 Subject: [PATCH 1/2] Extended version comparison, now also compatible with zsh --- nvm.sh | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/nvm.sh b/nvm.sh index 929f046..4447f9c 100755 --- a/nvm.sh +++ b/nvm.sh @@ -57,6 +57,22 @@ nvm_remote_version() fi } +nvm_normalize_version() +{ + echo "$1" | sed -e 's/^v//' | awk -F. '{ printf("%d%03d%03d\n", $1,$2,$3); }'; +} + +nvm_binary_available() +{ + # binaries started with node 0.8.6 + MINIMAL="0.8.6" + VERSION=$1 + if [ $(nvm_normalize_version $VERSION) -ge $(nvm_normalize_version $MINIMAL) ]; then + echo "1" + fi + return +} + nvm_ls() { PATTERN=$1 @@ -175,14 +191,7 @@ nvm() # shortcut - try the binary if possible. if [ -n "$os" ]; then - binavail= - # binaries started with node 0.8.6 - case "$VERSION" in - v0.8.[012345]) binavail=0 ;; - v0.[1234567]) binavail=0 ;; - *) binavail=1 ;; - esac - if [ $binavail -eq 1 ]; then + if [[ `nvm_binary_available "$VERSION"` -eq 1 ]]; then t="$VERSION-$os-$arch" url="http://nodejs.org/dist/$VERSION/node-${t}.tar.gz" if ( From 36c3c8fbc5359b08afbce7477c2552a674537dfb Mon Sep 17 00:00:00 2001 From: Koen Punt Date: Sun, 21 Oct 2012 23:46:27 +0200 Subject: [PATCH 2/2] Some more compatibility with zsh Prepend a v for version numbers if its not already there --- nvm.sh | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/nvm.sh b/nvm.sh index 4447f9c..eeb91f3 100755 --- a/nvm.sh +++ b/nvm.sh @@ -36,8 +36,10 @@ nvm_version() # The default version is the current one if [ ! "$PATTERN" ]; then PATTERN='current' + else + PATTERN=`nvm_format_version $PATTERN` fi - + VERSION=`nvm_ls $PATTERN | tail -n1` echo "$VERSION" @@ -61,6 +63,11 @@ nvm_normalize_version() { echo "$1" | sed -e 's/^v//' | awk -F. '{ printf("%d%03d%03d\n", $1,$2,$3); }'; } + +nvm_format_version() +{ + echo "$1" | sed -e 's/^\([0-9]\)/v\1/g' +} nvm_binary_available() { @@ -87,7 +94,7 @@ nvm_ls() return fi # If it looks like an explicit version, don't do anything funny - if [[ "$PATTERN" == v?*.?*.?* ]]; then + if echo "$PATTERN" | grep 'v.*\..*\..*' ; then VERSIONS="$PATTERN" else VERSIONS=`(cd $NVM_DIR; \ls -d v${PATTERN}* 2>/dev/null) | sort -t. -k 1.2,1n -k 2,2n -k 3,3n` @@ -104,9 +111,7 @@ nvm_ls_remote() { PATTERN=$1 if [ "$PATTERN" ]; then - if echo "${PATTERN}" | grep -v '^v' ; then - PATTERN=v$PATTERN - fi + PATTERN=`nvm_format_version "$PATTERN"` else PATTERN=".*" fi @@ -254,11 +259,12 @@ nvm() ;; "uninstall" ) [ $# -ne 2 ] && nvm help && return - if [[ $2 == `nvm_version` ]]; then - echo "nvm: Cannot uninstall currently-active node version, $2." + PATTERN=`nvm_format_version $2` + if [[ $PATTERN == `nvm_version` ]]; then + echo "nvm: Cannot uninstall currently-active node version, $PATTERN." return fi - VERSION=`nvm_version $2` + VERSION=`nvm_version $PATTERN` if [ ! -d $NVM_DIR/$VERSION ]; then echo "$VERSION version is not installed yet... installing" nvm install $VERSION