update-report: refactoring
* Better variable/class name. `update-report` isn't response to actual update. * Use abstraction offered by Reporter and ReproterHub class. * Failure on one tap won't affect migration preformed by other taps. * Simplify logic and prepare for core/formula separation.
This commit is contained in:
parent
95a6067702
commit
239c860863
@ -9,25 +9,34 @@ module Homebrew
|
|||||||
# migrate to new directories based tap structure
|
# migrate to new directories based tap structure
|
||||||
migrate_taps
|
migrate_taps
|
||||||
|
|
||||||
report = Report.new
|
hub = ReporterHub.new
|
||||||
master_updater = Reporter.new(HOMEBREW_REPOSITORY)
|
|
||||||
master_updated = master_updater.updated?
|
begin
|
||||||
if master_updated
|
master_reporter = Reporter.new(CoreFormulaRepository.instance)
|
||||||
initial_short = shorten_revision(master_updater.initial_revision)
|
rescue Reporter::ReporterRevisionUnsetError => e
|
||||||
current_short = shorten_revision(master_updater.current_revision)
|
raise e if ARGV.homebrew_developer?
|
||||||
puts "Updated Homebrew from #{initial_short} to #{current_short}."
|
odie "update-report should not be called directly!"
|
||||||
|
end
|
||||||
|
|
||||||
|
if master_reporter.updated?
|
||||||
|
initial_short = shorten_revision(master_reporter.initial_revision)
|
||||||
|
current_short = shorten_revision(master_reporter.current_revision)
|
||||||
|
puts "Updated Homebrew from #{initial_short} to #{current_short}."
|
||||||
|
hub.add(master_reporter)
|
||||||
end
|
end
|
||||||
report.update(master_updater.report)
|
|
||||||
|
|
||||||
updated_taps = []
|
updated_taps = []
|
||||||
Tap.each do |tap|
|
Tap.each do |tap|
|
||||||
next unless tap.git?
|
next unless tap.git?
|
||||||
tap.path.cd do
|
begin
|
||||||
updater = Reporter.new(tap.path)
|
reporter = Reporter.new(tap)
|
||||||
updated_taps << tap.name if updater.updated?
|
rescue Reporter::ReporterRevisionUnsetError => e
|
||||||
report.update(updater.report) do |_key, oldval, newval|
|
onoe e if ARGV.homebrew_developer?
|
||||||
oldval.concat(newval)
|
next
|
||||||
end
|
end
|
||||||
|
if reporter.updated?
|
||||||
|
updated_taps << tap.name
|
||||||
|
hub.add(reporter)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
unless updated_taps.empty?
|
unless updated_taps.empty?
|
||||||
@ -35,81 +44,24 @@ module Homebrew
|
|||||||
"(#{updated_taps.join(", ")})."
|
"(#{updated_taps.join(", ")})."
|
||||||
end
|
end
|
||||||
|
|
||||||
if !master_updated && updated_taps.empty? && !ARGV.verbose?
|
if hub.reporters.empty?
|
||||||
puts "Already up-to-date."
|
puts "Already up-to-date."
|
||||||
|
elsif hub.empty?
|
||||||
|
puts "No changes to formulae."
|
||||||
|
else
|
||||||
|
hub.dump
|
||||||
|
hub.reporters.each(&:migrate_tap_migration)
|
||||||
|
hub.reporters.each(&:migrate_formula_rename)
|
||||||
|
Descriptions.update_cache(hub)
|
||||||
end
|
end
|
||||||
|
|
||||||
Tap.each(&:link_manpages)
|
Tap.each(&:link_manpages)
|
||||||
|
|
||||||
# automatically tap any migrated formulae's new tap
|
|
||||||
report.select_formula(:D).each do |f|
|
|
||||||
next unless (dir = HOMEBREW_CELLAR/f).exist?
|
|
||||||
migration = TAP_MIGRATIONS[f]
|
|
||||||
next unless migration
|
|
||||||
tap = Tap.fetch(*migration.split("/"))
|
|
||||||
tap.install unless tap.installed?
|
|
||||||
|
|
||||||
# update tap for each Tab
|
|
||||||
tabs = dir.subdirs.map { |d| Tab.for_keg(Keg.new(d)) }
|
|
||||||
next if tabs.first.source["tap"] != "Homebrew/homebrew"
|
|
||||||
tabs.each { |tab| tab.source["tap"] = "#{tap.user}/homebrew-#{tap.repo}" }
|
|
||||||
tabs.each(&:write)
|
|
||||||
end if load_tap_migrations
|
|
||||||
|
|
||||||
load_formula_renames
|
|
||||||
report.update_renamed
|
|
||||||
|
|
||||||
# Migrate installed renamed formulae from core and taps.
|
|
||||||
report.select_formula(:R).each do |oldname, newname|
|
|
||||||
if oldname.include?("/")
|
|
||||||
user, repo, oldname = oldname.split("/", 3)
|
|
||||||
newname = newname.split("/", 3).last
|
|
||||||
else
|
|
||||||
user = "homebrew"
|
|
||||||
repo = "homebrew"
|
|
||||||
end
|
|
||||||
|
|
||||||
next unless (dir = HOMEBREW_CELLAR/oldname).directory? && !dir.subdirs.empty?
|
|
||||||
|
|
||||||
begin
|
|
||||||
f = Formulary.factory("#{user}/#{repo}/#{newname}")
|
|
||||||
# short term fix to prevent situation like https://github.com/Homebrew/homebrew/issues/45616
|
|
||||||
rescue Exception
|
|
||||||
end
|
|
||||||
|
|
||||||
next unless f
|
|
||||||
|
|
||||||
begin
|
|
||||||
migrator = Migrator.new(f)
|
|
||||||
migrator.migrate
|
|
||||||
rescue Migrator::MigratorDifferentTapsError
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if report.empty?
|
|
||||||
puts "No changes to formulae." if master_updated || !updated_taps.empty?
|
|
||||||
else
|
|
||||||
report.dump
|
|
||||||
end
|
|
||||||
Descriptions.update_cache(report)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def shorten_revision(revision)
|
def shorten_revision(revision)
|
||||||
`git rev-parse --short #{revision}`.chomp
|
Utils.popen_read("git", "-C", HOMEBREW_REPOSITORY, "rev-parse", "--short", revision).chomp
|
||||||
end
|
|
||||||
|
|
||||||
def load_tap_migrations
|
|
||||||
load "tap_migrations.rb"
|
|
||||||
rescue LoadError
|
|
||||||
false
|
|
||||||
end
|
|
||||||
|
|
||||||
def load_formula_renames
|
|
||||||
load "formula_renames.rb"
|
|
||||||
rescue LoadError
|
|
||||||
false
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user