From 9b91734f0b6a210f0c6655b0cd25ea288d9ae376 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Wed, 22 Oct 2014 01:48:02 -0700 Subject: [PATCH] =?UTF-8?q?Show=20"=E2=88=9E"=20when=20there's=20a=20circu?= =?UTF-8?q?lar=20alias=20reference.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nvm.sh | 31 +++++++++++++++-- test/fast/Aliases/circular/nvm_resolve_alias | 36 ++++++++++++++++++++ test/fast/Aliases/circular/setup | 10 ++++++ test/fast/Aliases/circular/teardown | 10 ++++++ test/fast/Aliases/{setup_dir => setup} | 0 test/fast/Aliases/{teardown_dir => teardown} | 0 6 files changed, 85 insertions(+), 2 deletions(-) create mode 100755 test/fast/Aliases/circular/nvm_resolve_alias create mode 100755 test/fast/Aliases/circular/setup create mode 100755 test/fast/Aliases/circular/teardown rename test/fast/Aliases/{setup_dir => setup} (100%) rename test/fast/Aliases/{teardown_dir => teardown} (100%) diff --git a/nvm.sh b/nvm.sh index 899b6da..cc8beee 100644 --- a/nvm.sh +++ b/nvm.sh @@ -278,8 +278,35 @@ nvm_resolve_alias() { local PATTERN PATTERN="$1" - if [ -f "$NVM_DIR/alias/$PATTERN" ]; then - nvm_version "$(nvm_alias "$PATTERN" 2> /dev/null)" + local ALIAS + ALIAS="$PATTERN" + local ALIAS_TEMP + + local SEEN_ALIASES + SEEN_ALIASES="$ALIAS" + while true; do + ALIAS_TEMP="$(nvm_alias "$ALIAS" 2> /dev/null)" + + if [ -z "$ALIAS_TEMP" ]; then + break + fi + + if [ -n "$ALIAS_TEMP" ] \ + && printf "$SEEN_ALIASES" | \grep -e "^$ALIAS_TEMP$" > /dev/null; then + ALIAS="∞" + break + fi + + SEEN_ALIASES="$SEEN_ALIASES\n$ALIAS_TEMP" + ALIAS="$ALIAS_TEMP" + done + + if [ -n "$ALIAS" ] && [ "_$ALIAS" != "_$PATTERN" ]; then + if [ "_$ALIAS" = "_∞" ]; then + echo "$ALIAS" + else + nvm_version "$ALIAS" + fi return 0 fi diff --git a/test/fast/Aliases/circular/nvm_resolve_alias b/test/fast/Aliases/circular/nvm_resolve_alias new file mode 100755 index 0000000..4b5dab9 --- /dev/null +++ b/test/fast/Aliases/circular/nvm_resolve_alias @@ -0,0 +1,36 @@ +#!/bin/sh + +die () { echo $@ ; exit 1; } + +. ../../../../nvm.sh + +ALIAS="$(nvm_resolve_alias loopback)" +[ "_$ALIAS" = "_∞" ] || die "nvm_resolve_alias loopback was not ∞; got $ALIAS" +OUTPUT="$(nvm alias loopback)" +EXPECTED_OUTPUT="loopback -> loopback (-> ∞)" +[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias loopback was not $EXPECTED_OUTPUT; got $OUTPUT" + +ALIAS="$(nvm_resolve_alias one)" +[ "_$ALIAS" = "_∞" ] || die "nvm_resolve_alias one was not ∞; got $ALIAS" +OUTPUT="$(nvm alias one)" +EXPECTED_OUTPUT="one -> two (-> ∞)" +[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias one was not $EXPECTED_OUTPUT; got $OUTPUT" + +ALIAS="$(nvm_resolve_alias two)" +[ "_$ALIAS" = "_∞" ] || die "nvm_resolve_alias two was not ∞; got $ALIAS" +OUTPUT="$(nvm alias two)" +EXPECTED_OUTPUT="two -> three (-> ∞)" +[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias two was not $EXPECTED_OUTPUT; got $OUTPUT" + +ALIAS="$(nvm_resolve_alias three)" +[ "_$ALIAS" = "_∞" ] || die "nvm_resolve_alias three was not ∞; got $ALIAS" +OUTPUT="$(nvm alias three)" +EXPECTED_OUTPUT="three -> one (-> ∞)" +[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias three was not $EXPECTED_OUTPUT; got $OUTPUT" + +ALIAS="$(nvm_resolve_alias four)" +[ "_$ALIAS" = "_∞" ] || die "nvm_resolve_alias four was not ∞; got $ALIAS" +OUTPUT="$(nvm alias four)" +EXPECTED_OUTPUT="four -> two (-> ∞)" +[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias four was not $EXPECTED_OUTPUT; got $OUTPUT" + diff --git a/test/fast/Aliases/circular/setup b/test/fast/Aliases/circular/setup new file mode 100755 index 0000000..8f2b142 --- /dev/null +++ b/test/fast/Aliases/circular/setup @@ -0,0 +1,10 @@ +#!/bin/sh + +echo loopback > ../../../../alias/loopback + +echo two > ../../../../alias/one +echo three > ../../../../alias/two +echo one > ../../../../alias/three + +echo two > ../../../../alias/four + diff --git a/test/fast/Aliases/circular/teardown b/test/fast/Aliases/circular/teardown new file mode 100755 index 0000000..9b6c79c --- /dev/null +++ b/test/fast/Aliases/circular/teardown @@ -0,0 +1,10 @@ +#!/bin/sh + +rm -f ../../../../alias/loopback + +rm -f ../../../../alias/one +rm -f ../../../../alias/two +rm -f ../../../../alias/three + +rm -f ../../../../alias/four + diff --git a/test/fast/Aliases/setup_dir b/test/fast/Aliases/setup similarity index 100% rename from test/fast/Aliases/setup_dir rename to test/fast/Aliases/setup diff --git a/test/fast/Aliases/teardown_dir b/test/fast/Aliases/teardown similarity index 100% rename from test/fast/Aliases/teardown_dir rename to test/fast/Aliases/teardown