Browse Source

Show all available versions in ls

Adds a cache of all versions available on nodejs.org using simple empty files as placeholders. When a new version is installed, it will replace the placeholder with a directory.

This makes it easier for users to see what versions are available for install, and what the latest and stable versions are.
master
Isaac Wolkerstorfer 14 years ago
parent
commit
b2c6be9e08
  1. 69
      nvm.sh

69
nvm.sh

@ -8,6 +8,41 @@
# Auto detect the NVM_DIR using magic bash 3.x stuff # Auto detect the NVM_DIR using magic bash 3.x stuff
export NVM_DIR=$(dirname ${BASH_ARGV[0]}) export NVM_DIR=$(dirname ${BASH_ARGV[0]})
# Expand a version using the version cache
version()
{
PATTERN=$1
VERSION=''
# If it looks like an explicit version, don't do anything funny
if [[ $PATTERN == v*.*.* ]]; then
VERSION=$PATTERN
fi
# The default version is the current one
if [ ! $PATTERN -o $PATTERN = 'current' ]; then
VERSION=`node -v 2>/dev/null`
fi
if [ $PATTERN = 'stable' ]; then
PATTERN='*.*[02468].'
fi
if [ $PATTERN = 'latest' ]; then
PATTERN='*.*.'
fi
if [ $PATTERN = 'all' ]; then
(cd $NVM_DIR; ls -dG v* 2>/dev/null || echo "N/A")
return
fi
if [ ! "$VERSION" ]; then
VERSION=`(cd $NVM_DIR; ls -d v${PATTERN}* 2>/dev/null) | sort -t. -k 2,1n -k 2,2n -k 3,3n | tail -n1`
fi
if [ ! "$VERSION" ]; then
echo "N/A"
elif [ -e "$NVM_DIR/$VERSION" ]; then
(cd $NVM_DIR; ls -dG $VERSION)
else
echo "$VERSION"
fi
}
nvm() nvm()
{ {
if [ $# -lt 1 ]; then if [ $# -lt 1 ]; then
@ -23,8 +58,10 @@ nvm()
echo " nvm help Show this message" echo " nvm help Show this message"
echo " nvm install <version> Download and install a <version>" echo " nvm install <version> Download and install a <version>"
echo " nvm use <version> Modify PATH to use <version>" echo " nvm use <version> Modify PATH to use <version>"
echo " nvm ls List versions currently installed" echo " nvm ls List versions (installed versions are blue)"
echo " nvm ls <version> List versions matching a given description"
echo " nvm deactivate Undo effects of NVM on current shell" echo " nvm deactivate Undo effects of NVM on current shell"
echo " nvm sync Update the local cache of available versions"
echo echo
echo "Example:" echo "Example:"
echo " nvm install v0.2.5" echo " nvm install v0.2.5"
@ -38,6 +75,7 @@ nvm()
fi fi
START=`pwd` START=`pwd`
mkdir -p "$NVM_DIR/src" && \ mkdir -p "$NVM_DIR/src" && \
rm -f "$NVM_DIR/$2" && \
cd "$NVM_DIR/src" && \ cd "$NVM_DIR/src" && \
wget "http://nodejs.org/dist/node-$2.tar.gz" -N && \ wget "http://nodejs.org/dist/node-$2.tar.gz" -N && \
tar -xzf "node-$2.tar.gz" && \ tar -xzf "node-$2.tar.gz" && \
@ -93,16 +131,31 @@ nvm()
;; ;;
"ls" ) "ls" )
if [ $# -ne 1 ]; then if [ $# -ne 1 ]; then
nvm help version $2
return; return;
fi fi
for f in $NVM_DIR/v*; do version all
if [[ $PATH == *$f/bin* ]]; then for P in {stable,latest,current}; do
echo "v${f##*v} *" echo -ne "$P: \t"; version $P
else
echo "v${f##*v}"
fi
done done
echo "# use 'nvm sync' to update from nodejs.org"
;;
"sync" )
(cd $NVM_DIR
rm -f v* 2>/dev/null
echo -n "Syncing with nodejs.org..."
for VER in `curl -s http://nodejs.org/dist/ | grep 'node-v.*\.tar\.gz' | sed -e 's/.*node-//' -e 's/\.tar\.gz.*//'`
do touch $VER
done
echo " done."
)
;;
"clear-cache" )
rm -f $NVM_DIR/v*
echo "Cache cleared."
;;
"version" )
version $2
;; ;;
* ) * )
nvm help nvm help

Loading…
Cancel
Save