diff --git a/.travis.yml b/.travis.yml index 6d3ef3f..a76b809 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,11 @@ before_script: script: - NVM_DIR=$TRAVIS_BUILD_DIR make TEST_SUITE=$TEST_SUITE URCHIN=/tmp/urchin $SHELL env: + - SHELL=sh TEST_SUITE=install_script + - SHELL=dash TEST_SUITE=install_script + - SHELL=bash TEST_SUITE=install_script + - SHELL=zsh TEST_SUITE=install_script + - SHELL=ksh TEST_SUITE=install_script - SHELL=sh TEST_SUITE=fast - SHELL=dash TEST_SUITE=fast - SHELL=bash TEST_SUITE=fast @@ -34,4 +39,3 @@ env: - SHELL=zsh TEST_SUITE=installation WITHOUT_CURL=1 - SHELL=ksh TEST_SUITE=installation - SHELL=ksh TEST_SUITE=installation WITHOUT_CURL=1 - diff --git a/install.sh b/install.sh index 85deb51..235b814 100755 --- a/install.sh +++ b/install.sh @@ -66,66 +66,79 @@ install_nvm_as_script() { } } -if [ -z "$METHOD" ]; then - # Autodetect install method - if nvm_has "git"; then +nvm_do_install() { + if [ -z "$METHOD" ]; then + # Autodetect install method + if nvm_has "git"; then + install_nvm_from_git + elif nvm_has "nvm_download"; then + install_nvm_as_script + else + echo >&2 "You need git, curl, or wget to install nvm" + exit 1 + fi + elif [ "~$METHOD" = "~git" ]; then + if ! nvm_has "git"; then + echo >&2 "You need git to install nvm" + exit 1 + fi install_nvm_from_git - elif nvm_has "nvm_download"; then + elif [ "~$METHOD" = "~script" ]; then + if ! nvm_has "nvm_download"; then + echo >&2 "You need curl or wget to install nvm" + exit 1 + fi install_nvm_as_script - else - echo >&2 "You need git, curl, or wget to install nvm" - exit 1 fi -elif [ "~$METHOD" = "~git" ]; then - if ! nvm_has "git"; then - echo >&2 "You need git to install nvm" - exit 1 - fi - install_nvm_from_git -elif [ "~$METHOD" = "~script" ]; then - if ! nvm_has "nvm_download"; then - echo >&2 "You need curl or wget to install nvm" - exit 1 - fi - install_nvm_as_script -fi -echo - -# Detect profile file if not specified as environment variable (eg: PROFILE=~/.myprofile). -if [ -z "$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" - elif [ -f "$HOME/.profile" ]; then - PROFILE="$HOME/.profile" - fi -fi - -SOURCE_STR="\nexport NVM_DIR=\"$NVM_DIR\"\n[ -s \"\$NVM_DIR/nvm.sh\" ] && . \"\$NVM_DIR/nvm.sh\" # This loads nvm" - -if [ -z "$PROFILE" ] || [ ! -f "$PROFILE" ] ; then - if [ -z "$PROFILE" ]; then - 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" - echo "=> Create it (touch $PROFILE) and run this script again" - fi - echo " OR" - echo "=> Append the following lines to the correct file yourself:" - printf "$SOURCE_STR" echo -else - if ! grep -qc 'nvm.sh' "$PROFILE"; then - echo "=> Appending source string to $PROFILE" - printf "$SOURCE_STR\n" >> "$PROFILE" - else - echo "=> Source string already in $PROFILE" - fi -fi -echo "=> Close and reopen your terminal to start using nvm" + # Detect profile file if not specified as environment variable (eg: PROFILE=~/.myprofile). + if [ -z "$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" + elif [ -f "$HOME/.profile" ]; then + PROFILE="$HOME/.profile" + fi + fi + + SOURCE_STR="\nexport NVM_DIR=\"$NVM_DIR\"\n[ -s \"\$NVM_DIR/nvm.sh\" ] && . \"\$NVM_DIR/nvm.sh\" # This loads nvm" + + if [ -z "$PROFILE" ] || [ ! -f "$PROFILE" ] ; then + if [ -z "$PROFILE" ]; then + 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" + echo "=> Create it (touch $PROFILE) and run this script again" + fi + echo " OR" + echo "=> Append the following lines to the correct file yourself:" + printf "$SOURCE_STR" + echo + else + if ! grep -qc 'nvm.sh' "$PROFILE"; then + echo "=> Appending source string to $PROFILE" + printf "$SOURCE_STR\n" >> "$PROFILE" + else + echo "=> Source string already in $PROFILE" + fi + fi + + echo "=> Close and reopen your terminal to start using nvm" + nvm_reset +} + +# +# Unsets the various functions defined +# during the execution of the install script +# +nvm_reset() { + unset -f nvm_do_install nvm_has nvm_download install_nvm_as_script install_nvm_from_git nvm_reset +} + +[ "_$NVM_ENV" = "_testing" ] || nvm_do_install diff --git a/package.json b/package.json index 8b8ef5c..d5ebb31 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,8 @@ "test/fast": "urchin -f test/fast", "test/slow": "urchin -f test/slow", "test/installation": "urchin -f test/installation", - "test/sourcing": "urchin -f test/sourcing" + "test/sourcing": "urchin -f test/sourcing", + "test/install_script": "urchin -f test/install_script" }, "repository": { "type": "git", diff --git a/test/install_script/nvm_do_install b/test/install_script/nvm_do_install new file mode 100755 index 0000000..02c77f3 --- /dev/null +++ b/test/install_script/nvm_do_install @@ -0,0 +1,6 @@ +#!/bin/sh + +NVM_ENV=testing . ../../install.sh + +#nvm_do_install is available +type nvm_do_install > /dev/null 2>&1 diff --git a/test/install_script/nvm_reset b/test/install_script/nvm_reset new file mode 100755 index 0000000..25d9a34 --- /dev/null +++ b/test/install_script/nvm_reset @@ -0,0 +1,21 @@ +#!/bin/sh + +NVM_ENV=testing . ../../install.sh + +safe_type() { + type "$1" > /dev/null 2>&1 && return 0 || return 1 +} + +# Check nvm_reset exists +type nvm_reset > /dev/null 2>&1 + +# Apply nvm_reset +nvm_reset + +# The names should be unset +! safe_type nvm_do_install && \ + ! safe_type nvm_has && \ + ! safe_type nvm_download && \ + ! safe_type install_nvm_as_script && \ + ! safe_type install_nvm_from_git && \ + ! safe_type nvm_reset