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

Remove global include Kernel #18093

Merged
merged 3 commits into from
Aug 20, 2024
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Library/Homebrew/cmd/reinstall.rb
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ def run
next
end
Migrator.migrate_if_needed(formula, force: args.force?)
Homebrew.reinstall_formula(
Homebrew::Reinstall.reinstall_formula(
formula,
flags: args.flags_only,
installed_on_request: args.named.present?,
Expand Down
5 changes: 0 additions & 5 deletions Library/Homebrew/global.rbi

This file was deleted.

175 changes: 89 additions & 86 deletions Library/Homebrew/reinstall.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,103 +6,106 @@
require "messages"

module Homebrew
module_function

def reinstall_formula(
formula,
flags:,
installed_on_request: false,
force_bottle: false,
build_from_source_formulae: [],
interactive: false,
keep_tmp: false,
debug_symbols: false,
force: false,
debug: false,
quiet: false,
verbose: false,
git: false
)
if formula.opt_prefix.directory?
keg = Keg.new(formula.opt_prefix.resolved_path)
tab = keg.tab
keg_had_linked_opt = true
keg_was_linked = keg.linked?
backup keg
end

build_options = BuildOptions.new(Options.create(flags), formula.options)
options = build_options.used_options
options |= formula.build.used_options
options &= formula.options

fi = FormulaInstaller.new(
module Reinstall
def self.reinstall_formula(
formula,
**{
options:,
link_keg: keg_had_linked_opt ? keg_was_linked : nil,
installed_as_dependency: tab&.installed_as_dependency,
installed_on_request: installed_on_request || tab&.installed_on_request,
build_bottle: tab&.built_bottle?,
force_bottle:,
build_from_source_formulae:,
git:,
interactive:,
keep_tmp:,
debug_symbols:,
force:,
debug:,
quiet:,
verbose:,
}.compact,
flags:,
installed_on_request: false,
force_bottle: false,
build_from_source_formulae: [],
interactive: false,
keep_tmp: false,
debug_symbols: false,
force: false,
debug: false,
quiet: false,
verbose: false,
git: false
)
fi.prelude
fi.fetch
if formula.opt_prefix.directory?
keg = Keg.new(formula.opt_prefix.resolved_path)
tab = keg.tab
keg_had_linked_opt = true
keg_was_linked = keg.linked?
backup keg
end

build_options = BuildOptions.new(Options.create(flags), formula.options)
options = build_options.used_options
options |= formula.build.used_options
options &= formula.options

fi = FormulaInstaller.new(
formula,
**{
options:,
link_keg: keg_had_linked_opt ? keg_was_linked : nil,
installed_as_dependency: tab&.installed_as_dependency,
installed_on_request: installed_on_request || tab&.installed_on_request,
build_bottle: tab&.built_bottle?,
force_bottle:,
build_from_source_formulae:,
git:,
interactive:,
keep_tmp:,
debug_symbols:,
force:,
debug:,
quiet:,
verbose:,
}.compact,
)
fi.prelude
fi.fetch

oh1 "Reinstalling #{Formatter.identifier(formula.full_name)} #{options.to_a.join " "}"
oh1 "Reinstalling #{Formatter.identifier(formula.full_name)} #{options.to_a.join " "}"

fi.install
fi.finish
rescue FormulaInstallationAlreadyAttemptedError
nil
rescue Exception # rubocop:disable Lint/RescueException
ignore_interrupts { restore_backup(keg, keg_was_linked, verbose:) }
raise
else
begin
backup_path(keg).rmtree if backup_path(keg).exist?
rescue Errno::EACCES, Errno::ENOTEMPTY
odie <<~EOS
Could not remove #{backup_path(keg).parent.basename} backup keg! Do so manually:
sudo rm -rf #{backup_path(keg)}
EOS
fi.install
fi.finish
rescue FormulaInstallationAlreadyAttemptedError
nil

Check warning on line 66 in Library/Homebrew/reinstall.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/reinstall.rb#L66

Added line #L66 was not covered by tests
rescue Exception # rubocop:disable Lint/RescueException
ignore_interrupts { restore_backup(keg, keg_was_linked, verbose:) }
raise

Check warning on line 69 in Library/Homebrew/reinstall.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/reinstall.rb#L68-L69

Added lines #L68 - L69 were not covered by tests
else
begin
backup_path(keg).rmtree if backup_path(keg).exist?
rescue Errno::EACCES, Errno::ENOTEMPTY
odie <<~EOS

Check warning on line 74 in Library/Homebrew/reinstall.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/reinstall.rb#L74

Added line #L74 was not covered by tests
Could not remove #{backup_path(keg).parent.basename} backup keg! Do so manually:
sudo rm -rf #{backup_path(keg)}
EOS
end
end
end

def backup(keg)
keg.unlink
begin
keg.rename backup_path(keg)
rescue Errno::EACCES, Errno::ENOTEMPTY
odie <<~EOS
Could not rename #{keg.name} keg! Check/fix its permissions:
sudo chown -R #{ENV.fetch("USER", "$(whoami)")} #{keg}
EOS
def self.backup(keg)
keg.unlink
begin
keg.rename backup_path(keg)
rescue Errno::EACCES, Errno::ENOTEMPTY
odie <<~EOS

Check warning on line 86 in Library/Homebrew/reinstall.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/reinstall.rb#L86

Added line #L86 was not covered by tests
Could not rename #{keg.name} keg! Check/fix its permissions:
sudo chown -R #{ENV.fetch("USER", "$(whoami)")} #{keg}
EOS
end
end
end
private_class_method :backup

def restore_backup(keg, keg_was_linked, verbose:)
path = backup_path(keg)
def self.restore_backup(keg, keg_was_linked, verbose:)
path = backup_path(keg)

Check warning on line 95 in Library/Homebrew/reinstall.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/reinstall.rb#L95

Added line #L95 was not covered by tests

return unless path.directory?
return unless path.directory?

Pathname.new(keg).rmtree if keg.exist?
Pathname.new(keg).rmtree if keg.exist?

path.rename keg
keg.link(verbose:) if keg_was_linked
end
path.rename keg

Check warning on line 101 in Library/Homebrew/reinstall.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/reinstall.rb#L101

Added line #L101 was not covered by tests
keg.link(verbose:) if keg_was_linked
end
private_class_method :restore_backup

def backup_path(path)
Pathname.new "#{path}.reinstall"
def self.backup_path(path)
Pathname.new "#{path}.reinstall"
end
private_class_method :backup_path
end
end
2 changes: 1 addition & 1 deletion Library/Homebrew/upgrade.rb
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,7 @@
return if dry_run

reinstallable_broken_dependents.each do |formula|
Homebrew.reinstall_formula(
Reinstall.reinstall_formula(

Check warning on line 412 in Library/Homebrew/upgrade.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/upgrade.rb#L412

Added line #L412 was not covered by tests
formula,
flags:,
force_bottle:,
Expand Down
36 changes: 17 additions & 19 deletions Library/Homebrew/utils/gems.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,19 +30,17 @@ module Homebrew
).freeze
private_constant :VENDOR_VERSION_FILE

module_function

def gemfile
def self.gemfile
File.join(ENV.fetch("HOMEBREW_LIBRARY"), "Homebrew", "Gemfile")
end
private_class_method :gemfile

def bundler_definition
def self.bundler_definition
@bundler_definition ||= Bundler::Definition.build(Bundler.default_gemfile, Bundler.default_lockfile, false)
end
private_class_method :bundler_definition

def valid_gem_groups
def self.valid_gem_groups
install_bundler!
require "bundler"

Expand All @@ -54,27 +52,27 @@ def valid_gem_groups
end
end

def ruby_bindir
def self.ruby_bindir
"#{RbConfig::CONFIG["prefix"]}/bin"
end

def ohai_if_defined(message)
def self.ohai_if_defined(message)
if defined?(ohai)
$stderr.ohai message
else
$stderr.puts "==> #{message}"
end
end

def opoo_if_defined(message)
def self.opoo_if_defined(message)
if defined?(opoo)
$stderr.opoo message
else
$stderr.puts "Warning: #{message}"
end
end

def odie_if_defined(message)
def self.odie_if_defined(message)
if defined?(odie)
odie message
else
Expand All @@ -83,7 +81,7 @@ def odie_if_defined(message)
end
end

def setup_gem_environment!(setup_path: true)
def self.setup_gem_environment!(setup_path: true)
require "rubygems"
raise "RubyGems too old!" if Gem::Version.new(Gem::VERSION) < Gem::Version.new("2.2.0")

Expand Down Expand Up @@ -114,7 +112,7 @@ def setup_gem_environment!(setup_path: true)
ENV["GEM_PATH"] = gem_home
end

def install_gem!(name, version: nil, setup_gem_environment: true)
def self.install_gem!(name, version: nil, setup_gem_environment: true)
setup_gem_environment! if setup_gem_environment

specs = Gem::Specification.find_all_by_name(name, version)
Expand All @@ -141,7 +139,7 @@ def install_gem!(name, version: nil, setup_gem_environment: true)
odie_if_defined "failed to install the '#{name}' gem."
end

def install_gem_setup_path!(name, version: nil, executable: name, setup_gem_environment: true)
def self.install_gem_setup_path!(name, version: nil, executable: name, setup_gem_environment: true)
install_gem!(name, version:, setup_gem_environment:)
return if find_in_path(executable)

Expand All @@ -151,14 +149,14 @@ def install_gem_setup_path!(name, version: nil, executable: name, setup_gem_envi
EOS
end

def find_in_path(executable)
def self.find_in_path(executable)
ENV.fetch("PATH").split(":").find do |path|
File.executable?(File.join(path, executable))
end
end
private_class_method :find_in_path

def install_bundler!
def self.install_bundler!
old_bundler_version = ENV.fetch("BUNDLER_VERSION", nil)

setup_gem_environment!
Expand All @@ -174,7 +172,7 @@ def install_bundler!
ENV["BUNDLER_VERSION"] = old_bundler_version
end

def user_gem_groups
def self.user_gem_groups
@user_gem_groups ||= if GEM_GROUPS_FILE.exist?
GEM_GROUPS_FILE.readlines(chomp: true)
else
Expand All @@ -183,7 +181,7 @@ def user_gem_groups
end
private_class_method :user_gem_groups

def write_user_gem_groups(groups)
def self.write_user_gem_groups(groups)
return if @user_gem_groups == groups && GEM_GROUPS_FILE.exist?

# Write the file atomically, in case we're working parallel
Expand All @@ -206,12 +204,12 @@ def write_user_gem_groups(groups)
end
private_class_method :write_user_gem_groups

def forget_user_gem_groups!
def self.forget_user_gem_groups!
GEM_GROUPS_FILE.truncate(0) if GEM_GROUPS_FILE.exist?
@user_gem_groups = []
end

def user_vendor_version
def self.user_vendor_version
@user_vendor_version ||= if VENDOR_VERSION_FILE.exist?
VENDOR_VERSION_FILE.read.to_i
else
Expand All @@ -220,7 +218,7 @@ def user_vendor_version
end
private_class_method :user_vendor_version

def install_bundler_gems!(only_warn_on_failure: false, setup_path: true, groups: [])
def self.install_bundler_gems!(only_warn_on_failure: false, setup_path: true, groups: [])
old_path = ENV.fetch("PATH", nil)
old_gem_path = ENV.fetch("GEM_PATH", nil)
old_gem_home = ENV.fetch("GEM_HOME", nil)
Expand Down