aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Neatherway2015-09-28 22:47:53 +0100
committerXu Cheng2015-10-07 17:20:09 +0800
commit0fee65bf12cd6999f30570b6050a5bdbb03a81aa (patch)
treeae0ef4e5260de655e7d2a8c1df1d8c6e6aeec67e
parent4c80bf4324956e39073eb7d13c144cdcd0f64fba (diff)
downloadbrew-0fee65bf12cd6999f30570b6050a5bdbb03a81aa.tar.bz2
link_overwrite if the owning keg no longer exists
-rw-r--r--Library/Homebrew/formula.rb17
1 files changed, 14 insertions, 3 deletions
diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb
index 5af681f98..095a772c4 100644
--- a/Library/Homebrew/formula.rb
+++ b/Library/Homebrew/formula.rb
@@ -805,13 +805,24 @@ class Formula
def link_overwrite?(path)
# Don't overwrite files not created by Homebrew.
return false unless path.stat.uid == File.stat(HOMEBREW_BREW_FILE).uid
- # Don't overwrite files belong to other keg.
+ # Don't overwrite files belong to other keg except when that
+ # keg's formula is deleted.
begin
- Keg.for(path)
+ keg = Keg.for(path)
rescue NotAKegError, Errno::ENOENT
# file doesn't belong to any keg.
else
- return false
+ tap = Tab.for_keg(keg).tap
+ return false if tap.nil? # this keg doesn't below to any core/tap formula, most likely coming from a DIY install.
+ begin
+ Formulary.factory(keg.name)
+ rescue FormulaUnavailableError
+ # formula for this keg is deleted, so defer to whitelist
+ rescue TapFormulaAmbiguityError, TapFormulaWithOldnameAmbiguityError
+ return false # this keg belongs to another formula
+ else
+ return false # this keg belongs to another formula
+ end
end
to_check = path.relative_path_from(HOMEBREW_PREFIX).to_s
self.class.link_overwrite_paths.any? do |p|