From e06bf905df0416f98d80c1912c7607d983be13a3 Mon Sep 17 00:00:00 2001 From: Koichiro Iwao Date: Thu, 30 Jan 2020 14:48:43 +0900 Subject: [PATCH 01/15] Add new option to exclude EoL'ed versions when showing available versions --- bin/rbenv-install | 6 ++++++ bin/ruby-build | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/bin/rbenv-install b/bin/rbenv-install index 5a723d7730..6ee4fc8ee9 100755 --- a/bin/rbenv-install +++ b/bin/rbenv-install @@ -8,6 +8,8 @@ # rbenv install --version # # -l/--list List all available versions +# -L/--list-exclude-eol +# List available versions excluding EoL'ed # -f/--force Install even if the version appears to be installed already # -s/--skip-existing Skip if the version appears to be installed already # @@ -38,6 +40,7 @@ shopt -u nullglob # Provide rbenv completions if [ "$1" = "--complete" ]; then echo --list + echo --list-exclude-eol echo --force echo --skip-existing echo --keep @@ -80,6 +83,9 @@ for option in "${OPTIONS[@]}"; do ruby-build --definitions exit ;; + "L" | "list-exclude-eol" ) + ruby-build --definitions-exclude-eol + ;; "f" | "force" ) FORCE=true ;; diff --git a/bin/ruby-build b/bin/ruby-build index d51383b739..d1cb873ca6 100755 --- a/bin/ruby-build +++ b/bin/ruby-build @@ -10,6 +10,8 @@ # -4/--ipv4 Resolve names to IPv4 addresses only # -6/--ipv6 Resolve names to IPv6 addresses only # --definitions List all built-in definitions +# --definitions-exclude-eol +# List all builtt-in definitions excluding EoL'ed # --version Show version of ruby-build # @@ -1202,6 +1204,13 @@ list_definitions() { } | sort_versions | uniq } +list_definitions_exclude_eol() { + { for DEFINITION_DIR in "${RUBY_BUILD_DEFINITIONS[@]}"; do + [ -d "$DEFINITION_DIR" ] && (cd "$DEFINITION_DIR"; grep -L -e warn_eol -e warn_unsupported *) + done + } | sort_versions | uniq +} + sort_versions() { 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 | awk '{print $2}' @@ -1232,6 +1241,10 @@ for option in "${OPTIONS[@]}"; do list_definitions exit 0 ;; + "definitions-exclude-eol") + list_definitions_exclude_eol + exit 0 + ;; "k" | "keep" ) KEEP_BUILD_PATH=true ;; From 4577be8fac063ce40f7c2506e146d6af523816d0 Mon Sep 17 00:00:00 2001 From: Koichiro Iwao Date: Thu, 30 Jan 2020 15:29:07 +0900 Subject: [PATCH 02/15] Fix CI: Add `--list-exclude-eol` option to test --- test/rbenv.bats | 1 + 1 file changed, 1 insertion(+) diff --git a/test/rbenv.bats b/test/rbenv.bats index 89aa970d43..2f9425511a 100644 --- a/test/rbenv.bats +++ b/test/rbenv.bats @@ -140,6 +140,7 @@ OUT assert_success assert_output < Date: Wed, 19 Feb 2020 10:17:59 +0900 Subject: [PATCH 03/15] ruby-build: add short option "-d" alias to "--definitions" --- bin/ruby-build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/ruby-build b/bin/ruby-build index d1cb873ca6..5900fba58c 100755 --- a/bin/ruby-build +++ b/bin/ruby-build @@ -9,7 +9,7 @@ # -v/--verbose Verbose mode: print compilation status to stdout # -4/--ipv4 Resolve names to IPv4 addresses only # -6/--ipv6 Resolve names to IPv6 addresses only -# --definitions List all built-in definitions +# -d/--definitions List all built-in definitions # --definitions-exclude-eol # List all builtt-in definitions excluding EoL'ed # --version Show version of ruby-build @@ -1237,7 +1237,7 @@ for option in "${OPTIONS[@]}"; do echo usage 0 ;; - "definitions" ) + "d" | "definitions" ) list_definitions exit 0 ;; From 12b17e6e9340f1e6a0d7a516c4be1c383e6c6c73 Mon Sep 17 00:00:00 2001 From: Koichiro Iwao Date: Wed, 19 Feb 2020 11:01:43 +0900 Subject: [PATCH 04/15] rbenv-install: show the short list by default As suggested by @eregon, now we have "-l/--list" option for the short list of versions. Behaviour of `ruby-build --definitions` is kept as before for compatibility. rbenv-install: -L/--list-all full list -l/--list short list ruby-build: -d/--definitions full list -l/--list short list --- bin/rbenv-install | 14 +++++++------- bin/ruby-build | 5 ++--- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/bin/rbenv-install b/bin/rbenv-install index 6ee4fc8ee9..d63427328d 100755 --- a/bin/rbenv-install +++ b/bin/rbenv-install @@ -7,9 +7,8 @@ # rbenv install -l|--list # rbenv install --version # -# -l/--list List all available versions -# -L/--list-exclude-eol -# List available versions excluding EoL'ed +# -l/--list List available versions except EoL'ed versions +# -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 # @@ -40,7 +39,7 @@ shopt -u nullglob # Provide rbenv completions if [ "$1" = "--complete" ]; then echo --list - echo --list-exclude-eol + echo --list-all echo --force echo --skip-existing echo --keep @@ -80,11 +79,12 @@ for option in "${OPTIONS[@]}"; do usage 0 ;; "l" | "list" ) - ruby-build --definitions + ruby-build --list exit ;; - "L" | "list-exclude-eol" ) - ruby-build --definitions-exclude-eol + "L" | "list-all" ) + ruby-build --definitions + exit ;; "f" | "force" ) FORCE=true diff --git a/bin/ruby-build b/bin/ruby-build index 5900fba58c..38d28b9b48 100755 --- a/bin/ruby-build +++ b/bin/ruby-build @@ -10,8 +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 -# --definitions-exclude-eol -# List all builtt-in definitions excluding EoL'ed +# -l/--list List built-in definitions except EoL'ed versions # --version Show version of ruby-build # @@ -1241,7 +1240,7 @@ for option in "${OPTIONS[@]}"; do list_definitions exit 0 ;; - "definitions-exclude-eol") + "l" | "list") list_definitions_exclude_eol exit 0 ;; From f9aae4e6ff5c60f0eac74bba296f5d31bc23a5fb Mon Sep 17 00:00:00 2001 From: Koichiro Iwao Date: Wed, 19 Feb 2020 11:13:35 +0900 Subject: [PATCH 05/15] Fix CI --- test/rbenv.bats | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/rbenv.bats b/test/rbenv.bats index 2f9425511a..19017287c7 100644 --- a/test/rbenv.bats +++ b/test/rbenv.bats @@ -140,7 +140,7 @@ OUT assert_success assert_output < Date: Tue, 3 Mar 2020 15:13:39 +0900 Subject: [PATCH 06/15] -rc, -preview, -dev versions are also removed from short list --- bin/ruby-build | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/bin/ruby-build b/bin/ruby-build index 38d28b9b48..214ecd0674 100755 --- a/bin/ruby-build +++ b/bin/ruby-build @@ -1203,9 +1203,15 @@ list_definitions() { } | sort_versions | uniq } +# listing exclude RC, preview, dev versions and EoL'ed versions list_definitions_exclude_eol() { { for DEFINITION_DIR in "${RUBY_BUILD_DEFINITIONS[@]}"; do - [ -d "$DEFINITION_DIR" ] && (cd "$DEFINITION_DIR"; grep -L -e warn_eol -e warn_unsupported *) + [ -d "$DEFINITION_DIR" ] && \ + ( + cd "$DEFINITION_DIR"; + grep -L -e warn_eol -e warn_unsupported * | \ + grep -v -e '-rc[0-9]*$' -e '-preview[0-9]*$' -e '-dev$' + ) done } | sort_versions | uniq } From abaebf3ea1646ba33d3cd58941b1135f2693db0e Mon Sep 17 00:00:00 2001 From: Koichiro Iwao Date: Tue, 3 Mar 2020 15:42:13 +0900 Subject: [PATCH 07/15] Fix CI --- test/rbenv.bats | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/rbenv.bats b/test/rbenv.bats index 19017287c7..878eb049ae 100644 --- a/test/rbenv.bats +++ b/test/rbenv.bats @@ -38,7 +38,7 @@ stub_ruby_build() { stub_ruby_build \ "--definitions : echo 1.8.7 1.9.3-p0 1.9.3-p194 2.1.2 | tr ' ' $'\\n'" - run rbenv-install --list + run rbenv-install --list-all assert_success assert_output < Date: Fri, 6 Mar 2020 22:06:21 +0900 Subject: [PATCH 08/15] do not exclude warn_unsupported versions in short list it is not actually EoL'ed. `warn_unsupported` indicates that the versions are nearing EoL. --- bin/ruby-build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/ruby-build b/bin/ruby-build index 214ecd0674..3e70fed169 100755 --- a/bin/ruby-build +++ b/bin/ruby-build @@ -1209,7 +1209,7 @@ list_definitions_exclude_eol() { [ -d "$DEFINITION_DIR" ] && \ ( cd "$DEFINITION_DIR"; - grep -L -e warn_eol -e warn_unsupported * | \ + grep -L -e warn_eol * | \ grep -v -e '-rc[0-9]*$' -e '-preview[0-9]*$' -e '-dev$' ) done From 67ac0b45d62c7d0a21ad3f67ab4d3b565214ac52 Mon Sep 17 00:00:00 2001 From: Koichiro Iwao Date: Fri, 6 Mar 2020 22:14:45 +0900 Subject: [PATCH 09/15] 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 --- bin/rbenv-install | 7 ++++- bin/ruby-build | 20 +++++++++---- test/definitions.bats | 65 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 6 deletions(-) diff --git a/bin/rbenv-install b/bin/rbenv-install index d63427328d..dbd2c4f95c 100755 --- a/bin/rbenv-install +++ b/bin/rbenv-install @@ -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" ) diff --git a/bin/ruby-build b/bin/ruby-build index 3e70fed169..90146350d2 100755 --- a/bin/ruby-build +++ b/bin/ruby-build @@ -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" ) diff --git a/test/definitions.bats b/test/definitions.bats index 2c5551735b..b30022bea5 100644 --- a/test/definitions.bats +++ b/test/definitions.bats @@ -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" From ad48baadb9d5f52f80762f0dd1830d06ba5ff911 Mon Sep 17 00:00:00 2001 From: Koichiro Iwao Date: Sat, 7 Mar 2020 21:06:01 +0900 Subject: [PATCH 10/15] rename some functions to reflect more closely what it does Pointed out by @mislav in review --- bin/ruby-build | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bin/ruby-build b/bin/ruby-build index 90146350d2..79f3bd1f2d 100755 --- a/bin/ruby-build +++ b/bin/ruby-build @@ -1205,7 +1205,7 @@ list_definitions() { } # list only latest stable versions excluding RC, preview, dev and EoL'ed -list_latest_definitions() { +list_maintained_versions() { { for DEFINITION_DIR in "${RUBY_BUILD_DEFINITIONS[@]}"; do [ -d "$DEFINITION_DIR" ] && \ ( @@ -1214,10 +1214,10 @@ list_latest_definitions() { grep -v -e '-rc[0-9]*$' -e '-preview[0-9]*$' -e '-dev$' ) done - } | filter_previous_versions | sort_versions | uniq + } | extract_latest_versions | sort_versions | uniq } -filter_previous_versions() { +extract_latest_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/ /' | \ @@ -1257,7 +1257,7 @@ for option in "${OPTIONS[@]}"; do exit 0 ;; "l" | "list") - list_latest_definitions + list_maintained_versions exit 0 ;; "k" | "keep" ) From 47c18a46dcfa135f06b1961fb60109d60939203b Mon Sep 17 00:00:00 2001 From: Koichiro Iwao Date: Sat, 7 Mar 2020 21:08:03 +0900 Subject: [PATCH 11/15] revert adding -d options alias for --definitions This is out of scope of this PR. --- bin/ruby-build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/ruby-build b/bin/ruby-build index 79f3bd1f2d..628ba0d7b4 100755 --- a/bin/ruby-build +++ b/bin/ruby-build @@ -9,7 +9,7 @@ # -v/--verbose Verbose mode: print compilation status to stdout # -4/--ipv4 Resolve names to IPv4 addresses only # -6/--ipv6 Resolve names to IPv6 addresses only -# -d/--definitions List all built-in definitions +# --definitions List all built-in definitions # -l/--list List latest stable releases for each Ruby # --version Show version of ruby-build # @@ -1252,7 +1252,7 @@ for option in "${OPTIONS[@]}"; do echo usage 0 ;; - "d" | "definitions" ) + "definitions" ) list_definitions exit 0 ;; From b2c25b68016323c48cc938d76a209271c4d13547 Mon Sep 17 00:00:00 2001 From: Koichiro Iwao Date: Sat, 7 Mar 2020 21:26:47 +0900 Subject: [PATCH 12/15] skip cd in to DEFINITION_DIR in subshell as it is not necessary. Pointed out by @mislav in review. --- bin/ruby-build | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/bin/ruby-build b/bin/ruby-build index 628ba0d7b4..3d653b8872 100755 --- a/bin/ruby-build +++ b/bin/ruby-build @@ -1208,11 +1208,9 @@ list_definitions() { list_maintained_versions() { { for DEFINITION_DIR in "${RUBY_BUILD_DEFINITIONS[@]}"; do [ -d "$DEFINITION_DIR" ] && \ - ( - cd "$DEFINITION_DIR"; - grep -L -e warn_eol * | \ + grep -L -e warn_eol "$DEFINITION_DIR"/* 2>/dev/null | \ + sed 's|.*/||' | \ grep -v -e '-rc[0-9]*$' -e '-preview[0-9]*$' -e '-dev$' - ) done } | extract_latest_versions | sort_versions | uniq } From c634b8e886593f74505ebd730f31971dee845b9f Mon Sep 17 00:00:00 2001 From: Koichiro Iwao Date: Sat, 7 Mar 2020 21:28:49 +0900 Subject: [PATCH 13/15] Reword s/Try/Use/ --- bin/rbenv-install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/rbenv-install b/bin/rbenv-install index dbd2c4f95c..a63031433b 100755 --- a/bin/rbenv-install +++ b/bin/rbenv-install @@ -83,7 +83,7 @@ for option in "${OPTIONS[@]}"; do { echo echo "Only latest stable releases for each Ruby implementation are shown." - echo "Try 'rbenv install --list-all' to show all available versions." + echo "Use 'rbenv install --list-all' to show all available versions." } 1>&2 exit ;; From e5951b2ec0797edf36545e33c75402e1ea5dc7e4 Mon Sep 17 00:00:00 2001 From: Koichiro Iwao Date: Mon, 27 Apr 2020 11:26:31 +0900 Subject: [PATCH 14/15] PR: #1419 should be applied also bin/rbenv-install --- bin/rbenv-install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/rbenv-install b/bin/rbenv-install index e908a7a634..ad87eec32f 100755 --- a/bin/rbenv-install +++ b/bin/rbenv-install @@ -8,7 +8,7 @@ # rbenv install --version # # -l/--list List latest stable versions for each Ruby -# -L/--list-all List all available versions +# -L/--list-all List all local 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 # From 61ca880f7fc7e1ddb06270850b1df8b7a60668b9 Mon Sep 17 00:00:00 2001 From: Koichiro Iwao Date: Sat, 2 May 2020 23:21:56 +0900 Subject: [PATCH 15/15] Replace one more "all available versions" with "all local versions" --- bin/rbenv-install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/rbenv-install b/bin/rbenv-install index ad87eec32f..9048f18144 100755 --- a/bin/rbenv-install +++ b/bin/rbenv-install @@ -83,7 +83,7 @@ for option in "${OPTIONS[@]}"; do { echo echo "Only latest stable releases for each Ruby implementation are shown." - echo "Use 'rbenv install --list-all' to show all available versions." + echo "Use 'rbenv install --list-all' to show all local versions." } 1>&2 exit ;;