mirror of
				https://github.com/nvm-sh/nvm.git
				synced 2025-10-31 10:15:53 +08:00 
			
		
		
		
	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.
This commit is contained in:
		
							
								
								
									
										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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user