Compare commits

..

25 Commits

Author SHA1 Message Date
Jordan Harband
d1b6332bbe v0.16.0 2014-09-11 00:58:09 -07:00
Jordan Harband
159d4c645e Merge pull request #518 from creationix/nvm_copy_packages_system
Make `nvm copy-packages system` work
2014-09-05 09:05:27 -07:00
Jordan Harband
687df82107 Make nvm copy-packages system work. 2014-09-05 00:43:12 -07:00
Jordan Harband
ff1781b95d Make nvm copy-packages refuse to copy packages from the currently activated version. 2014-09-05 00:42:59 -07:00
Jordan Harband
110e571c34 Make nvm ls system work. 2014-09-05 00:29:20 -07:00
Jordan Harband
a7108e98f2 Make .bashrc be checked first on install.
From #511. Closes #320. Closes #268. Closes #334. Fixes #497. Relates to
2014-09-04 00:54:50 -07:00
Jordan Harband
30b044a368 Merge pull request #511 from 16BITBoy/bashrc-support
Fix for nvm not being sourced to bash when using gnome-terminal in Ubuntu 14.04
2014-09-04 00:53:23 -07:00
Adrian Perez Heredia
825cb46969 Updated error message for missing profile file 2014-09-03 15:07:28 +02:00
Adrian Perez Heredia
ab56ec6675 This patch adds support for terminal emulators. Without this it wont work on gnome-terminal on Ubuntu 2014-09-03 15:07:27 +02:00
Jordan Harband
9d96e4a6bf v0.15.0 2014-09-03 00:08:53 -07:00
Jordan Harband
a00a3a7429 Document NVM_SYMLINK_CURRENT env var from #514. 2014-09-03 00:07:45 -07:00
Jordan Harband
1c3585e5a2 Merge pull request #508 from creationix/nvm_copy_packages_not_npm
Don't copy `npm` with `nvm copy-packages`
2014-09-03 00:01:03 -07:00
Jordan Harband
214ce8853b npm ls has a bug in some versions when "--parseable --depth=0" is used together. 2014-09-02 15:47:45 -07:00
Jordan Harband
d24dc662dc Merge pull request #512 from kevinwang/shasum-lowest-priority
Make shasum the lowest priority checksum command.
2014-09-02 00:36:17 -07:00
Kevin Wang
e8056ac460 Run cleanup on die in nvm_checksum unit test. 2014-08-30 21:57:17 -05:00
Kevin Wang
429656bc41 Add unit tests for nvm_checksum. 2014-08-30 21:54:46 -05:00
Jordan Harband
b61445cbf4 Merge pull request #514 from stelcheck/master
Make the creation of a symlink an overridable default behaviour
2014-08-30 09:49:52 -07:00
Jordan Harband
603253b0cb Quote the version. 2014-08-29 00:12:16 -07:00
Jordan Harband
5ee955bb62 Remove unused $ROOT variable. 2014-08-29 00:12:02 -07:00
stelcheck
83a0efb085 * We print stats only on failure
* || true
2014-08-29 15:01:15 +09:00
stelcheck
9306a9b3f0 * Unit tests 2014-08-29 14:57:30 +09:00
stelcheck
59939d09e8 * Make the creation of a symlink an overridable default behaviour 2014-08-28 22:45:07 +09:00
Kevin Wang
814319d7c0 Make shasum the lowest priority checksum command.
This fixes false "Checksums do not match" errors on systems where shasum
is a symlink to sha256sum or otherwise.
2014-08-27 00:06:41 -05:00
Jordan Harband
4b3d6f1760 Properly pass a space-separated list of packages to npm install
Fixes #490.
2014-08-22 02:44:04 -07:00
Jordan Harband
56c40cfa3c Don't try to copy npm itself with nvm copy-packages.
Fixes #504.
2014-08-22 02:19:56 -07:00
9 changed files with 188 additions and 26 deletions

View File

