aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorVlad Shablinsky2015-08-09 15:09:33 +0300
committerMike McQuaid2015-08-10 13:57:59 +0100
commit6b0927944aca1b11eec90659b11390a1575c7ff1 (patch)
treec47aac9c20268ebe0be88aa8d065f66dcd1f4fbc /Library
parent7079a00aa757f9f3659eb9b883e5e902860fa94d (diff)
downloadbrew-6b0927944aca1b11eec90659b11390a1575c7ff1.tar.bz2
update: handle renames on update
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/cmd/update.rb46
1 files changed, 44 insertions, 2 deletions
diff --git a/Library/Homebrew/cmd/update.rb b/Library/Homebrew/cmd/update.rb
index 1186f0e1b..17dbf3a19 100644
--- a/Library/Homebrew/cmd/update.rb
+++ b/Library/Homebrew/cmd/update.rb
@@ -1,5 +1,7 @@
require "cmd/tap"
require "formula_versions"
+require "migrator"
+require "formulary"
module Homebrew
def update
@@ -46,13 +48,47 @@ module Homebrew
# automatically tap any migrated formulae's new tap
report.select_formula(:D).each do |f|
- next unless (HOMEBREW_CELLAR/f).exist?
+ next unless (dir = HOMEBREW_CELLAR/f).exist?
migration = TAP_MIGRATIONS[f]
next unless migration
tap_user, tap_repo = migration.split "/"
install_tap tap_user, tap_repo
+ # update tap for each Tab
+ tabs = dir.subdirs.each.map { |d| Tab.for_keg(Keg.new(d)) }
+ tabs.each { |tab| tab.source["tap"] = "#{tap_user}/homebrew-#{tap_repo}" }
+ tabs.each(&:write)
end if load_tap_migrations
+ # Migrate installed renamed formulae from main Homebrew repository.
+ if load_formula_renames
+ report.select_formula(:D).each do |oldname|
+ newname = FORMULA_RENAMES[oldname]
+ next unless newname
+ next unless (dir = HOMEBREW_CELLAR/oldname).directory? && !dir.subdirs.empty?
+
+ begin
+ migrator = Migrator.new(Formulary.factory("homebrew/homebrew/#{newname}"))
+ migrator.migrate
+ rescue Migrator::MigratorDifferentTapsError
+ end
+ end
+ end
+
+ # Migrate installed renamed formulae from taps
+ report.select_formula(:D).each do |oldname|
+ user, repo, oldname = oldname.split("/", 3)
+ next unless user && repo && oldname
+ tap = Tap.new(user, repo)
+ next unless newname = tap.formula_renames[oldname]
+ next unless (dir = HOMEBREW_CELLAR/oldname).directory? && !dir.subdirs.empty?
+
+ begin
+ migrator = Migrator.new(Formulary.factory("#{user}/#{repo}/#{newname}"))
+ migrator.migrate
+ rescue Migrator::MigratorDifferentTapsError
+ end
+ end
+
if report.empty?
puts "Already up-to-date."
else
@@ -112,7 +148,13 @@ module Homebrew
end
def load_tap_migrations
- require "tap_migrations"
+ load "tap_migrations"
+ rescue LoadError
+ false
+ end
+
+ def load_formula_renames
+ load "formula_renames.rb"
rescue LoadError
false
end