aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew
diff options
context:
space:
mode:
authorXu Cheng2016-02-25 16:41:34 +0800
committerXu Cheng2016-02-25 17:22:28 +0800
commit239c860863720fe2f7fa75dcced7c8516a1bf046 (patch)
tree2012b19e7eb6f78b4541cf56030eead27a0ca213 /Library/Homebrew
parent95a6067702678e41f5de5c4083b288de45cce80c (diff)
downloadbrew-239c860863720fe2f7fa75dcced7c8516a1bf046.tar.bz2
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.
Diffstat (limited to 'Library/Homebrew')
-rw-r--r--Library/Homebrew/cmd/update-report.rb110
1 files changed, 31 insertions, 79 deletions
diff --git a/Library/Homebrew/cmd/update-report.rb b/Library/Homebrew/cmd/update-report.rb
index 901b9dc12..09f69a361 100644
--- a/Library/Homebrew/cmd/update-report.rb
+++ b/Library/Homebrew/cmd/update-report.rb
@@ -9,25 +9,34 @@ module Homebrew
# migrate to new directories based tap structure
migrate_taps
- report = Report.new
- master_updater = Reporter.new(HOMEBREW_REPOSITORY)
- master_updated = master_updater.updated?
- if master_updated
- initial_short = shorten_revision(master_updater.initial_revision)
- current_short = shorten_revision(master_updater.current_revision)
+ hub = ReporterHub.new
+
+ begin
+ master_reporter = Reporter.new(CoreFormulaRepository.instance)
+ rescue Reporter::ReporterRevisionUnsetError => e
+ raise e if ARGV.homebrew_developer?
+ 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
- report.update(master_updater.report)
updated_taps = []
Tap.each do |tap|
next unless tap.git?
- tap.path.cd do
- updater = Reporter.new(tap.path)
- updated_taps << tap.name if updater.updated?
- report.update(updater.report) do |_key, oldval, newval|
- oldval.concat(newval)
- end
+ begin
+ reporter = Reporter.new(tap)
+ rescue Reporter::ReporterRevisionUnsetError => e
+ onoe e if ARGV.homebrew_developer?
+ next
+ end
+ if reporter.updated?
+ updated_taps << tap.name
+ hub.add(reporter)
end
end
unless updated_taps.empty?
@@ -35,81 +44,24 @@ module Homebrew
"(#{updated_taps.join(", ")})."
end
- if !master_updated && updated_taps.empty? && !ARGV.verbose?
+ if hub.reporters.empty?
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
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
private
def shorten_revision(revision)
- `git 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
+ Utils.popen_read("git", "-C", HOMEBREW_REPOSITORY, "rev-parse", "--short", revision).chomp
end
end