Unverified Commit 67ac0b45 authored by Koichiro Iwao's avatar Koichiro Iwao
Browse files

the short list now shows only latest stable versions

for each Ruby implementations like the following.

    2.4.9
    2.5.7
    2.6.5
    2.7.0
    jruby-9.2.9.0
    maglev-1.0.0
    mruby-2.1.0
    rbx-3.107
    truffleruby-19.3.1
parent e67a940d
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@
#        rbenv install -l|--list
#        rbenv install --version
#
#   -l/--list          List available versions except EoL'ed versions
#   -l/--list          List latest stable versions for each Ruby
#   -L/--list-all      List all available versions
#   -f/--force         Install even if the version appears to be installed already
#   -s/--skip-existing Skip if the version appears to be installed already
@@ -80,6 +80,11 @@ for option in "${OPTIONS[@]}"; do
    ;;
  "l" | "list" )
    ruby-build --list
    {
      echo
      echo "Only latest stable releases for each Ruby implementation are shown."
      echo "Try 'rbenv install --list-all' to show all available versions."
    } 1>&2
    exit
    ;;
  "L" | "list-all" )
+15 −5
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@
#   -4/--ipv4        Resolve names to IPv4 addresses only
#   -6/--ipv6        Resolve names to IPv6 addresses only
#   -d/--definitions List all built-in definitions
#   -l/--list        List built-in definitions except EoL'ed versions
#   -l/--list        List latest stable releases for each Ruby
#   --version        Show version of ruby-build
#

@@ -1196,6 +1196,7 @@ usage() {
  [ -z "$1" ] || exit "$1"
}

# list all versions
list_definitions() {
  { for DEFINITION_DIR in "${RUBY_BUILD_DEFINITIONS[@]}"; do
      [ -d "$DEFINITION_DIR" ] && ls "$DEFINITION_DIR"
@@ -1203,8 +1204,8 @@ list_definitions() {
  } | sort_versions | uniq
}

# listing exclude RC, preview, dev versions and EoL'ed versions
list_definitions_exclude_eol() {
# list only latest stable versions excluding RC, preview, dev and EoL'ed
list_latest_definitions() {
  { for DEFINITION_DIR in "${RUBY_BUILD_DEFINITIONS[@]}"; do
      [ -d "$DEFINITION_DIR" ] && \
      (
@@ -1213,7 +1214,16 @@ list_definitions_exclude_eol() {
        grep -v -e '-rc[0-9]*$' -e '-preview[0-9]*$' -e '-dev$'
      )
    done
  } | sort_versions | uniq
  } | filter_previous_versions | sort_versions | uniq
}

filter_previous_versions() {
  # sort in this function looks redundunt but it is necessary
  # rbx-3.99 appears latest unless the sort
  sed 'h; s/[+-]/./g; s/.p\([[:digit:]]\)/.z.\1/; s/$/.z/; G; s/\n/ /' | \
    LC_ALL=C sort -t. -k 1,1 -k 2,2n -k 3,3n -k 4,4n -k 5,5n | \
    sed 's/[+.]/ /; s/[0-9].*z //; s/^\([0-9].[0-9]\)/mri\1 \1/' | \
    awk '{ latest[$1] =$2 } END{ for(key in latest) { print latest[key] } }'
}

sort_versions() {
@@ -1247,7 +1257,7 @@ for option in "${OPTIONS[@]}"; do
    exit 0
    ;;
  "l" | "list")
    list_definitions_exclude_eol
    list_latest_definitions
    exit 0
    ;;
  "k" | "keep" )
+65 −0
Original line number Diff line number Diff line
@@ -102,6 +102,71 @@ truffleruby-19.3.0"
  assert_success "$expected"
}

@test "filtering previous Ruby versions" {
  export RUBY_BUILD_ROOT="$TMP"
  mkdir -p "${RUBY_BUILD_ROOT}/share/ruby-build"

  all_versions="
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.4.7
2.4.8
2.4.9
2.5.0
2.5.1
2.5.2
2.5.3
2.5.4
2.5.5
2.5.6
2.5.7
2.6.0
2.6.1
2.6.2
2.6.3
2.6.4
2.6.5
2.7.0
jruby-1.5.6
jruby-9.2.7.0
jruby-9.2.8.0
jruby-9.2.9.0
maglev-1.0.0
mruby-1.4.1
mruby-2.0.0
mruby-2.0.1
mruby-2.1.0
rbx-3.104
rbx-3.105
rbx-3.106
rbx-3.107
truffleruby-19.2.0.1
truffleruby-19.3.0
truffleruby-19.3.0.2
truffleruby-19.3.1"

  expected="2.4.9
2.5.7
2.6.5
2.7.0
jruby-9.2.9.0
maglev-1.0.0
mruby-2.1.0
rbx-3.107
truffleruby-19.3.1"

  for ver in $all_versions; do
    touch "${RUBY_BUILD_ROOT}/share/ruby-build/$ver"
  done
  run ruby-build --list
  assert_success "$expected"
}

@test "removing duplicate Ruby versions" {
  export RUBY_BUILD_ROOT="$TMP"
  export RUBY_BUILD_DEFINITIONS="${RUBY_BUILD_ROOT}/share/ruby-build"