Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package ruby-build for openSUSE:Factory checked in at 2026-05-04 12:53:08 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ruby-build (Old) and /work/SRC/openSUSE:Factory/.ruby-build.new.30200 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ruby-build" Mon May 4 12:53:08 2026 rev:110 rq:1350526 version:20260503 Changes: -------- --- /work/SRC/openSUSE:Factory/ruby-build/ruby-build.changes 2026-04-28 12:00:26.923685826 +0200 +++ /work/SRC/openSUSE:Factory/.ruby-build.new.30200/ruby-build.changes 2026-05-04 12:55:59.447588163 +0200 @@ -1,0 +2,15 @@ +Sun May 3 14:38:26 UTC 2026 - Müller <[email protected]> + +- Update to version 20260503. + Changelog: https://github.com/rbenv/ruby-build/releases/tag/v20260503 + * Fix definition lookup for ruby-prefixed names like `ruby-dev` by @amatsuda in #2621 + +------------------------------------------------------------------- +Fri May 1 13:28:34 UTC 2026 - Lukas Müller <[email protected]> + +- Update to version 20260501. + Changelog: https://github.com/rbenv/ruby-build/releases/tag/v20260501 + * Support passing a version prefix argument by @byroot in #2610 + * Add `mruby-4.0.0` by @mislav in #2620 + +------------------------------------------------------------------- Old: ---- ruby-build-20260426.tar.gz New: ---- ruby-build-20260503.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ruby-build.spec ++++++ --- /var/tmp/diff_new_pack.TwGPmV/_old 2026-05-04 12:55:59.999610883 +0200 +++ /var/tmp/diff_new_pack.TwGPmV/_new 2026-05-04 12:56:00.003611047 +0200 @@ -24,7 +24,7 @@ %endif Name: ruby-build -Version: 20260426 +Version: 20260503 Release: 0 BuildArch: noarch License: MIT ++++++ ruby-build-20260426.tar.gz -> ruby-build-20260503.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruby-build-20260426/README.md new/ruby-build-20260503/README.md --- old/ruby-build-20260426/README.md 2026-04-26 23:37:45.000000000 +0200 +++ new/ruby-build-20260503/README.md 2026-05-03 16:14:36.000000000 +0200 @@ -42,11 +42,13 @@ # As a standalone program $ ruby-build --list # lists latest stable releases for each Ruby $ ruby-build --definitions # lists all definitions, including outdated ones -$ ruby-build 3.2.2 ~/.rubies/ruby-3.2.2 # installs Ruby 3.2.2 -$ ruby-build -d ruby-3.2.2 ~/.rubies # alternate form for the previous example +$ ruby-build 3.4.9 ~/.rubies/ruby-3.4.9 # installs Ruby 3.4.9 +$ ruby-build -d ruby-3.4.9 ~/.rubies # alternate form for the previous example +$ ruby-build -d ruby-3.4 ~/.rubies # installs latest Ruby 3.4.x # As an rbenv plugin -$ rbenv install 3.2.2 # installs Ruby 3.2.2 to ~/.rbenv/versions/3.2.2 +$ rbenv install 3.4.9 # installs Ruby 3.4.9 to ~/.rbenv/versions/3.4.9 +$ rbenv install 3 # installs latest Ruby 3.x ``` > [!WARNING] @@ -61,6 +63,28 @@ Depending on the context, ruby-build does a little bit more than the above: for example, it will try to link Ruby to the appropriate OpenSSL version, even if that means downloading and compiling OpenSSL itself; it will discover and link to Homebrew-installed instances of some libraries like libyaml and readline, etc. +### Ruby versions + +When listing "latest" Ruby versions, such as in `ruby-build --list` output, ruby-build only knows of Ruby versions that are bundled with this project. That means that when a new Ruby version comes out, ruby-build will not know about it immediately— you will have to upgrade ruby-build before you can use it to install the new Ruby version. This is because ruby-build bundles [definition files](#custom-build-definitions) for each individual Ruby version. + +If it's important to you that your installer tool always consults remote resources to download the list of latest Ruby versions (without having to upgrade the tool itself), check out [ruby-install][] as an alternative to ruby-build. + +### Ruby implementations + +ruby-build ships with definitions for the following Ruby implementations, denoted by version prefixes in the `ruby-build --list` output: + +- [CRuby][]: listed in ruby-build as unprefixed version numbers in the `X.Y.Z` format. This is the main Ruby implementation that most people use and is also historically known as "MRI". ruby-build allows adding the `ruby-` prefix to CRuby version numbers for compatibility with other version managers. + +- `jruby`: [JRuby][] is a high-performance Ruby implementation with real threading built on top of the Java virtual machine (JVM). + +- `mruby`: [mruby][] is a lightweight, embeddable Ruby implementation for microcontrollers. + +- `picoruby`: [PicoRuby][] is an alternative mruby implementation for one-chip microcontrollers. + +- `truffleruby`: The Native standalone distribution of [TruffleRuby][], an implementation of Ruby on top of GraalVM's Truffle framework. + +- `truffleruby+graalvm`: The JVM standalone distribution of TruffleRuby. + ### Advanced Usage #### Custom Build Definitions @@ -197,3 +221,9 @@ [wiki]: https://github.com/rbenv/ruby-build/wiki [build-env]: https://github.com/rbenv/ruby-build/wiki#suggested-build-environment [issue tracker]: https://github.com/rbenv/ruby-build/issues + [cruby]: https://www.ruby-lang.org/ + [truffleruby]: https://truffleruby.dev/ + [picoruby]: https://github.com/picoruby/picoruby#readme + [mruby]: https://mruby.org/ + [jruby]: https://www.jruby.org/ + [ruby-install]: https://github.com/postmodern/ruby-install#readme diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruby-build-20260426/bin/rbenv-install new/ruby-build-20260503/bin/rbenv-install --- old/ruby-build-20260426/bin/rbenv-install 2026-04-26 23:37:45.000000000 +0200 +++ new/ruby-build-20260503/bin/rbenv-install 2026-05-03 16:14:36.000000000 +0200 @@ -134,8 +134,6 @@ [ "${#ARGUMENTS[@]}" -le 1 ] || usage 1 >&2 -unset VERSION_NAME - # The first argument contains the definition to install. If the # argument is missing, try to install whatever local app-specific # version is specified by rbenv. Show usage instructions if a local @@ -144,6 +142,12 @@ [ -n "$DEFINITION" ] || DEFINITION="$(rbenv-local 2>/dev/null || true)" [ -n "$DEFINITION" ] || usage 1 >&2 +if VERSION_NAME="$(ruby-build --resolve "$DEFINITION")"; then + DEFINITION="$VERSION_NAME" +else + unset VERSION_NAME +fi + # Define `before_install` and `after_install` functions that allow # plugin hooks to register a string of code for execution before or # after the installation process. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruby-build-20260426/bin/ruby-build new/ruby-build-20260503/bin/ruby-build --- old/ruby-build-20260426/bin/ruby-build 2026-04-26 23:37:45.000000000 +0200 +++ new/ruby-build-20260503/bin/ruby-build 2026-05-03 16:14:36.000000000 +0200 @@ -2,10 +2,12 @@ # # Usage: ruby-build [-dvpk] <definition> <prefix> [-- <configure-args...>] # ruby-build {--list|--definitions} +# ruby-build --resolve <version> # ruby-build --version # # -l, --list List latest stable releases for each Ruby # --definitions List all local definitions, including outdated ones +# --resolve Print the latest stable definition name matching a version prefix # --version Show version of ruby-build # # -d, --dir Install the Ruby in <prefix>/<definition> instead of <prefix> @@ -16,7 +18,7 @@ # -6, --ipv6 Resolve names to IPv6 addresses only # -RUBY_BUILD_VERSION="20260426" +RUBY_BUILD_VERSION="20260503" OLDIFS="$IFS" @@ -1411,6 +1413,40 @@ } | extract_latest_versions | sort_versions | uniq } +# resolve a version prefix to the exact version name for which exists a +# definition file. Example: "ruby-3" => "3.4.9" +resolve_version() { + local version="${1#ruby-}" + + # Look for an exact match first. + for DEFINITION_DIR in "${RUBY_BUILD_DEFINITIONS[@]}"; do + if [ -f "${DEFINITION_DIR}/$1" ]; then + echo "$1" + return 0 + fi + if [ -f "${DEFINITION_DIR}/${version}" ]; then + echo "$version" + return 0 + fi + done + + local grep_pattern="${version%.}" + if [ "$grep_pattern" = "ruby" ]; then + # Special case to select the latest CRuby. + grep_pattern="[0-9]" + else + grep_pattern="$(tr 'A-Z' 'a-z' <<<"${grep_pattern//./\\.}")" + fi + + version=$(list_definitions | \ + grep -e "^${grep_pattern}[-.]" | \ + grep -v -e '-rc[0-9]*$' -e '-preview[0-9]*$' -e '-dev$' | \ + tail -n 1) + + [ -n "$version" ] || return 1 + echo "$version" +} + extract_latest_versions() { # sort in this function looks redundunt but it is necessary # rbx-3.99 appears latest unless the sort @@ -1453,6 +1489,14 @@ "l" | "list") EARLY_EXIT=list_maintained_versions ;; + "resolve") + if [ "${#ARGUMENTS[*]}" -eq 1 ]; then + EARLY_EXIT=resolve_version + else + echo "ruby-build: '--resolve' needs an argument" >&2 + EARLY_EXIT=usage_error + fi + ;; "d" | "dir") APPEND_DEFINITION_TO_PREFIX=true ;; @@ -1503,12 +1547,9 @@ RUBY_CONFIGURE_OPTS_ARRAY=("${EXTRA_ARGUMENTS[@]}") fi -if [ "$APPEND_DEFINITION_TO_PREFIX" = "true" ]; then - if [ -p "$DEFINITION_PATH" ]; then - echo "ruby-build: using named pipes in combination with \`--dir' is not possible" >&2 - EARLY_EXIT=usage_error - fi - PREFIX_PATH="$PREFIX_PATH/$(basename "$DEFINITION_PATH")" +if [[ "$APPEND_DEFINITION_TO_PREFIX" = "true" && -p "$DEFINITION_PATH" ]]; then + echo "ruby-build: using named pipes in combination with \`--dir' is not possible" >&2 + EARLY_EXIT=usage_error fi case "$EARLY_EXIT" in @@ -1521,6 +1562,10 @@ "$EARLY_EXIT" exit 0 ;; +resolve_version ) + resolve_version "${ARGUMENTS[0]}" || exit 1 + exit 0 + ;; usage_error ) echo >&2 usage 1 >&2 @@ -1533,30 +1578,29 @@ ;; esac +VERSION_NAME_PREFIX="" + # expand the <definition> argument to full path of the definition file if [[ ! -f "$DEFINITION_PATH" && ! -p "$DEFINITION_PATH" ]]; then + if ! VERSION_NAME="$(resolve_version "$DEFINITION_PATH")"; then + echo "ruby-build: definition not found: ${DEFINITION_PATH}" >&2 + exit 2 + fi + + if [[ $DEFINITION_PATH == ruby-* && $VERSION_NAME != ruby-* ]]; then + VERSION_NAME_PREFIX="ruby-" + fi + for DEFINITION_DIR in "${RUBY_BUILD_DEFINITIONS[@]}"; do - if [ -f "${DEFINITION_DIR}/${DEFINITION_PATH}" ]; then - DEFINITION_PATH="${DEFINITION_DIR}/${DEFINITION_PATH}" + if [ -f "${DEFINITION_DIR}/${VERSION_NAME}" ]; then + DEFINITION_PATH="${DEFINITION_DIR}/${VERSION_NAME}" break fi done +fi - # If the given definition is like ruby-X.Y.Z, search again with X.Y.Z - if [[ "$DEFINITION_PATH" =~ ^ruby-[0-9] ]]; then - DEFINITION_PATH="${DEFINITION_PATH#ruby-}" - for DEFINITION_DIR in "${RUBY_BUILD_DEFINITIONS[@]}"; do - if [ -f "${DEFINITION_DIR}/${DEFINITION_PATH}" ]; then - DEFINITION_PATH="${DEFINITION_DIR}/${DEFINITION_PATH}" - break - fi - done - fi - - if [ ! -f "$DEFINITION_PATH" ]; then - echo "ruby-build: definition not found: ${DEFINITION_PATH}" >&2 - exit 2 - fi +if [ "$APPEND_DEFINITION_TO_PREFIX" = "true" ]; then + PREFIX_PATH="$PREFIX_PATH/${VERSION_NAME_PREFIX}$(basename "$DEFINITION_PATH")" fi # normalize the <prefix> argument diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruby-build-20260426/share/man/man1/ruby-build.1 new/ruby-build-20260503/share/man/man1/ruby-build.1 --- old/ruby-build-20260426/share/man/man1/ruby-build.1 2026-04-26 23:37:45.000000000 +0200 +++ new/ruby-build-20260503/share/man/man1/ruby-build.1 2026-05-03 16:14:36.000000000 +0200 @@ -2,12 +2,12 @@ .\" Title: ruby-build .\" Author: Mislav Marohnić .\" Generator: Asciidoctor 2.0.26 -.\" Date: 2024-09-23 +.\" Date: 2026-05-03 .\" Manual: ruby-build Manual -.\" Source: ruby-build 20260426 +.\" Source: ruby-build 20260503 .\" Language: English .\" -.TH "RUBY\-BUILD" "1" "2024-09-23" "ruby\-build 20260426" "ruby\-build Manual" +.TH "RUBY\-BUILD" "1" "2026-05-03" "ruby\-build 20260503" "ruby\-build Manual" .ie \n(.g .ds Aq \(aq .el .ds Aq ' .ss \n[.ss] 0 @@ -35,15 +35,14 @@ .br ruby\-build {\-\-list|\-\-definitions} .br +ruby\-build \-\-resolve \fI<version>\fP +.br ruby\-build \-\-version .SH "DESCRIPTION" .sp ruby\-build downloads, compiles, and installs a Ruby version named by the \fIdefinition\fP argument into the location specified by \fIprefix\fP. .sp -The \fIdefinition\fP argument can optionally start with "ruby\-", in which case -it resolves to a CRuby that matches the version number that follows. -.sp The \fIdefinition\fP argument can be a path to a file on disk, in which case it is sourced into ruby\-build as a bash script. .sp @@ -53,6 +52,91 @@ By default, all compile output is redirected to a log file at \f(CR$TMPDIR/ruby\-build.*.log\fP. Activate the verbose mode to skip the log file and print everything to standard streams. +.SH "RUBY VERSIONS" +.sp +When listing "latest" Ruby versions, such as in \f(CR\-\-list\fP output, +ruby\-build only knows of Ruby versions that are bundled with this project. +That means that when a new Ruby version comes out, ruby\-build will not +know about it immediately; you will have to upgrade ruby\-build before you +can use it to install the new Ruby version. +.SH "RUBY IMPLEMENTATIONS" +.sp +ruby\-build ships with definitions for the following Ruby implementations: +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +. sp -1 +. IP \(bu 2.3 +.\} +CRuby, also known as "MRI": denoted by version numbers in form of "X.Y.Z". +This is the main Ruby implementation that most people use. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +. sp -1 +. IP \(bu 2.3 +.\} +"jruby": High\-performance Ruby implementation with real threading built +on top of the Java virtual machine (JVM). +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +. sp -1 +. IP \(bu 2.3 +.\} +"mruby": Lightweight Ruby for microcontrollers. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +. sp -1 +. IP \(bu 2.3 +.\} +"picoruby": Alternative mruby implementation for one\-chip microcontrollers. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +. sp -1 +. IP \(bu 2.3 +.\} +"truffleruby": The Native standalone distribution of TruffleRuby, an +implementation of Ruby on top of GraalVM\(cqs Truffle framework. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +. sp -1 +. IP \(bu 2.3 +.\} +"truffleruby+graalvm": The JVM standalone distribution of TruffleRuby. +.RE +.sp +The \fIdefinition\fP argument may optionally start with "ruby\-", in which case +it resolves to a CRuby that matches the version number that follows. The +\fIdefinition\fP argument may also be a name of one of the alternative Ruby +implementations, in which case the latest version of that implementation +will be installed. .SH "OPTIONS" .sp \fB\-l, \-\-list\fP @@ -65,6 +149,11 @@ List all local definitions, including outdated ones .RE .sp +\fB\-\-resolve\fP +.RS 4 +Print the definition name of the latest stable Ruby version matching the \fIversion\fP argument +.RE +.sp \fB\-\-version\fP .RS 4 Show version of ruby\-build @@ -106,27 +195,37 @@ .if n .RS 4 .nf .fam C -$ ruby\-build 3.2.2 /path/to/destination \-\- \-\-disable\-install\-doc \-\-with\-openssl\-dir=/opt/openssl +$ ruby\-build 3.4.9 /path/to/destination \-\- \-\-disable\-install\-doc \-\-with\-openssl\-dir=/opt/openssl +.fam +.fi +.if n .RE +.sp +Install a Ruby version to \f(CR~/.rubies/ruby\-3.4.9\fP: +.sp +.if n .RS 4 +.nf +.fam C +$ ruby\-build \-\-dir ruby\-3.4.9 ~/.rubies .fam .fi .if n .RE .sp -Install a Ruby version to \f(CR~/.rubies/ruby\-3.2.2\fP: +Install the latest Ruby 3.x version to \f(CR~/.rubies/ruby\-3.x.y\fP: .sp .if n .RS 4 .nf .fam C -$ ruby\-build \-\-dir ruby\-3.2.2 ~/.rubies +$ ruby\-build \-\-dir ruby\-3 ~/.rubies .fam .fi .if n .RE .sp -Install a Ruby version to \f(CR~/.rbenv/versions/3.3.5\fP: +Install a Ruby version to \f(CR~/.rbenv/versions/3.3.11\fP: .sp .if n .RS 4 .nf .fam C -$ ruby\-build \-\-dir 3.3.5 ~/.rbenv/versions +$ ruby\-build \-\-dir 3.3.11 ~/.rbenv/versions .fam .fi .if n .RE @@ -136,7 +235,7 @@ .if n .RS 4 .nf .fam C -$ rbenv install 3.3.5 +$ rbenv install 3.3.11 .fam .fi .if n .RE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruby-build-20260426/share/man/man1/ruby-build.1.adoc new/ruby-build-20260503/share/man/man1/ruby-build.1.adoc --- old/ruby-build-20260426/share/man/man1/ruby-build.1.adoc 2026-04-26 23:37:45.000000000 +0200 +++ new/ruby-build-20260503/share/man/man1/ruby-build.1.adoc 2026-05-03 16:14:36.000000000 +0200 @@ -13,6 +13,7 @@ ruby-build [-dvpk] _<definition>_ _<prefix>_ [-- _<configure-args>_...] + ruby-build {--list|--definitions} + +ruby-build --resolve _<version>_ + ruby-build --version == Description @@ -20,9 +21,6 @@ ruby-build downloads, compiles, and installs a Ruby version named by the _definition_ argument into the location specified by _prefix_. -The _definition_ argument can optionally start with "ruby-", in which case -it resolves to a CRuby that matches the version number that follows. - The _definition_ argument can be a path to a file on disk, in which case it is sourced into ruby-build as a bash script. @@ -33,6 +31,39 @@ `$TMPDIR/ruby-build.*.log`. Activate the verbose mode to skip the log file and print everything to standard streams. +== Ruby versions + +When listing "latest" Ruby versions, such as in `--list` output, +ruby-build only knows of Ruby versions that are bundled with this project. +That means that when a new Ruby version comes out, ruby-build will not +know about it immediately; you will have to upgrade ruby-build before you +can use it to install the new Ruby version. + +== Ruby implementations + +ruby-build ships with definitions for the following Ruby implementations: + +- CRuby, also known as "MRI": denoted by version numbers in form of "X.Y.Z". + This is the main Ruby implementation that most people use. + +- "jruby": High-performance Ruby implementation with real threading built + on top of the Java virtual machine (JVM). + +- "mruby": Lightweight Ruby for microcontrollers. + +- "picoruby": Alternative mruby implementation for one-chip microcontrollers. + +- "truffleruby": The Native standalone distribution of TruffleRuby, an + implementation of Ruby on top of GraalVM's Truffle framework. + +- "truffleruby+graalvm": The JVM standalone distribution of TruffleRuby. + +The _definition_ argument may optionally start with "ruby-", in which case +it resolves to a CRuby that matches the version number that follows. The +_definition_ argument may also be a name of one of the alternative Ruby +implementations, in which case the latest version of that implementation +will be installed. + == Options *-l, --list*:: @@ -41,6 +72,9 @@ *--definitions*:: List all local definitions, including outdated ones +*--resolve*:: + Print the definition name of the latest stable Ruby version matching the _version_ argument + *--version*:: Show version of ruby-build @@ -66,22 +100,27 @@ Install a Ruby version while tweaking some configuration options: ---- -$ ruby-build 3.2.2 /path/to/destination -- --disable-install-doc --with-openssl-dir=/opt/openssl +$ ruby-build 3.4.9 /path/to/destination -- --disable-install-doc --with-openssl-dir=/opt/openssl +---- + +Install a Ruby version to `~/.rubies/ruby-3.4.9`: +---- +$ ruby-build --dir ruby-3.4.9 ~/.rubies ---- -Install a Ruby version to `~/.rubies/ruby-3.2.2`: +Install the latest Ruby 3.x version to `~/.rubies/ruby-3.x.y`: ---- -$ ruby-build --dir ruby-3.2.2 ~/.rubies +$ ruby-build --dir ruby-3 ~/.rubies ---- -Install a Ruby version to `~/.rbenv/versions/3.3.5`: +Install a Ruby version to `~/.rbenv/versions/3.3.11`: ---- -$ ruby-build --dir 3.3.5 ~/.rbenv/versions +$ ruby-build --dir 3.3.11 ~/.rbenv/versions ---- Usage as rbenv plugin, accomplishes the same as the previous example: ---- -$ rbenv install 3.3.5 +$ rbenv install 3.3.11 ---- == Environment Variables diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruby-build-20260426/share/ruby-build/mruby-4.0.0 new/ruby-build-20260503/share/ruby-build/mruby-4.0.0 --- old/ruby-build-20260426/share/ruby-build/mruby-4.0.0 1970-01-01 01:00:00.000000000 +0100 +++ new/ruby-build-20260503/share/ruby-build/mruby-4.0.0 2026-05-03 16:14:36.000000000 +0200 @@ -0,0 +1 @@ +install_package "mruby-4.0.0" "https://github.com/mruby/mruby/archive/4.0.0.tar.gz#e2ea271dbed14e9f2b33df773ae447b747dbc242ce2675022c0a57efea85a7b4" mruby diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruby-build-20260426/test/build.bats new/ruby-build-20260503/test/build.bats --- old/ruby-build-20260426/test/build.bats 2026-04-26 23:37:45.000000000 +0200 +++ new/ruby-build-20260503/test/build.bats 2026-05-03 16:14:36.000000000 +0200 @@ -787,6 +787,30 @@ OUT } +@test "nested install destination with ruby prefix and version prefix" { + cached_tarball "ruby-3.2.45" configure + + stub_repeated brew false + stub_make_install + + mkdir -p "$TMP"/definitions + cat > "$TMP"/definitions/3.2.45 <<DEF +install_package "ruby-3.2.45" "http://ruby-lang.org/ruby/2.0/ruby-3.2.45.tar.gz" +DEF + + RUBY_BUILD_DEFINITIONS="$TMP"/definitions run ruby-build --dir ruby-3.2 "$INSTALL_ROOT" + assert_success + + unstub brew + unstub make + + assert_build_log <<OUT +ruby-3.2.45: [--prefix=$INSTALL_ROOT/ruby-3.2.45,--with-ext=openssl,psych,+] +make -j 2 +make install +OUT +} + @test "definition file with ruby prefix" { export RUBY_BUILD_CACHE_PATH="$FIXTURE_ROOT" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruby-build-20260426/test/definitions.bats new/ruby-build-20260503/test/definitions.bats --- old/ruby-build-20260426/test/definitions.bats 2026-04-26 23:37:45.000000000 +0200 +++ new/ruby-build-20260503/test/definitions.bats 2026-05-03 16:14:36.000000000 +0200 @@ -60,6 +60,111 @@ assert_success "" } +@test "installing definition by prefix" { + export RUBY_BUILD_DEFINITIONS="${TMP}/definitions" + mkdir -p "${TMP}/definitions" + + echo false > "${TMP}/definitions/1.8.6" + echo false > "${TMP}/definitions/1.9.3" + echo true > "${TMP}/definitions/1.9.10" + echo false > "${TMP}/definitions/1.90.0" + echo false > "${TMP}/definitions/2.0.0" + + run bin/ruby-build "1.9" "${TMP}/install" + assert_success "" +} + +@test "resolve failure" { + run bin/ruby-build --resolve "doesntexist" + assert_failure "" +} + +@test "resolve definition by version prefix" { + export RUBY_BUILD_DEFINITIONS="${TMP}/definitions" + mkdir -p "${TMP}/definitions" + + touch "${TMP}/definitions/1.8.6" + touch "${TMP}/definitions/1.9.3" + touch "${TMP}/definitions/1.9.10" + touch "${TMP}/definitions/1.90.0" + touch "${TMP}/definitions/2.0.0" + + run bin/ruby-build --resolve "1.9" + assert_success "1.9.10" +} + +@test "resolve definition by exact match" { + export RUBY_BUILD_DEFINITIONS="${TMP}/definitions" + mkdir -p "${TMP}/definitions" + + touch "${TMP}/definitions/3.2.1" + + run bin/ruby-build --resolve "3.2.1" + assert_success "3.2.1" +} + +@test "resolve definition by exact match and ruby prefix" { + export RUBY_BUILD_DEFINITIONS="${TMP}/definitions" + mkdir -p "${TMP}/definitions" + + touch "${TMP}/definitions/3.2.1" + + run bin/ruby-build --resolve "ruby-3.2.1" + assert_success "3.2.1" +} + +@test "resolve definition by exact match for ruby-prefixed name" { + export RUBY_BUILD_DEFINITIONS="${TMP}/definitions" + mkdir -p "${TMP}/definitions" + + touch "${TMP}/definitions/ruby-dev" + + run bin/ruby-build --resolve "ruby-dev" + assert_success "ruby-dev" +} + +@test "resolve definition with ruby prefix" { + export RUBY_BUILD_DEFINITIONS="${TMP}/definitions" + mkdir -p "${TMP}/definitions" + + touch "${TMP}/definitions/1.8.6" + touch "${TMP}/definitions/1.9.3" + touch "${TMP}/definitions/1.9.10" + touch "${TMP}/definitions/1.90.0" + touch "${TMP}/definitions/2.0.0" + + run bin/ruby-build --resolve "ruby-1.9" + assert_success "1.9.10" +} + +@test "resolve definition by implementation name" { + export RUBY_BUILD_DEFINITIONS="${TMP}/definitions" + mkdir -p "${TMP}/definitions" + + touch "${TMP}/definitions/fooruby-1.8.6" + touch "${TMP}/definitions/fooruby-1.9.3" + touch "${TMP}/definitions/1.9.10" + touch "${TMP}/definitions/1.90.0" + touch "${TMP}/definitions/2.0.0" + + run bin/ruby-build --resolve "FooRuby" + assert_success "fooruby-1.9.3" +} + +@test "resolve definition by implementation name and version" { + export RUBY_BUILD_DEFINITIONS="${TMP}/definitions" + mkdir -p "${TMP}/definitions" + + touch "${TMP}/definitions/foo-1.8.6" + touch "${TMP}/definitions/foo-1.9.3" + touch "${TMP}/definitions/1.9.10" + touch "${TMP}/definitions/1.90.0" + touch "${TMP}/definitions/2.0.0" + + run bin/ruby-build --resolve "foo-1.8" + assert_success "foo-1.8.6" +} + @test "installing nonexistent definition" { run ruby-build "nonexistent" "${TMP}/install" assert [ "$status" -eq 2 ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruby-build-20260426/test/rbenv.bats new/ruby-build-20260503/test/rbenv.bats --- old/ruby-build-20260426/test/rbenv.bats 2026-04-26 23:37:45.000000000 +0200 +++ new/ruby-build-20260503/test/rbenv.bats 2026-05-03 16:14:36.000000000 +0200 @@ -16,7 +16,7 @@ } @test "install proper" { - stub_ruby_build 'echo ruby-build "$@"' + stub_ruby_build 'echo 2.1.2' 'echo ruby-build "$@"' run rbenv-install 2.1.2 assert_success "ruby-build 2.1.2 ${RBENV_ROOT}/versions/2.1.2" @@ -27,7 +27,7 @@ } @test "install with flags" { - stub_ruby_build 'echo "ruby-build $(inspect_args "$@")"' + stub_ruby_build 'echo 2.1.2' 'echo "ruby-build $(inspect_args "$@")"' run rbenv-install -kpv 2.1.2 -- --with-configure-opt="hello world" assert_success "ruby-build --keep --verbose --patch 2.1.2 ${RBENV_ROOT}/versions/2.1.2 -- \"--with-configure-opt=hello world\"" @@ -39,7 +39,7 @@ @test "suggest running rbenv global after install" { rm -rf "$RBENV_ROOT/version" - stub_ruby_build 'echo ruby-build "$@"' + stub_ruby_build 'echo 2.1.2' 'echo ruby-build "$@"' run rbenv-install 2.1.2 assert_success <<OUT @@ -52,7 +52,7 @@ } @test "install rbenv local version by default" { - stub_ruby_build 'echo ruby-build "$1"' + stub_ruby_build 'echo 2.1.2' 'echo ruby-build "$1"' stub rbenv-local 'echo 2.1.2' run rbenv-install @@ -100,7 +100,8 @@ fi stub_repeated brew false - stub_ruby_build 'echo ERROR >&2 && exit 2' \ + stub_ruby_build 'exit 1' \ + 'echo ERROR >&2 && exit 2' \ "--definitions : echo 1.8.7 1.9.3-p0 1.9.3-p194 2.1.2 | tr ' ' $'\\n'" run rbenv-install 1.9.3 @@ -127,10 +128,11 @@ @test "Homebrew upgrade instructions" { stub brew "--prefix : echo '${BATS_TEST_DIRNAME%/*}'" - stub_ruby_build 'echo ERROR >&2 && exit 2' \ + stub_ruby_build 'exit 1' \ + 'echo ERROR >&2 && exit 2' \ "--definitions : true" - run rbenv-install 1.9.3 + run rbenv-install 1.9.10 assert_failure assert_output <<OUT ERROR @@ -148,7 +150,8 @@ @test "no build definitions from plugins" { refute [ -e "${RBENV_ROOT}/plugins" ] - stub_ruby_build 'echo $RUBY_BUILD_DEFINITIONS' + stub_ruby_build 'echo 2.1.2' \ + 'echo $RUBY_BUILD_DEFINITIONS' run rbenv-install 2.1.2 assert_success "" @@ -157,7 +160,8 @@ @test "some build definitions from plugins" { mkdir -p "${RBENV_ROOT}/plugins/foo/share/ruby-build" mkdir -p "${RBENV_ROOT}/plugins/bar/share/ruby-build" - stub_ruby_build "echo \$RUBY_BUILD_DEFINITIONS | tr ':' $'\\n'" + stub_ruby_build 'echo 2.1.2' \ + "echo \$RUBY_BUILD_DEFINITIONS | tr ':' $'\\n'" run rbenv-install 2.1.2 assert_success
