From 328c75fc33440de6da650dfb5b6208cb051e99b4 Mon Sep 17 00:00:00 2001 From: Maxim Belkin Date: Fri, 15 May 2020 10:30:45 -0500 Subject: [PATCH] Move logic related to HOMEBREW_RUBY_PATH to utils/ruby.sh --- Library/Homebrew/cmd/update.sh | 7 ------- Library/Homebrew/utils/ruby.sh | 35 ++++++++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/Library/Homebrew/cmd/update.sh b/Library/Homebrew/cmd/update.sh index 216729e5ed..19ece3f2d0 100644 --- a/Library/Homebrew/cmd/update.sh +++ b/Library/Homebrew/cmd/update.sh @@ -599,13 +599,6 @@ EOS -d "$HOMEBREW_LIBRARY/LinkedKegs" || (-n "$HOMEBREW_DEVELOPER" && -z "$HOMEBREW_UPDATE_PREINSTALL") ]] then - if [[ -n $HOMEBREW_FORCE_VENDOR_RUBY && - -x $HOMEBREW_LIBRARY/Homebrew/vendor/portable-ruby/current/bin/ruby ]] - then - export HOMEBREW_RUBY_PATH="$HOMEBREW_LIBRARY/Homebrew/vendor/portable-ruby/current/bin/ruby" - elif [[ -z $HOMEBREW_DEVELOPER ]]; then - unset HOMEBREW_RUBY_PATH - fi brew update-report "$@" return $? elif [[ -z "$HOMEBREW_UPDATE_PREINSTALL" ]] diff --git a/Library/Homebrew/utils/ruby.sh b/Library/Homebrew/utils/ruby.sh index bd36c4d7d7..a15893d8ce 100644 --- a/Library/Homebrew/utils/ruby.sh +++ b/Library/Homebrew/utils/ruby.sh @@ -1,3 +1,7 @@ +test-ruby () { + "$1" --enable-frozen-string-literal --disable=gems,did_you_mean,rubyopt -rrubygems -e "puts Gem::Version.new(RUBY_VERSION.to_s.dup).to_s.split('.').first(2) == Gem::Version.new('$required_ruby_version').to_s.split('.').first(2)" +} + setup-ruby-path() { local vendor_dir local vendor_ruby_current_version @@ -6,11 +10,19 @@ setup-ruby-path() { # When bumping check if HOMEBREW_MACOS_SYSTEM_RUBY_NEW_ENOUGH (in brew.sh) # also needs to be changed. local required_ruby_version="2.6" + local old_ruby_path + local old_ruby_usable vendor_dir="$HOMEBREW_LIBRARY/Homebrew/vendor" vendor_ruby_current_version="$vendor_dir/portable-ruby/current" vendor_ruby_path="$vendor_ruby_current_version/bin/ruby" + if [[ -n $HOMEBREW_RUBY_PATH ]] + then + old_ruby_path="$HOMEBREW_RUBY_PATH" + old_ruby_usable=$(test-ruby "$HOMEBREW_RUBY_PATH") + fi + if [[ -z "$HOMEBREW_DEVELOPER" ]] then unset HOMEBREW_RUBY_PATH @@ -45,7 +57,26 @@ EOS then HOMEBREW_RUBY_PATH="/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby" else - HOMEBREW_RUBY_PATH="$(type -P ruby)" + HOMEBREW_RUBY_PATH=$(type -P ruby) + if [[ $(test-ruby $HOMEBREW_RUBY_PATH) != "true" ]] + then + HOMEBREW_RUBY_PATH=$(PATH="$HOMEBREW_PATH" type -P ruby) + if [[ $(test-ruby "$HOMEBREW_RUBY_PATH") != "true" ]] + then + if [[ $old_ruby_usable != true ]] + then + odie <<-EOS +Failed to find usable Ruby $required_ruby_version! +If there's no Homebrew Portable Ruby available for your processor: +- install $required_ruby_version with your system package manager (or rbenv/ruby-build) +- make it first in your PATH +- try again +EOS + else + HOMEBREW_RUBY_PATH="$old_ruby_path" + fi + fi + fi fi if [[ -n "$HOMEBREW_MACOS_SYSTEM_RUBY_NEW_ENOUGH" ]] @@ -53,7 +84,7 @@ EOS usable_ruby_version="true" elif [[ -n "$HOMEBREW_RUBY_PATH" && -z "$HOMEBREW_FORCE_VENDOR_RUBY" ]] then - usable_ruby_version="$("$HOMEBREW_RUBY_PATH" --enable-frozen-string-literal --disable=gems,did_you_mean,rubyopt -rrubygems -e "puts Gem::Version.new(RUBY_VERSION.to_s.dup).to_s.split('.').first(2) == Gem::Version.new('$required_ruby_version').to_s.split('.').first(2)")" + usable_ruby_version=$(test-ruby "$HOMEBREW_RUBY_PATH") fi if [[ -z "$HOMEBREW_RUBY_PATH" || -n "$HOMEBREW_FORCE_VENDOR_RUBY" || "$usable_ruby_version" != "true" ]]