Merge pull request #518 from creationix/nvm_copy_packages_system

Make `nvm copy-packages system` work
diff --git a/nvm.sh b/nvm.sh
index e4654ae..d127da3 100644
--- a/nvm.sh
+++ b/nvm.sh
@@ -792,11 +792,27 @@
         nvm help
         return 127
       fi
-      VERSION="$(nvm_version "$2")"
 
-      # 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 -g --depth=0 | tail -n +2 | \grep -o -e ' [^@]*' | cut -c 2- | \grep -v npm | 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
 
       echo "$INSTALLS" | xargs npm install -g --quiet
     ;;
diff --git "a/test/slow/nvm copy-packages/Running \"nvm copy-packages $\050nvm ls current\051\" should error out" "b/test/slow/nvm copy-packages/Running \"nvm copy-packages $\050nvm ls current\051\" should error out"
new file mode 100644
index 0000000..2e0d058
--- /dev/null
+++ "b/test/slow/nvm copy-packages/Running \"nvm copy-packages $\050nvm ls current\051\" should error out"
@@ -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'
+