Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

utils/ruby.sh: search PATH for Ruby on Linux. update.sh: keep HOMEBREW_RUBY_PATH set. #7545

Merged
merged 14 commits into from
May 27, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 0 additions & 1 deletion Library/Homebrew/cmd/update.sh
Original file line number Diff line number Diff line change
Expand Up @@ -599,7 +599,6 @@ EOS
-d "$HOMEBREW_LIBRARY/LinkedKegs" ||
(-n "$HOMEBREW_DEVELOPER" && -z "$HOMEBREW_UPDATE_PREINSTALL") ]]
then
unset HOMEBREW_RUBY_PATH
brew update-report "$@"
return $?
elif [[ -z "$HOMEBREW_UPDATE_PREINSTALL" ]]
Expand Down
115 changes: 63 additions & 52 deletions Library/Homebrew/utils/ruby.sh
Original file line number Diff line number Diff line change
@@ -1,81 +1,92 @@
test-ruby () {
[[ ! -x $1 ]] && { echo "false"; return 1; }
"$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)" 2>/dev/null
}

setup-ruby-path() {
local vendor_dir
local vendor_ruby_current_version
local vendor_ruby_path
local vendor_ruby_latest_version
local vendor_ruby_current_version
local usable_ruby_version
# 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 ruby_exec
local advice="
If there's no Homebrew Portable Ruby available for your processor:
- install Ruby $required_ruby_version with your system package manager (or rbenv/ruby-build)
- make it first in your PATH
- try again
"

vendor_dir="$HOMEBREW_LIBRARY/Homebrew/vendor"
vendor_ruby_current_version="$vendor_dir/portable-ruby/current"
vendor_ruby_path="$vendor_ruby_current_version/bin/ruby"
vendor_ruby_path="$vendor_dir/portable-ruby/current/bin/ruby"
vendor_ruby_latest_version=$(<"$vendor_dir/portable-ruby-version")
vendor_ruby_current_version=$(readlink "$vendor_dir/portable-ruby/current")

if [[ -z "$HOMEBREW_DEVELOPER" ]]
unset HOMEBREW_RUBY_PATH

if [[ "$HOMEBREW_COMMAND" == "vendor-install" ]]
then
unset HOMEBREW_RUBY_PATH
return 0
fi

if [[ -z "$HOMEBREW_RUBY_PATH" && "$HOMEBREW_COMMAND" != "vendor-install" ]]
if [[ -x "$vendor_ruby_path" ]]
then
if [[ -x "$vendor_ruby_path" ]]
HOMEBREW_RUBY_PATH="$vendor_ruby_path"
if [[ $vendor_ruby_current_version != $vendor_ruby_latest_version ]]
then
HOMEBREW_RUBY_PATH="$vendor_ruby_path"

if [[ $(readlink "$vendor_ruby_current_version") != "$(<"$vendor_dir/portable-ruby-version")" ]]
if ! brew vendor-install ruby
then
if ! brew vendor-install ruby
if [[ -n "$HOMEBREW_MACOS" ]]
then
if [[ -n "$HOMEBREW_MACOS" ]]
then
odie "Failed to upgrade Homebrew Portable Ruby!"
else
odie <<-EOS
Failed to upgrade Homebrew Portable Ruby!
If there's no Homebrew Portable Ruby available for your processor:
- install Ruby $required_ruby_version with your system package manager (or rbenv/ruby-build)
- make it first in your PATH
- try again
EOS
fi
odie "Failed to upgrade Homebrew Portable Ruby!"
else
odie "Failed to upgrade Homebrew Portable Ruby!$advice"
fi
fi
fi
else
if [[ -n "$HOMEBREW_MACOS" ]]
then
HOMEBREW_RUBY_PATH="/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby"
else
if [[ -n "$HOMEBREW_MACOS" ]]
then
HOMEBREW_RUBY_PATH="/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby"
else
HOMEBREW_RUBY_PATH="$(type -P ruby)"
fi
IFS=$'\n' # Do word splitting on new lines only
for ruby_exec in $(which -a ruby) $(PATH=$HOMEBREW_PATH which -a ruby)
do
if [[ $(test-ruby "$ruby_exec") == "true" ]]; then
HOMEBREW_RUBY_PATH=$ruby_exec
break
fi
done
IFS=$' \t\n' # Restore IFS to its default value
[[ -z $HOMEBREW_RUBY_PATH ]] && onoe "Failed to find usable Ruby $required_ruby_version!"
fi

if [[ -n "$HOMEBREW_MACOS_SYSTEM_RUBY_NEW_ENOUGH" ]]
then
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)")"
fi
if [[ -n "$HOMEBREW_MACOS_SYSTEM_RUBY_NEW_ENOUGH" ]]
then
usable_ruby_version="true"
elif [[ -n "$HOMEBREW_RUBY_PATH" && -z "$HOMEBREW_FORCE_VENDOR_RUBY" ]]
then
usable_ruby_version=$(test-ruby "$HOMEBREW_RUBY_PATH")
fi

if [[ -z "$HOMEBREW_RUBY_PATH" || -n "$HOMEBREW_FORCE_VENDOR_RUBY" || "$usable_ruby_version" != "true" ]]
if [[ -z "$HOMEBREW_RUBY_PATH" || -n "$HOMEBREW_FORCE_VENDOR_RUBY" || "$usable_ruby_version" != "true" ]]
then
brew vendor-install ruby
if [[ ! -x "$vendor_ruby_path" ]]
then
brew vendor-install ruby
if [[ ! -x "$vendor_ruby_path" ]]
if [[ -n "$HOMEBREW_MACOS" ]]
then
if [[ -n "$HOMEBREW_MACOS" ]]
then
odie "Failed to install Homebrew Portable Ruby (and your system version is too old)!"
else
odie <<-EOS
Failed to install Homebrew Portable Ruby and cannot find another 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
fi
odie "Failed to install Homebrew Portable Ruby (and your system version is too old)!"
else
odie "Failed to install Homebrew Portable Ruby and cannot find another Ruby $required_ruby_version!$advice"
fi
HOMEBREW_RUBY_PATH="$vendor_ruby_path"
fi
HOMEBREW_RUBY_PATH="$vendor_ruby_path"
fi
fi

Expand Down