diff --git a/libexec/rbenv-versions b/libexec/rbenv-versions index ea28e5cd..b35cef48 100755 --- a/libexec/rbenv-versions +++ b/libexec/rbenv-versions @@ -19,12 +19,15 @@ else include_system="1" fi +num_versions=0 + print_version() { if [ "$1" == "$current_version" ]; then echo "${hit_prefix}$(rbenv-version 2>/dev/null)" else echo "${miss_prefix}$1" fi + num_versions=$((num_versions + 1)) } # Include "system" in the non-bare output, if it exists @@ -32,8 +35,15 @@ if [ -n "$include_system" ] && RBENV_VERSION=system rbenv-which ruby >/dev/null print_version system fi +shopt -s nullglob for path in "${RBENV_ROOT}/versions/"*; do if [ -d "$path" ]; then print_version "${path##*/}" fi done +shopt -u nullglob + +if [ "$num_versions" -eq 0 ] && [ -n "$include_system" ]; then + echo "Warning: no Ruby detected on the system" >&2 + exit 1 +fi diff --git a/test/versions.bats b/test/versions.bats index 9554c154..5d79ed5a 100644 --- a/test/versions.bats +++ b/test/versions.bats @@ -24,6 +24,12 @@ stub_system_ruby() { assert_success "* system (set by ${RBENV_ROOT}/version)" } +@test "not even system ruby available" { + PATH="$(path_without ruby)" run rbenv-versions + assert_failure + assert_output "Warning: no Ruby detected on the system" +} + @test "bare output no versions installed" { assert [ ! -d "${RBENV_ROOT}/versions" ] run rbenv-versions --bare @@ -113,3 +119,23 @@ OUT 2.0.0 OUT } + +@test "ignores non-directories under versions" { + create_version "1.9" + touch "${RBENV_ROOT}/versions/hello" + + run rbenv-versions --bare + assert_success "1.9" +} + +@test "lists symlinks under versions" { + create_version "1.8.7" + ln -s "1.8.7" "${RBENV_ROOT}/versions/1.8" + + run rbenv-versions --bare + assert_success + assert_output <