Merge pull request #452 from creationix/curl_wget_handling

Better combo curl/wget handling
diff --git a/install.sh b/install.sh
index 977e224..fa8443e 100755
--- a/install.sh
+++ b/install.sh
@@ -11,17 +11,21 @@
   NVM_DIR="$HOME/.nvm"
 fi
 
-if ! nvm_has "curl"; then
-  if nvm_has "wget"; then
+nvm_curl() {
+  if nvm_has "curl"; then
+    curl $*
+  elif nvm_has "wget"; then
     # Emulate curl with wget
-    curl() {
-      ARGS="$* "
-      ARGS=${ARGS/-s /-q }
-      ARGS=${ARGS/-o /-O }
-      wget "$ARGS"
-    }
+    ARGS="$*"
+    ARGS=${ARGS/--progress-bar /--progress=bar }
+    ARGS=${ARGS/-L /}
+    ARGS=${ARGS/-I /}
+    ARGS=${ARGS/-s /-q }
+    ARGS=${ARGS/-o /-O }
+    ARGS=${ARGS/-C /-c }
+    wget $ARGS
   fi
-fi
+}
 
 install_nvm_from_git() {
   if [ -z "$NVM_SOURCE" ]; then
@@ -55,7 +59,7 @@
   else
     echo "=> Downloading nvm as script to '$NVM_DIR'"
   fi
-  curl -s "$NVM_SOURCE" -o "$NVM_DIR/nvm.sh" || {
+  nvm_curl -s "$NVM_SOURCE" -o "$NVM_DIR/nvm.sh" || {
     echo >&2 "Failed to download '$NVM_SOURCE'.."
     return 1
   }
@@ -65,7 +69,7 @@
   # Autodetect install method
   if nvm_has "git"; then
     install_nvm_from_git
-  elif nvm_has "curl"; then
+  elif nvm_has "nvm_curl"; then
     install_nvm_as_script
   else
     echo >&2 "You need git, curl, or wget to install nvm"
@@ -80,7 +84,7 @@
     install_nvm_from_git
   fi
   if [ "$METHOD" = "script" ]; then
-    if ! nvm_has "curl"; then
+    if ! nvm_has "nvm_curl"; then
       echo >&2 "You need curl or wget to install nvm"
       exit 1
     fi
diff --git a/nvm.sh b/nvm.sh
index 6b94dda..a483aa7 100644
--- a/nvm.sh
+++ b/nvm.sh
@@ -12,6 +12,22 @@
   return $?
 }
 
+nvm_curl() {
+  if nvm_has "curl"; then
+    curl $*
+  elif nvm_has "wget"; then
+    # Emulate curl with wget
+    ARGS="$*"
+    ARGS=${ARGS/--progress-bar /--progress=bar }
+    ARGS=${ARGS/-L /}
+    ARGS=${ARGS/-I /}
+    ARGS=${ARGS/-s /-q }
+    ARGS=${ARGS/-o /-O }
+    ARGS=${ARGS/-C /-c }
+    wget $ARGS
+  fi
+}
+
 # Make zsh glob matching behave same as bash
 # This fixes the "zsh: no matches found" errors
 if nvm_has "unsetopt"; then
@@ -164,7 +180,7 @@
   else
     PATTERN=".*"
   fi
-  VERSIONS=`curl -s $NVM_NODEJS_ORG_MIRROR/ \
+  VERSIONS=`nvm_curl -s $NVM_NODEJS_ORG_MIRROR/ -o - \
               | \egrep -o 'v[0-9]+\.[0-9]+\.[0-9]+' \
               | \grep -w "${PATTERN}" \
               | sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n`
@@ -290,8 +306,8 @@
       version_not_provided=0
       local provided_version
 
-      if ! nvm_has "curl"; then
-        echo 'NVM Needs curl to proceed.' >&2;
+      if ! nvm_has "nvm_curl"; then
+        echo 'nvm needs curl or wget to proceed.' >&2;
         return 1
       fi
 
@@ -354,14 +370,14 @@
           if nvm_binary_available "$VERSION"; then
             t="$VERSION-$os-$arch"
             url="$NVM_NODEJS_ORG_MIRROR/$VERSION/node-${t}.tar.gz"
-            sum=`curl -s $NVM_NODEJS_ORG_MIRROR/$VERSION/SHASUMS.txt | \grep node-${t}.tar.gz | awk '{print $1}'`
+            sum=`nvm_curl -s $NVM_NODEJS_ORG_MIRROR/$VERSION/SHASUMS.txt -o - | \grep node-${t}.tar.gz | awk '{print $1}'`
             local tmpdir
             tmpdir="$NVM_DIR/bin/node-${t}"
             local tmptarball
             tmptarball="$tmpdir/node-${t}.tar.gz"
             if (
               mkdir -p "$tmpdir" && \
-              curl -L -C - --progress-bar $url -o "$tmptarball" && \
+              nvm_curl -L -C - --progress-bar $url -o "$tmptarball" && \
               nvm_checksum "$tmptarball" $sum && \
               tar -xzf "$tmptarball" -C "$tmpdir" --strip-components 1 && \
               rm -f "$tmptarball" && \
@@ -391,16 +407,16 @@
       tmpdir="$NVM_DIR/src"
       local tmptarball
       tmptarball="$tmpdir/node-$VERSION.tar.gz"
-      if [ "`curl -Is "$NVM_NODEJS_ORG_MIRROR/$VERSION/node-$VERSION.tar.gz" | \grep '200 OK'`" != '' ]; then
+      if [ "`nvm_curl -s -I "$NVM_NODEJS_ORG_MIRROR/$VERSION/node-$VERSION.tar.gz" -o - | \grep '200 OK'`" != '' ]; then
         tarball="$NVM_NODEJS_ORG_MIRROR/$VERSION/node-$VERSION.tar.gz"
-        sum=`curl -s $NVM_NODEJS_ORG_MIRROR/$VERSION/SHASUMS.txt | \grep node-$VERSION.tar.gz | awk '{print $1}'`
-      elif [ "`curl -Is "$NVM_NODEJS_ORG_MIRROR/node-$VERSION.tar.gz" | \grep '200 OK'`" != '' ]; then
+        sum=`nvm_curl -s $NVM_NODEJS_ORG_MIRROR/$VERSION/SHASUMS.txt -o - | \grep node-$VERSION.tar.gz | awk '{print $1}'`
+      elif [ "`nvm_curl -s -I "$NVM_NODEJS_ORG_MIRROR/node-$VERSION.tar.gz" -o - | \grep '200 OK'`" != '' ]; then
         tarball="$NVM_NODEJS_ORG_MIRROR/node-$VERSION.tar.gz"
       fi
       if (
         [ -n "$tarball" ] && \
         mkdir -p "$tmpdir" && \
-        curl -L --progress-bar $tarball -o "$tmptarball" && \
+        nvm_curl -L --progress-bar $tarball -o "$tmptarball" && \
         nvm_checksum "$tmptarball" $sum && \
         tar -xzf "$tmptarball" -C "$tmpdir" && \
         cd "$tmpdir/node-$VERSION" && \
@@ -419,10 +435,10 @@
             if [ "`expr "$VERSION" : '\(^v0\.2\.[0-2]$\)'`" != '' ]; then
               echo "npm requires node v0.2.3 or higher" >&2
             else
-              curl https://npmjs.org/install.sh | clean=yes npm_install=0.2.19 sh
+              nvm_curl https://npmjs.org/install.sh -o - | clean=yes npm_install=0.2.19 sh
             fi
           else
-            curl https://npmjs.org/install.sh | clean=yes sh
+            nvm_curl https://npmjs.org/install.sh -o - | clean=yes sh
           fi
         fi
       else