@@ -8,11 +8,11 @@ First you'll need to make sure your system has a c++ compiler. For OSX, XCode w
To install you could use the [install script][2] using cURL:
curl https://raw.githubusercontent.com/creationix/nvm/v0.14.0/install.sh | bash
curl https://raw.githubusercontent.com/creationix/nvm/v0.16.0/install.sh | bash
or Wget:
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.14.0/install.sh | bash
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.16.0/install.sh | bash
<sub>The script clones the nvm repository to `~/.nvm` and adds the source line to your profile (`~/.bash_profile`, `~/.zshrc` or `~/.profile`).</sub>
@@ -79,6 +79,8 @@ To use a mirror of the node binaries, set `$NVM_NODEJS_ORG_MIRROR`:
NVM_NODEJS_ORG_MIRROR=http://nodejs.org/dist nvm install 0.10
`nvm use` will, by defaut, create a "current" symlink. Set `$NVM_SYMLINK_CURRENT` to any value other than "true" to disable this behavior.
## License
nvm is released under the MIT license.
@@ -167,7 +169,7 @@ After the v0.8.6 release of node, nvm tries to install from binary packages. But
nvm install -s 0.8.6
[1]: https://github.com/creationix/nvm.git
[2]: https://github.com/creationix/nvm/blob/v0.14.0/install.sh
[2]: https://github.com/creationix/nvm/blob/v0.16.0/install.sh
[3]: https://travis-ci.org/creationix/nvm
[Urchin]: https://github.com/scraperwiki/urchin

View File

