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
;;