Merge pull request #371 from koenpunt/single-installer
Merged installer and gitless installer into one
diff --git a/README.markdown b/README.markdown
index f93f8f7..3ed58d8 100644
--- a/README.markdown
+++ b/README.markdown
@@ -6,7 +6,7 @@
### Install script
-To install you could use the [install script](https://github.com/creationix/nvm/blob/v0.3.0/install.sh) (requires Git) using cURL:
+To install you could use the [install script](https://github.com/creationix/nvm/blob/v0.3.0/install.sh) using cURL:
curl https://raw.github.com/creationix/nvm/v0.3.0/install.sh | sh
@@ -14,8 +14,11 @@
wget -qO- https://raw.github.com/creationix/nvm/v0.3.0/install.sh | sh
-<sub>The script clones the nvm repository to `~/.nvm` and adds the source line to your profile (`~/.bash_profile` or `~/.profile`).</sub>
+<sub>The script clones the nvm repository to `~/.nvm` and adds the source line to your profile (`~/.bash_profile`, `~/.zshrc` or `~/.profile`).</sub>
+You can customize the install source, directory and profile using the `NVM_SOURCE`, `NVM_DIR` and `NVM_PROFILE` variables. Eg: `curl ... | NVM_DIR=/usr/local/nvm sh` for a global install.
+
+<sub>*NB. The installer can use Git, cURL or Wget to download NVM, whatever is available.*</sub>
### Manual install
diff --git a/install-gitless.sh b/install-gitless.sh
deleted file mode 100755
index d4b96b4..0000000
--- a/install-gitless.sh
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/bin/bash
-
-fatalExit (){
- echo "$@" && exit 1;
-}
-
-# an alternative URL that could be used: https://github.com/creationix/nvm/tarball/master
-if [ "$NVM_SOURCE" = "" ]; then
- NVM_SOURCE="https://raw.github.com/creationix/nvm/master/nvm.sh"
-fi
-
-if [ "$NVM_DIR" = "" ]; then
- NVM_DIR="$HOME/.nvm"
-fi
-
-# Downloading to $NVM_DIR
-mkdir -p "$NVM_DIR"
-pushd "$NVM_DIR" > /dev/null
-echo -ne "=> Downloading... "
-
-# Detect if curl or wget is installed to download NVM_SOURCE
-if type curl > /dev/null 2>&1; then
- curl --silent "$NVM_SOURCE" -o nvm.sh || fatalExit "Failed";
-elif type wget > /dev/null 2>&1; then
- wget --quiet "$NVM_SOURCE" -O nvm.sh || fatalExit "Failed";
-else
- fatalExit "Must have curl or wget to install nvm";
-fi
-
-echo "Downloaded"
-popd > /dev/null
-
-# Detect profile file, .bash_profile has precedence over .profile
-if [ ! -z "$1" ]; then
- PROFILE="$1"
-else
- if [ -f "$HOME/.bash_profile" ]; then
- PROFILE="$HOME/.bash_profile"
- elif [ -f "$HOME/.profile" ]; then
- PROFILE="$HOME/.profile"
- fi
-fi
-
-SOURCE_STR="[[ -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"
- else
- echo "=> Profile $PROFILE not found"
- fi
- echo "=> Append the following line to the correct file yourself"
- echo
- echo "\t$SOURCE_STR"
- echo
- echo "=> Close and reopen your terminal to start using NVM"
- exit
-fi
-
-if ! grep -qc 'nvm.sh' $PROFILE; then
- echo "=> Appending source string to $PROFILE"
- echo "" >> "$PROFILE"
- echo $SOURCE_STR >> "$PROFILE"
-else
- echo "=> Source string already in $PROFILE"
-fi
-
-echo "=> Close and reopen your terminal to start using NVM"
-
diff --git a/install.sh b/install.sh
index e76fcd5..17b97bb 100755
--- a/install.sh
+++ b/install.sh
@@ -1,66 +1,130 @@
#!/bin/bash
-NVM_DIR="$HOME/.nvm"
+set -e
-if ! hash git 2>/dev/null; then
- echo >&2 "You need to install git - visit http://git-scm.com/downloads"
- echo >&2 "or, use install-gitless.sh instead."
- exit 1
+has() {
+ type "$1" > /dev/null 2>&1
+ return $?
+}
+
+if [ -z "$NVM_DIR" ]; then
+ NVM_DIR="$HOME/.nvm"
fi
-if [ -d "$NVM_DIR" ]; then
- echo "=> NVM is already installed in $NVM_DIR, trying to update"
- echo -ne "\r=> "
- cd $NVM_DIR && git pull
+if ! has "curl"; then
+ if has "wget"; then
+ # Emulate curl with wget
+ curl() {
+ ARGS="$* "
+ ARGS=${ARGS/-s /-q }
+ ARGS=${ARGS/-o /-O }
+ wget $ARGS
+ }
+ fi
+fi
+
+install_from_git() {
+ if [ -z "$NVM_SOURCE" ]; then
+ NVM_SOURCE="https://github.com/creationix/nvm.git"
+ fi
+
+ if [ -d "$NVM_DIR/.git" ]; then
+ echo "=> nvm is already installed in $NVM_DIR, trying to update"
+ echo -e "\r=> \c"
+ cd "$NVM_DIR" && git pull 2> /dev/null || {
+ echo >&2 "Failed to update nvm, run 'git pull' in $NVM_DIR yourself.."
+ }
+ else
+ # Cloning to $NVM_DIR
+ echo "=> Downloading nvm from git to '$NVM_DIR'"
+ echo -e "\r=> \c"
+ mkdir -p "$NVM_DIR"
+ git clone "$NVM_SOURCE" "$NVM_DIR"
+ fi
+}
+
+install_as_script() {
+ if [ -z "$NVM_SOURCE" ]; then
+ NVM_SOURCE="https://raw.github.com/creationix/nvm/master/nvm.sh"
+ fi
+
+ # Downloading to $NVM_DIR
+ mkdir -p "$NVM_DIR"
+ if [ -d "$NVM_DIR/nvm.sh" ]; then
+ echo "=> nvm is already installed in $NVM_DIR, trying to update"
+ else
+ echo "=> Downloading nvm as script to '$NVM_DIR'"
+ fi
+ curl -s "$NVM_SOURCE" -o "$NVM_DIR/nvm.sh" || {
+ echo >&2 "Failed to download '$NVM_SOURCE'.."
+ return 1
+ }
+}
+
+if [ -z "$METHOD" ]; then
+ # Autodetect install method
+ if has "git"; then
+ install_from_git
+ elif has "curl"; then
+ install_as_script
+ else
+ echo >&2 "You need git, curl or wget to install nvm"
+ exit 1
+ fi
else
- # Cloning to $NVM_DIR
- git clone https://github.com/creationix/nvm.git $NVM_DIR
+ if [ "$METHOD" = "git" ]; then
+ if ! has "git"; then
+ echo >&2 "You need git to install nvm"
+ exit 1
+ fi
+ install_from_git
+ fi
+ if [ "$METHOD" = "script" ]; then
+ if ! has "curl"; then
+ echo >&2 "You need curl or wget to install nvm"
+ exit 1
+ fi
+ install_as_script
+ fi
fi
echo
-# Detect profile file, .bash_profile has precedence over .profile
-if [ ! -z "$1" ]; then
- PROFILE="$1"
-else
+# Detect profile file if not specified as environment variable (eg: PROFILE=~/.myprofile).
+if [ -z "$PROFILE" ]; then
if [ -f "$HOME/.bash_profile" ]; then
- PROFILE="$HOME/.bash_profile"
+ PROFILE="$HOME/.bash_profile"
elif [ -f "$HOME/.zshrc" ]; then
- PROFILE="$HOME/.zshrc"
+ PROFILE="$HOME/.zshrc"
elif [ -f "$HOME/.profile" ]; then
- PROFILE="$HOME/.profile"
+ PROFILE="$HOME/.profile"
fi
fi
-SOURCE_STR="[[ -s \$HOME/.nvm/nvm.sh ]] && . \$HOME/.nvm/nvm.sh # This loads NVM"
+SOURCE_STR="[ -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 $HOME/.bash_profile and $HOME/.profile"
+ echo "=> Profile not found. Tried ~/.bash_profile ~/.zshrc and ~/.profile."
+ echo "=> Create one of them and run this script again"
else
- echo "=> Profile $PROFILE not found"
+ echo "=> Profile $PROFILE not found"
+ echo "=> Create it (touch $PROFILE) and run this script again"
fi
- echo "=> Run this script again after running the following:"
+ echo " OR"
+ echo "=> Append the following line to the correct file yourself:"
echo
- echo "\ttouch $HOME/.profile"
+ echo " $SOURCE_STR"
echo
- echo "-- OR --"
- echo
- echo "=> Append the following line to the correct file yourself"
- echo
- echo "\t$SOURCE_STR"
- echo
- echo "=> Close and reopen your terminal afterwards to start using NVM"
- exit
-fi
-
-if ! grep -qc 'nvm.sh' $PROFILE; then
- echo "=> Appending source string to $PROFILE"
- echo "" >> "$PROFILE"
- echo $SOURCE_STR >> "$PROFILE"
else
- echo "=> Source string already in $PROFILE"
+ if ! grep -qc 'nvm.sh' $PROFILE; then
+ echo "=> Appending source string to $PROFILE"
+ echo "" >> "$PROFILE"
+ echo $SOURCE_STR >> "$PROFILE"
+ else
+ echo "=> Source string already in $PROFILE"
+ fi
fi
-echo "=> Close and reopen your terminal to start using NVM"
+echo "=> Close and reopen your terminal to start using nvm"