Ruby gem install adjustments. (#10580)

Signed-off-by: Satadru Pramanik <satadru@gmail.com>
This commit is contained in:
Satadru Pramanik, DO, MPH, MEng
2024-10-07 17:22:59 -04:00
committed by GitHub
parent a4394867e1
commit 8a99729ed0
3 changed files with 65 additions and 67 deletions

View File

@@ -41,10 +41,10 @@ def set_vars(passed_name = nil, passed_version = nil)
# This assumes the package class name starts with 'Ruby_' and
# version is in the form '(gem version)-ruby-(ruby version)'.
# For example, name 'Ruby_awesome' and version '1.0.0-ruby-3.3'.
gem_name_test = passed_name.gsub(/^ruby_/, '')
@remote_gem_ver = Gem.latest_version_for(gem_name_test).to_s
@remote_gem_ver = Gem.latest_version_for(gem_name_test.gsub!('_', '-')).to_s if @remote_gem_ver.empty?
@gem_name = gem_name_test
# Just use the fetcher.suggest_gems_from_name function to figure out
# proper gem name with the appropriate dashes and underscores.
@gem_name = Gem::SpecFetcher.fetcher.suggest_gems_from_name(passed_name.gsub(/^ruby_/, '')).first
@remote_gem_ver = Gem.latest_version_for(@gem_name).to_s
@gem_ver = passed_version.split('-').first.to_s
@gem_package_ver = @gem_ver.dup
# Use latest gem version.
@@ -58,25 +58,14 @@ class RUBY < Package
def self.preflight
@install_gem ||= true
@force_gem_build ||= false
set_vars(name, version)
puts "Examining #{@gem_name} gem...".orange
@gem_filelist_path = File.join(CREW_META_PATH, "#{name}.filelist")
@gem_latest_version_installed = Kernel.system "gem list -i \"^#{@gem_name}\$\" -v #{@gem_ver}", %i[out err] => File::NULL
@gem_latest_version_installed = Kernel.system "gem search -l -i \"^#{@gem_name}\$\" -v #{@gem_ver}", %i[out err] => File::NULL
crewlog "preflight: @gem_name: #{@gem_name}, @gem_ver: #{@gem_ver}, @gem_latest_version_installed: #{@gem_latest_version_installed} && @remote_gem_ver.to_s: #{Gem::Version.new(@remote_gem_ver.to_s)} == Gem::Version.new(@gem_ver): #{Gem::Version.new(@gem_ver)} && File.file?(@gem_filelist_path): #{File.file?(@gem_filelist_path)}"
# Create a filelist from the gem if the latest gem version is
# installed but the filelist doesn't exist.
if @gem_latest_version_installed && !File.file?(@gem_filelist_path)
# Verify gem is installed before trying to get files from the gem...
begin
gem @gem_name
rescue LoadError
puts " -> install #{@gem_name} gem".orange
Gem.install(@gem_name)
gem @gem_name
end
system "gem contents #{@gem_name} > #{@gem_filelist_path}"
end
Kernel.system "gem contents #{@gem_name}", %i[out] => [@gem_filelist_path, 'w'] if @gem_latest_version_installed && !File.file?(@gem_filelist_path)
# If the version number gem reports isn't the same as the version
# number that Chromebrew has recorded, force an install.
# Otherwise we can skip the install and bail.
@@ -104,7 +93,7 @@ class RUBY < Package
end
def self.install
gem_anyversion_installed = Kernel.system "gem list -i \"^#{@gem_name}\$\"", %i[out err] => File::NULL
gem_anyversion_installed = Kernel.system "gem search -l -i \"^#{@gem_name}\$\"", %i[out err] => File::NULL
crewlog "install: @gem_name: #{@gem_name}, @gem_ver: #{@gem_ver}, !@gem_latest_version_installed && gem_anyversion_installed: #{!@gem_latest_version_installed && gem_anyversion_installed}, @gem_latest_version_installed: #{@gem_latest_version_installed} && @remote_gem_ver.to_s: #{Gem::Version.new(@remote_gem_ver.to_s)} == Gem::Version.new(@gem_ver): #{Gem::Version.new(@gem_ver)} && File.file?(@gem_filelist_path): #{File.file?(@gem_filelist_path)}"
crewlog "no_compile_needed?: #{no_compile_needed?} @gem_binary_build_needed.blank?: #{@gem_binary_build_needed.blank?}, gem_compile_needed?: #{gem_compile_needed?}"
unless @install_gem
@@ -123,13 +112,13 @@ class RUBY < Package
end
elsif gem_anyversion_installed
puts "Updating #{@gem_name} gem to #{@gem_ver}...".orange
system "gem update -N #{@gem_name} --conservative"
Kernel.system "gem update -N #{@gem_name} --conservative"
else
puts "Installing #{@gem_name} gem #{@gem_ver}...".orange
system "gem install -N #{@gem_name} --conservative"
Kernel.system "gem install -N #{@gem_name} --conservative"
end
system "gem cleanup #{@gem_name}"
system "gem contents #{@gem_name} > #{@gem_filelist_path}"
@gems_needing_cleanup = Array(@gems_needing_cleanup) << @gem_name
Kernel.system "gem contents #{@gem_name}", %i[out] => [@gem_filelist_path, 'w']
@ruby_install_extras&.call
@install_gem = false
@just_built_gem = false