reinstall: move to submodule
This commit is contained in:
parent
561cc17a74
commit
77204e01da
@ -134,7 +134,7 @@ module Homebrew
|
|||||||
next
|
next
|
||||||
end
|
end
|
||||||
Migrator.migrate_if_needed(formula, force: args.force?)
|
Migrator.migrate_if_needed(formula, force: args.force?)
|
||||||
Homebrew.reinstall_formula(
|
Homebrew::Reinstall.reinstall_formula(
|
||||||
formula,
|
formula,
|
||||||
flags: args.flags_only,
|
flags: args.flags_only,
|
||||||
installed_on_request: args.named.present?,
|
installed_on_request: args.named.present?,
|
||||||
|
|||||||
@ -6,103 +6,106 @@ require "development_tools"
|
|||||||
require "messages"
|
require "messages"
|
||||||
|
|
||||||
module Homebrew
|
module Homebrew
|
||||||
module_function
|
module Reinstall
|
||||||
|
def self.reinstall_formula(
|
||||||
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(
|
|
||||||
formula,
|
formula,
|
||||||
**{
|
flags:,
|
||||||
options:,
|
installed_on_request: false,
|
||||||
link_keg: keg_had_linked_opt ? keg_was_linked : nil,
|
force_bottle: false,
|
||||||
installed_as_dependency: tab&.installed_as_dependency,
|
build_from_source_formulae: [],
|
||||||
installed_on_request: installed_on_request || tab&.installed_on_request,
|
interactive: false,
|
||||||
build_bottle: tab&.built_bottle?,
|
keep_tmp: false,
|
||||||
force_bottle:,
|
debug_symbols: false,
|
||||||
build_from_source_formulae:,
|
force: false,
|
||||||
git:,
|
debug: false,
|
||||||
interactive:,
|
quiet: false,
|
||||||
keep_tmp:,
|
verbose: false,
|
||||||
debug_symbols:,
|
git: false
|
||||||
force:,
|
|
||||||
debug:,
|
|
||||||
quiet:,
|
|
||||||
verbose:,
|
|
||||||
}.compact,
|
|
||||||
)
|
)
|
||||||
fi.prelude
|
if formula.opt_prefix.directory?
|
||||||
fi.fetch
|
keg = Keg.new(formula.opt_prefix.resolved_path)
|
||||||
|
tab = keg.tab
|
||||||
|
keg_had_linked_opt = true
|
||||||
|
keg_was_linked = keg.linked?
|
||||||
|
backup keg
|
||||||
|
end
|
||||||
|
|
||||||
oh1 "Reinstalling #{Formatter.identifier(formula.full_name)} #{options.to_a.join " "}"
|
build_options = BuildOptions.new(Options.create(flags), formula.options)
|
||||||
|
options = build_options.used_options
|
||||||
|
options |= formula.build.used_options
|
||||||
|
options &= formula.options
|
||||||
|
|
||||||
fi.install
|
fi = FormulaInstaller.new(
|
||||||
fi.finish
|
formula,
|
||||||
rescue FormulaInstallationAlreadyAttemptedError
|
**{
|
||||||
nil
|
options:,
|
||||||
rescue Exception # rubocop:disable Lint/RescueException
|
link_keg: keg_had_linked_opt ? keg_was_linked : nil,
|
||||||
ignore_interrupts { restore_backup(keg, keg_was_linked, verbose:) }
|
installed_as_dependency: tab&.installed_as_dependency,
|
||||||
raise
|
installed_on_request: installed_on_request || tab&.installed_on_request,
|
||||||
else
|
build_bottle: tab&.built_bottle?,
|
||||||
begin
|
force_bottle:,
|
||||||
backup_path(keg).rmtree if backup_path(keg).exist?
|
build_from_source_formulae:,
|
||||||
rescue Errno::EACCES, Errno::ENOTEMPTY
|
git:,
|
||||||
odie <<~EOS
|
interactive:,
|
||||||
Could not remove #{backup_path(keg).parent.basename} backup keg! Do so manually:
|
keep_tmp:,
|
||||||
sudo rm -rf #{backup_path(keg)}
|
debug_symbols:,
|
||||||
EOS
|
force:,
|
||||||
|
debug:,
|
||||||
|
quiet:,
|
||||||
|
verbose:,
|
||||||
|
}.compact,
|
||||||
|
)
|
||||||
|
fi.prelude
|
||||||
|
fi.fetch
|
||||||
|
|
||||||
|
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
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
def backup(keg)
|
def self.backup(keg)
|
||||||
keg.unlink
|
keg.unlink
|
||||||
begin
|
begin
|
||||||
keg.rename backup_path(keg)
|
keg.rename backup_path(keg)
|
||||||
rescue Errno::EACCES, Errno::ENOTEMPTY
|
rescue Errno::EACCES, Errno::ENOTEMPTY
|
||||||
odie <<~EOS
|
odie <<~EOS
|
||||||
Could not rename #{keg.name} keg! Check/fix its permissions:
|
Could not rename #{keg.name} keg! Check/fix its permissions:
|
||||||
sudo chown -R #{ENV.fetch("USER", "$(whoami)")} #{keg}
|
sudo chown -R #{ENV.fetch("USER", "$(whoami)")} #{keg}
|
||||||
EOS
|
EOS
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
private_class_method :backup
|
||||||
|
|
||||||
def restore_backup(keg, keg_was_linked, verbose:)
|
def self.restore_backup(keg, keg_was_linked, verbose:)
|
||||||
path = backup_path(keg)
|
path = backup_path(keg)
|
||||||
|
|
||||||
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
|
path.rename keg
|
||||||
keg.link(verbose:) if keg_was_linked
|
keg.link(verbose:) if keg_was_linked
|
||||||
end
|
end
|
||||||
|
private_class_method :restore_backup
|
||||||
|
|
||||||
def backup_path(path)
|
def self.backup_path(path)
|
||||||
Pathname.new "#{path}.reinstall"
|
Pathname.new "#{path}.reinstall"
|
||||||
|
end
|
||||||
|
private_class_method :backup_path
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -409,7 +409,7 @@ module Homebrew
|
|||||||
return if dry_run
|
return if dry_run
|
||||||
|
|
||||||
reinstallable_broken_dependents.each do |formula|
|
reinstallable_broken_dependents.each do |formula|
|
||||||
Homebrew.reinstall_formula(
|
Reinstall.reinstall_formula(
|
||||||
formula,
|
formula,
|
||||||
flags:,
|
flags:,
|
||||||
force_bottle:,
|
force_bottle:,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user