Don't mess with the order of the path locations when changing versions

This commit is contained in:
Xandor Schiefer 2016-11-14 19:19:39 +02:00
parent 0798f7413c
commit 4b5df30460
3 changed files with 46 additions and 30 deletions

33
nvm.sh
View File

@ -484,11 +484,24 @@ nvm_strip_path() {
-e "s#${NVM_DIR}/versions/[^/]*/[^/]*${2-}[^:]*##g"
}
nvm_prepend_path() {
nvm_change_path() {
# if theres no initial path, just return the supplementary path
if [ -z "${1-}" ]; then
nvm_echo "${2-}"
nvm_echo "${3-}${2-}"
# if the initial path doesnt contain an nvm path, prepend the supplementary
# path
elif [ "${1#*$NVM_DIR}" == "$1" ]; then
nvm_echo "${3-}${2-}:${1-}"
# use sed to replace the existing nvm path with the supplementary path. This
# preserves the order of the path.
else
nvm_echo "${2-}:${1-}"
nvm_echo "${1-}" | command sed \
-e "s#${NVM_DIR}/[^/]*${2-}[^:]*:#${3-}${2-}:#g" \
-e "s#:${NVM_DIR}/[^/]*${2-}[^:]*#:${3-}${2-}#g" \
-e "s#${NVM_DIR}/[^/]*${2-}[^:]*#${3-}${2-}#g" \
-e "s#${NVM_DIR}/versions/[^/]*/[^/]*${2-}[^:]*:#${3-}${2-}:#g" \
-e "s#:${NVM_DIR}/versions/[^/]*/[^/]*${2-}[^:]*#:${3-}${2-}#g" \
-e "s#${NVM_DIR}/versions/[^/]*/[^/]*${2-}[^:]*#${3-}${2-}#g"
fi
}
@ -2636,18 +2649,14 @@ nvm() {
local NVM_VERSION_DIR
NVM_VERSION_DIR="$(nvm_version_path "$VERSION")"
# Strip other version from PATH
PATH="$(nvm_strip_path "$PATH" "/bin")"
# Prepend current version
PATH="$(nvm_prepend_path "$PATH" "$NVM_VERSION_DIR/bin")"
# Change current version
PATH="$(nvm_change_path "$PATH" "/bin" "$NVM_VERSION_DIR")"
if nvm_has manpath; then
if [ -z "$MANPATH" ]; then
MANPATH=$(manpath)
fi
# Strip other version from MANPATH
MANPATH="$(nvm_strip_path "$MANPATH" "/share/man")"
# Prepend current version
MANPATH="$(nvm_prepend_path "$MANPATH" "$NVM_VERSION_DIR/share/man")"
# Change current version
MANPATH="$(nvm_change_path "$MANPATH" "/share/man" "$NVM_VERSION_DIR")"
export MANPATH
fi
export PATH
@ -3146,7 +3155,7 @@ nvm() {
nvm_ensure_default_set nvm_get_arch nvm_get_os \
nvm_print_implicit_alias nvm_validate_implicit_alias \
nvm_resolve_alias nvm_ls_current nvm_alias \
nvm_binary_available nvm_prepend_path nvm_strip_path \
nvm_binary_available nvm_change_path nvm_strip_path \
nvm_num_version_groups nvm_format_version nvm_ensure_version_prefix \
nvm_normalize_version nvm_is_valid_version \
nvm_ensure_version_installed \

View File

@ -0,0 +1,25 @@
#!/bin/sh
die () { echo "$@" ; exit 1; }
\. ../../../nvm.sh
TEST_PATH=/usr/bin:/usr/local/bin
NEW_PATH=`nvm_change_path "$TEST_PATH" "/bin" "$NVM_DIR/versions/node/v7.1.0/bin"`
[ "$NEW_PATH" = "$NVM_DIR/versions/node/v7.1.0:/bin:/usr/bin:/usr/local/bin" ] || die "Not correctly changed: $NEW_PATH "
TEST_PATH=/home/user/code/test/node_modules/.bin:$NVM_DIR/versions/node/v4.5.0:/usr/bin:/usr/local/bin
NEW_PATH=`nvm_change_path "$TEST_PATH" "/bin" "$NVM_DIR/versions/node/v7.1.0/bin"`
[ "$NEW_PATH" = "/home/user/code/test/node_modules/.bin:$NVM_DIR/versions/node/v7.1.0:/bin:/usr/bin:/usr/local/bin" ] || die "Not correctly changed: $NEW_PATH "
EMPTY_PATH=
NEW_PATH=`nvm_change_path "$EMPTY_PATH" "/bin" "$NVM_DIR/versions/node/v4.5.0/bin"`
[ "$NEW_PATH" = "$NVM_DIR/versions/node/v4.5.0/bin" ] || die "Not correctly prepended: $NEW_PATH "

View File

@ -1,18 +0,0 @@
#!/bin/sh
die () { echo "$@" ; exit 1; }
\. ../../../nvm.sh
TEST_PATH=/usr/bin:/usr/local/bin
NEW_PATH=`nvm_prepend_path "$TEST_PATH" "$NVM_DIR/v0.2.5/bin"`
[ "$NEW_PATH" = "$NVM_DIR/v0.2.5/bin:/usr/bin:/usr/local/bin" ] || die "Not correctly prepended: $NEW_PATH "
EMPTY_PATH=
NEW_PATH=`nvm_prepend_path "$EMPTY_PATH" "$NVM_DIR/v0.2.5/bin"`
[ "$NEW_PATH" = "$NVM_DIR/v0.2.5/bin" ] || die "Not correctly prepended: $NEW_PATH "