@@ -44,12 +44,12 @@ install_nvm_from_git() {
mkdir -p "$NVM_DIR"
git clone "$NVM_SOURCE" "$NVM_DIR"
fi
cd $NVM_DIR && git checkout v0.14.0 && git branch -D master || true
cd $NVM_DIR && git checkout v0.16.0 && git branch -D master || true
}
install_nvm_as_script() {
if [ -z "$NVM_SOURCE" ]; then
NVM_SOURCE="https://raw.githubusercontent.com/creationix/nvm/v0.14.0/nvm.sh"
NVM_SOURCE="https://raw.githubusercontent.com/creationix/nvm/v0.16.0/nvm.sh"
fi
# Downloading to $NVM_DIR
@@ -96,7 +96,9 @@ echo
# Detect profile file if not specified as environment variable (eg: PROFILE=~/.myprofile).
if [ -z "$PROFILE" ]; then
if [ -f "$HOME/.bash_profile" ]; then
if [ -f "$HOME/.bashrc" ]; then
PROFILE="$HOME/.bashrc"
elif [ -f "$HOME/.bash_profile" ]; then
PROFILE="$HOME/.bash_profile"
elif [ -f "$HOME/.zshrc" ]; then
PROFILE="$HOME/.zshrc"
@@ -109,7 +111,7 @@ SOURCE_STR="\nexport NVM_DIR=\"$NVM_DIR\"\n[ -s \"\$NVM_DIR/nvm.sh\" ] && . \"\$
if [ -z "$PROFILE" ] || [ ! -f "$PROFILE" ] ; then
if [ -z "$PROFILE" ]; then
echo "=> Profile not found. Tried ~/.bash_profile, ~/.zshrc, and ~/.profile."
echo "=> Profile not found. Tried ~/.bashrc, ~/.bash_profile, ~/.zshrc, and ~/.profile."
echo "=> Create one of them and run this script again"
else
echo "=> Profile $PROFILE not found"

51
nvm.sh
View File

@@ -249,13 +249,20 @@ nvm_ls() {
| sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n | \grep -v '^ *\.' | \grep -e '^v'`
fi
fi
if nvm_has_system_node; then
if [ -z "$PATTERN" ]; then
VERSIONS="$VERSIONS$(printf '\n%s' 'system')"
elif [ "$PATTERN" = 'system' ]; then
VERSIONS="$(printf '%s' 'system')"
fi
fi
if [ -z "$VERSIONS" ]; then
echo "N/A"
return 3
fi
if [ -z "$PATTERN" ] && nvm_has_system_node; then
VERSIONS="$VERSIONS$(printf '\n%s' 'system')"
fi
echo "$VERSIONS"
return
}
@@ -284,12 +291,12 @@ nvm_ls_remote() {
}
nvm_checksum() {
if nvm_has "shasum"; then
checksum=$(shasum $1 | \awk '{print $1}')
if nvm_has "sha1sum"; then
checksum=$(sha1sum $1 | \awk '{print $1}')
elif nvm_has "sha1"; then
checksum=$(sha1 -q $1)
else
checksum=$(sha1sum $1 | \awk '{print $1}')
checksum=$(shasum $1 | \awk '{print $1}')
fi
if [ "$checksum" = "$2" ]; then
@@ -647,7 +654,9 @@ nvm() {
export NODE_PATH
export NVM_PATH="$NVM_VERSION_DIR/lib/node"
export NVM_BIN="$NVM_VERSION_DIR/bin"
rm -f "$NVM_DIR/current" && ln -s "$NVM_VERSION_DIR" "$NVM_DIR/current"
if [ "$NVM_SYMLINK_CURRENT" = true ] || [ -z "$NVM_SYMLINK_CURRENT" ]; then
rm -f "$NVM_DIR/current" && ln -s "$NVM_VERSION_DIR" "$NVM_DIR/current"
fi
echo "Now using node $VERSION"
;;
"run" )
@@ -783,15 +792,29 @@ nvm() {
nvm help
return 127
fi
VERSION=$(nvm_version "$2")
local ROOT
ROOT=$(nvm use $VERSION && npm -g root)
# declare local INSTALLS first, otherwise it doesn't work in zsh
local PROVIDED_VERSION
PROVIDED_VERSION="$2"
if [ "$PROVIDED_VERSION" = "$(nvm_ls_current)" ]; then
echo 'Can not copy packages from the current version of node.' >&2
return 2
fi
local INSTALLS
INSTALLS=$(nvm use $VERSION > /dev/null && npm list --global --parseable --depth=0 2> /dev/null | tail -n +2 | \grep -o -e '/[^/]*$' | cut -c 2- | xargs)
if [ "$PROVIDED_VERSION" = "system" ]; then
if ! nvm_has_system_node; then
echo 'No system version of node detected.' >&2
return 3
fi
INSTALLS=$(nvm deactivate > /dev/null && npm list -g --depth=0 | tail -n +2 | \grep -o -e ' [^@]*' | cut -c 2- | \grep -v npm | xargs)
else
local VERSION
VERSION="$(nvm_version "$PROVIDED_VERSION")"
INSTALLS=$(nvm use "$VERSION" > /dev/null && npm list -g --depth=0 | tail -n +2 | \grep -o -e ' [^@]*' | cut -c 2- | \grep -v npm | xargs)
fi
npm install -g --quiet $INSTALLS
echo "$INSTALLS" | xargs npm install -g --quiet
;;
"clear-cache" )
rm -f $NVM_DIR/v* "$(nvm_version_dir)" 2>/dev/null
@@ -801,7 +824,7 @@ nvm() {
nvm_version $2
;;
"--version" )
echo "0.14.0"
echo "0.16.0"
;;
"unload" )
unset -f nvm nvm_print_versions nvm_checksum nvm_ls_remote nvm_ls nvm_remote_version nvm_version nvm_rc_version nvm_version_greater > /dev/null 2>&1

View File

@@ -1,6 +1,6 @@
{
"name": "nvm",
"version": "0.14.0",
"version": "0.16.0",
"description": "Node Version Manager - Simple bash script to manage multiple active node.js versions",
"directories": {
"test": "test"

View File

@@ -0,0 +1,22 @@
#!/bin/sh
cleanup () { unset -f nvm_has_system_node; }
die () { cleanup ; echo $@ ; exit 1; }
. ../../../nvm.sh
mkdir -p ../../../v0.0.1
mkdir -p ../../../v0.0.3
mkdir -p ../../../v0.0.9
mkdir -p ../../../v0.3.1
mkdir -p ../../../v0.3.3
mkdir -p ../../../v0.3.9
nvm_has_system_node() { return 0; }
nvm ls system | grep system 2>&1 > /dev/null
[ $? -eq 0 ] || die '"nvm ls system" did not contain "system" when system node is present'
nvm_has_system_node() { return 1; }
nvm ls system | grep system 2>&1 > /dev/null
[ $? -ne 0 ] || die '"nvm ls system" contained "system" when system node is not present'

View File

@@ -0,0 +1,83 @@
#!/bin/bash
. ../../nvm.sh
TEST_NODE_VERSION="v0.10.29"
TEST_COUNT=0
TEST_PASSED=0
TEST_FAILED=0
function registerExpectedSymlink() {
registerResult ${1}
}
function registerExpectedNoSymlink() {
[ ${1} -ne 0 ]
registerResult $?
}
function registerResult() {
result=${1}
TEST_COUNT=$(($TEST_COUNT + 1))
[ ${result} -eq 0 ] \
&& TEST_PASSED=$(($TEST_PASSED + 1)) \
|| TEST_FAILED=$(($TEST_FAILED + 1))
}
function cleanup() {
rm -rf ../../${TEST_NODE_VERSION}
rm -f ../../current
}
function runNvmUse() {
mkdir ../../${TEST_NODE_VERSION}
nvm use ${TEST_NODE_VERSION} &> /dev/null
rmdir ../../${TEST_NODE_VERSION}
}
function isCurrentSymlinkPresent() {
[ -L ../../current ]
}
NVM_SYMLINK_CURRENT=false
cleanup
runNvmUse
isCurrentSymlinkPresent && echo "Expected 'current' symlink not to be created when NVM_SYMLINK_CURRENT=false!"
registerExpectedNoSymlink $?
NVM_SYMLINK_CURRENT=true
cleanup
runNvmUse
isCurrentSymlinkPresent || echo "Expected 'current' symlink to be created when NVM_SYMLINK_CURRENT=true!"
registerExpectedSymlink $?
NVM_SYMLINK_CURRENT=garbagevalue
cleanup
runNvmUse
isCurrentSymlinkPresent && echo "Expected 'current' symlink not to be created when NVM_SYMLINK_CURRENT contains a string!"
registerExpectedNoSymlink $?
NVM_SYMLINK_CURRENT=0
cleanup
runNvmUse
isCurrentSymlinkPresent && echo "Expected 'current' symlink not to be created when NVM_SYMLINK_CURRENT=0!"
registerExpectedNoSymlink $?
NVM_SYMLINK_CURRENT=1
cleanup
runNvmUse
isCurrentSymlinkPresent && echo "Expected 'current' symlink not to be created when NVM_SYMLINK_CURRENT=1!"
registerExpectedNoSymlink $?
unset NVM_SYMLINK_CURRENT
cleanup
runNvmUse
isCurrentSymlinkPresent || echo "Expected 'current' symlink to be created when NVM_SYMLINK_CURRENT has been unset (default behaviour)!"
registerExpectedSymlink $?
cleanup
[ ${TEST_FAILED} -ne 0 ] && echo "${TEST_COUNT} tested, ${TEST_PASSED} passed, ${TEST_FAILED} failed" && exit 1 || true

View File

@@ -0,0 +1,18 @@
#!/bin/sh
cleanup () {
rm tmp/emptyfile tmp/testfile
rmdir tmp
}
die () { echo $@ ; cleanup; exit 1; }
. ../../../nvm.sh
mkdir -p tmp
touch tmp/emptyfile
echo -n "test" > tmp/testfile
nvm_checksum tmp/emptyfile "da39a3ee5e6b4b0d3255bfef95601890afd80709" || die "nvm_checksum on an empty file did not match the SHA1 digest of the empty string"
nvm_checksum tmp/testfile "da39a3ee5e6b4b0d3255bfef95601890afd80709" && die "nvm_checksum allowed a bad checksum"
cleanup

View File

@@ -0,0 +1,12 @@
#!/bin/sh
die () { echo $@ ; exit 1; }
. ../../nvm.sh
local EXPECTED_MSG="Can not copy packages from the current version of node."
[ "$(nvm use 0.10.28 && nvm copy-packages 0.10.28 2&>1)" = "$EXPECTED_MSG" ] || die '"nvm use 0.10.28 && nvm copy-packages 0.10.28" did not fail with the right message'
$(nvm use 0.10.28 && nvm copy-packages 0.10.28)
[ $? = 2 ] || die '"nvm use 0.10.28 && nvm copy-packages 0.10.28" did not fail with the right error code'

View File

@@ -6,15 +6,15 @@ die () { echo "$@" ; exit 1; }
nvm use 0.10.28
EXPECTED_PACKAGES="autoprefixer bower david eslint grunt-cli grunth-cli http-server jshint marked node-gyp npm recursive-blame uglify-js yo"
EXPECTED_PACKAGES="autoprefixer bower david eslint grunt-cli grunth-cli http-server jshint marked node-gyp recursive-blame uglify-js yo"
npm install -g --quiet $EXPECTED_PACKAGES
echo "$EXPECTED_PACKAGES" | xargs npm install -g --quiet
nvm use 0.10.29
ORIGINAL_PACKAGES=$(npm list --global --parseable --depth=0 2> /dev/null | tail -n +2 | grep -o -e '/[^/]*$' | cut -c 2- | sort | uniq | xargs)
ORIGINAL_PACKAGES=$(npm list -g --depth=0 | tail -n +2 | \grep -o -e ' [^@]*' | cut -c 2- | \grep -v npm | sort | uniq | xargs)
nvm copy-packages 0.10.28
FINAL_PACKAGES=$(npm list --global --parseable --depth=0 2> /dev/null | tail -n +2 | grep -o -e '/[^/]*$' | cut -c 2- | sort | uniq | xargs)
FINAL_PACKAGES=$(npm list -g --depth=0 | tail -n +2 | \grep -o -e ' [^@]*' | cut -c 2- | \grep -v npm | sort | uniq | xargs)
[ "$FINAL_PACKAGES" = "$EXPECTED_PACKAGES" ] || die "final packages ($FINAL_PACKAGES) did not match expected packages ($EXPECTED_PACKAGES)"
[ "$ORIGINAL_PACKAGES" != "$FINAL_PACKAGES" ] || die "original packages matched final packages ($ORIGINAL_PACKAGES)"