diff options
| author | Jack Nagel | 2014-03-15 10:40:18 -0500 |
|---|---|---|
| committer | Jack Nagel | 2014-03-15 10:53:03 -0500 |
| commit | 535889ad62f018e05ec91d1ca828e880b9c9c6ba (patch) | |
| tree | 3921a9bba2eeea103ca5e3b2f4563e286e9c7e94 | |
| parent | 7bf8e517ebcad37fb8edc4d0e36d92436dd06f81 (diff) | |
| download | homebrew-535889ad62f018e05ec91d1ca828e880b9c9c6ba.tar.bz2 | |
Rewrite `brew reinstall`
Fixes #23928.
| -rw-r--r-- | Library/Homebrew/cmd/install.rb | 12 | ||||
| -rw-r--r-- | Library/Homebrew/cmd/reinstall.rb | 68 |
2 files changed, 40 insertions, 40 deletions
diff --git a/Library/Homebrew/cmd/install.rb b/Library/Homebrew/cmd/install.rb index a3d7b6452..d1a50e887 100644 --- a/Library/Homebrew/cmd/install.rb +++ b/Library/Homebrew/cmd/install.rb @@ -36,14 +36,9 @@ module Homebrew extend self end unless ARGV.force? perform_preinstall_checks + begin - ARGV.formulae.each do |f| - begin - install_formula(f) - rescue CannotInstallFormulaError => e - ofail e.message - end - end + ARGV.formulae.each { |f| install_formula(f) } rescue FormulaUnavailableError => e ofail e.message require 'cmd/search' @@ -124,6 +119,7 @@ module Homebrew extend self # another formula. In that case, don't generate an error, just move on. rescue FormulaAlreadyInstalledError => e opoo e.message - # Ignore CannotInstallFormulaError and let caller handle it. + rescue CannotInstallFormulaError => e + ofail e.message end end diff --git a/Library/Homebrew/cmd/reinstall.rb b/Library/Homebrew/cmd/reinstall.rb index 53f7f1930..393662b0c 100644 --- a/Library/Homebrew/cmd/reinstall.rb +++ b/Library/Homebrew/cmd/reinstall.rb @@ -2,39 +2,43 @@ require 'cmd/install' module Homebrew extend self def reinstall - # At first save the named formulae and remove them from ARGV - named = ARGV.named - ARGV.delete_if { |arg| named.include? arg } - clean_ARGV = ARGV.clone - - # Add the used_options for each named formula separately so - # that the options apply to the right formula. - named.each do |name| - ARGV.replace(clean_ARGV) - ARGV << name - tab = Tab.for_name(name) - tab.used_options.each { |option| ARGV << option.to_s } - if tab.built_as_bottle and not tab.poured_from_bottle - ARGV << '--build-bottle' - end - - formula = Formulary.factory(name) - - begin - oh1 "Reinstalling #{name} #{ARGV.options_only*' '}" - opt_link = formula.opt_prefix - if opt_link.exist? - keg = Keg.new(opt_link.realpath) - backup keg - end - self.install_formula formula - rescue Exception - ignore_interrupts { restore_backup(keg, formula) } - raise - else - backup_path(keg).rmtree if backup_path(keg).exist? - end + ARGV.formulae.each { |f| reinstall_formula(f) } + end + + def reinstall_formula f + tab = Tab.for_formula(f) + options = tab.used_options | f.build.used_options + + notice = "Reinstalling #{f.name}" + notice += " with #{options * ", "}" unless options.empty? + oh1 notice + + if (opt_link = f.opt_prefix).exist? + keg = Keg.new(opt_link.realpath) + backup keg end + + fi = FormulaInstaller.new(f) + fi.options = options + fi.build_bottle = ARGV.build_bottle? + fi.build_bottle ||= tab.built_as_bottle && !tab.poured_from_bottle + fi.build_from_source = ARGV.build_from_source? + fi.force_bottle = ARGV.force_bottle? + fi.verbose = ARGV.verbose? + fi.debug = ARGV.debug? + fi.prelude + fi.install + fi.caveats + fi.finish + rescue FormulaInstallationAlreadyAttemptedError + # next + rescue FormulaAlreadyInstalledError => e + opoo e.message + rescue Exception + ignore_interrupts { restore_backup(keg, f) } + raise + else + backup_path(keg).rmtree if backup_path(keg).exist? end def backup keg |
