mirror of
https://github.com/chromebrew/chromebrew.git
synced 2026-01-08 23:18:10 -05:00
Fix issue with overmatching gem names. (#10603)
* Fix issue with overmatching gem names. Use regex to only match the exact gem name. Also adjust underscores to dashes if the gem package name doesn't match a gem name. Signed-off-by: Satadru Pramanik <satadru@gmail.com> * Show package names when showing update status. Signed-off-by: Satadru Pramanik <satadru@gmail.com> * Update installer to record pre-installed gems. Signed-off-by: Satadru Pramanik <satadru@gmail.com> * Handle gem version lists sometimes not being sorted. Signed-off-by: Satadru Pramanik <satadru@gmail.com> --------- Signed-off-by: Satadru Pramanik <satadru@gmail.com>
This commit is contained in:
committed by
GitHub
parent
f4b7d38e1a
commit
c06b30fa1c
3
.github/workflows/Rubocop.yml
vendored
3
.github/workflows/Rubocop.yml
vendored
@@ -1,6 +1,9 @@
|
||||
---
|
||||
name: Rubocop
|
||||
on: workflow_call
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
jobs:
|
||||
rubocop:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
20
install.sh
20
install.sh
@@ -168,8 +168,6 @@ echo_out 'Set up the local package repo...'
|
||||
|
||||
# Download the chromebrew repository.
|
||||
curl -L --progress-bar https://github.com/"${OWNER}"/"${REPO}"/tarball/"${BRANCH}" | tar -xz --strip-components=1 -C "${CREW_LIB_PATH}"
|
||||
# Disable ruby updates until late in the install.
|
||||
sed -i -e "s/depends_on 'default_gems'/# depends_on 'default_gems'/" -e "s/depends_on 'bundled_gems'/# depends_on 'bundled_gems'/" -e "s/^ version.*$/ version '1.0'/" "${CREW_LIB_PATH}/packages/core.rb"
|
||||
|
||||
BOOTSTRAP_PACKAGES='lz4 zlib xzutils zstd crew_mvdir ruby git ca_certificates libyaml openssl'
|
||||
|
||||
@@ -270,7 +268,7 @@ function extract_install () {
|
||||
|
||||
function update_device_json () {
|
||||
cd "${CREW_CONFIG_PATH}"
|
||||
echo_intra "Adding new information on ${1} to device.json..."
|
||||
echo_intra "Adding new information on ${1} ${2} to device.json..."
|
||||
new_info=$(jq --arg name "$1" --arg version "$2" --arg sha256 "$3" '.installed_packages |= . + [{"name": $name, "version": $version, "sha256": $sha256}]' device.json)
|
||||
cat <<< "${new_info}" > device.json
|
||||
}
|
||||
@@ -338,6 +336,18 @@ gem sources -u
|
||||
gem update --no-update-sources -N --system
|
||||
gem cleanup
|
||||
|
||||
# Mark packages as installed for pre-installed gems.
|
||||
mapfile -t installed_gems < <(gem list | awk -F ' \(' '{print $1, $2}' | sed -e 's/default://' -e 's/)//' -e 's/,//' | awk '{print $1, $2}')
|
||||
for i in "${!installed_gems[@]}"
|
||||
do
|
||||
j="${installed_gems[$i]}"
|
||||
gem_package="${j% *}"
|
||||
crew_gem_package="ruby_${gem_package//-/_}"
|
||||
gem_version="${j#* }"
|
||||
gem contents "${gem_package}" > "${CREW_META_PATH}/${crew_gem_package}.filelist"
|
||||
update_device_json "ruby_${gem_package//-/_}" "${gem_version}" ""
|
||||
done
|
||||
|
||||
echo_info "Installing essential ruby gems...\n"
|
||||
BOOTSTRAP_GEMS='activesupport concurrent-ruby highline ptools'
|
||||
# shellcheck disable=SC2086
|
||||
@@ -394,9 +404,7 @@ else
|
||||
# Set mtimes of files to when the file was committed.
|
||||
git-restore-mtime -sq 2>/dev/null
|
||||
|
||||
# Try to efficiently update installed gems before installing the
|
||||
# Chromebrew gem package updates.
|
||||
crew update && yes | crew upgrade
|
||||
OWNER=${OWNER} REPO=${REPO} crew update
|
||||
fi
|
||||
echo -e "${RESET}"
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
require 'color'
|
||||
require 'gem_compact_index_client'
|
||||
require 'package'
|
||||
require 'package_utils'
|
||||
|
||||
@@ -53,9 +54,16 @@ def set_vars(passed_name = nil, passed_version = nil)
|
||||
end
|
||||
end)
|
||||
end
|
||||
gem_test = $gems.grep(/#{name.gsub(/^ruby_/, '')}/).first
|
||||
if $gems.blank?
|
||||
puts 'Populating gem information using compact index client...'.lightgreen
|
||||
$gems ||= BasicCompactIndexClient.new.gems
|
||||
puts 'Done populating gem information.'.lightgreen
|
||||
end
|
||||
gem_test = $gems.grep(/#{"^#{passed_name.gsub(/^ruby_/, '')}\\s.*$"}/).first.blank? ? $gems.grep(/#{"^#{passed_name.gsub(/^ruby_/, '').gsub('_', '-')}\\s.*$"}/).first : $gems.grep(/#{"^#{passed_name.gsub(/^ruby_/, '')}\\s.*$"}/).first
|
||||
gem_test_name = gem_test.split.first
|
||||
gem_test_version = gem_test.split[1].split(',').last
|
||||
gem_test_versions = gem_test.split[1].split(',')
|
||||
gem_test_versions.delete_if { |i| i.include?('beta') }
|
||||
gem_test_version = gem_test_versions.max
|
||||
@gem_name = gem_test_name.blank? ? Gem::SpecFetcher.fetcher.suggest_gems_from_name(passed_name.gsub(/^ruby_/, '')).first : gem_test_name
|
||||
@remote_gem_ver = gem_test_name.blank? ? Gem.latest_version_for(@gem_name).to_s : gem_test_version
|
||||
@gem_ver = passed_version.split('-').first.to_s
|
||||
@@ -106,6 +114,7 @@ class RUBY < Package
|
||||
end
|
||||
|
||||
def self.install
|
||||
@gem_latest_version_installed = Kernel.system "gem search --no-update-sources -l -i \"^#{@gem_name}\$\" -v #{@gem_ver}", %i[out err] => File::NULL
|
||||
gem_anyversion_installed = Kernel.system "gem search --no-update-sources -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?}"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
require 'etc'
|
||||
|
||||
OLD_CREW_VERSION ||= defined?(CREW_VERSION) ? CREW_VERSION : '1.0'
|
||||
CREW_VERSION ||= '1.54.5' unless defined?(CREW_VERSION) && CREW_VERSION == OLD_CREW_VERSION
|
||||
CREW_VERSION ||= '1.54.6' unless defined?(CREW_VERSION) && CREW_VERSION == OLD_CREW_VERSION
|
||||
|
||||
# Kernel architecture.
|
||||
KERN_ARCH ||= Etc.uname[:machine]
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
# tools/update_ruby_gem_packages.rb
|
||||
require_relative '../lib/color'
|
||||
require_relative '../lib/const'
|
||||
require_relative '../lib/gem_compact_index_client'
|
||||
def require_gem(gem_name_and_require = nil, require_override = nil)
|
||||
# Allow only loading gems when needed.
|
||||
return if gem_name_and_require.nil?
|
||||
@@ -27,6 +28,8 @@ end
|
||||
require_gem('activesupport', 'active_support/core_ext/object/blank')
|
||||
require_gem 'concurrent-ruby'
|
||||
|
||||
gems ||= BasicCompactIndexClient.new.gems
|
||||
|
||||
pool = Concurrent::ThreadPoolExecutor.new(
|
||||
min_threads: 1,
|
||||
max_threads: CREW_NPROC.to_i + 1,
|
||||
@@ -38,11 +41,18 @@ total_files_to_check = relevant_gem_packages.length
|
||||
numlength = total_files_to_check.to_s.length
|
||||
relevant_gem_packages.each_with_index do |package, index|
|
||||
pool.post do
|
||||
gem_name_test = package.gsub(%r{^packages/ruby_}, '').gsub(/.rb$/, '')
|
||||
gem_version = Gem.latest_version_for(gem_name_test).to_s
|
||||
gem_version = Gem.latest_version_for(gem_name_test.gsub!('_', '-')).to_s if gem_version.empty?
|
||||
gem_name = gem_name_test
|
||||
puts "[#{(index + 1).to_s.rjust(numlength)}/#{total_files_to_check}] Checking rubygems for updates to #{gem_name}...".orange
|
||||
untested_package_name = package.gsub(%r{^packages/ruby_}, '').gsub(/.rb$/, '')
|
||||
gem_test = gems.grep(/#{"^#{untested_package_name}\\s.*$"}/).first.blank? ? gems.grep(/#{"^#{untested_package_name.gsub('_', '-')}\\s.*$"}/).first : gems.grep(/#{"^#{untested_package_name}\\s.*$"}/).first
|
||||
gem_test_name = gem_test.split.first
|
||||
puts "#{untested_package_name} versions for #{gem_test_name} are #{gem_test.split[1].split(',')}" if CREW_VERBOSE
|
||||
gem_test_versions = gem_test.split[1].split(',')
|
||||
gem_test_versions.delete_if { |i| i.include?('beta') }
|
||||
gem_test_version = gem_test_versions.max
|
||||
puts "#{untested_package_name} is #{gem_test_name} version #{gem_test_version}".lightpurple if CREW_VERBOSE
|
||||
gem_name = gem_test_name.blank? ? Gem::SpecFetcher.fetcher.suggest_gems_from_name(untested_package_name).first : gem_test_name
|
||||
gem_version = gem_test_name.blank? ? Gem.latest_version_for(untested_package_name).to_s : gem_test_version
|
||||
|
||||
puts "[#{(index + 1).to_s.rjust(numlength)}/#{total_files_to_check}] Checking rubygems for updates to #{gem_name} in #{package}...".orange
|
||||
pkg_version = `sed -n -e 's/^\ \ version //p' #{package}`.chomp.delete("'").delete('"').gsub(/-\#{CREW_RUBY_VER}/, '').split('-').first
|
||||
next package if gem_version.blank?
|
||||
if Gem::Version.new(gem_version) > Gem::Version.new(pkg_version)
|
||||
|
||||
Reference in New Issue
Block a user