aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorilovezfs2017-03-17 09:21:41 -0700
committerilovezfs2017-03-23 04:09:45 -0700
commit845d083464e993fdbc58c96a528f510cdda1a9fa (patch)
treefb9d208636a04668b25416971256658ef1e85bde
parentf8cf506670bfd9d6d931411eb0c4b74c040f90df (diff)
downloadbrew-845d083464e993fdbc58c96a528f510cdda1a9fa.tar.bz2
migrator: allow new cellar to exist already
Lets us migrate a formula to a name that may have previously been used. If gnupg 1.x is installed as "gnupg" and gnupg 2.x is installed as "gnupg2," it's currently not possible to rename gnupg2 -> gnupg, since the 1.4 keg will already be installed in the "gnupg" Cellar, so in order to reclaim the name "gnupg" to be used for 2.1, either 1.x must be manually uninstalled, or the new cellar needs to be allowed to exist already.
-rw-r--r--Library/Homebrew/migrator.rb30
1 files changed, 26 insertions, 4 deletions
diff --git a/Library/Homebrew/migrator.rb b/Library/Homebrew/migrator.rb
index a80cf0c59..3eb7f833e 100644
--- a/Library/Homebrew/migrator.rb
+++ b/Library/Homebrew/migrator.rb
@@ -147,15 +147,25 @@ class Migrator
end
def migrate
- if new_cellar.exist?
- onoe "#{new_cellar} already exists; remove it manually and run brew migrate #{oldname}."
- return
+ if old_cellar.exist? && new_cellar.exist?
+ conflicted = false
+ old_cellar.each_child do |c|
+ if (new_cellar/c.basename).exist?
+ conflicted = true
+ onoe "#{new_cellar/c.basename} already exists."
+ end
+ end
+ if conflicted
+ onoe "Remove #{new_cellar} manually and run brew migrate #{oldname}."
+ return
+ end
end
begin
oh1 "Migrating #{Formatter.identifier(oldname)} to #{Formatter.identifier(newname)}"
lock
unlink_oldname
+ unlink_newname if new_cellar.exist?
move_to_new_directory
repin
link_oldname_cellar
@@ -178,7 +188,11 @@ class Migrator
# move everything from Cellar/oldname to Cellar/newname
def move_to_new_directory
puts "Moving to: #{new_cellar}"
- FileUtils.mv(old_cellar, new_cellar)
+ if new_cellar.exist?
+ FileUtils.mv(old_cellar.children, new_cellar)
+ else
+ FileUtils.mv(old_cellar, new_cellar)
+ end
end
def repin
@@ -207,6 +221,14 @@ class Migrator
end
end
+ def unlink_newname
+ oh1 "Unlinking #{Formatter.identifier(newname)}"
+ new_cellar.subdirs.each do |d|
+ keg = Keg.new(d)
+ keg.unlink
+ end
+ end
+
def link_newname
oh1 "Linking #{Formatter.identifier(newname)}"
new_keg = Keg.new(new_linked_keg_record)