diff options
| author | Robin Neatherway | 2015-09-28 22:47:53 +0100 |
|---|---|---|
| committer | Xu Cheng | 2015-10-07 17:20:09 +0800 |
| commit | 0fee65bf12cd6999f30570b6050a5bdbb03a81aa (patch) | |
| tree | ae0ef4e5260de655e7d2a8c1df1d8c6e6aeec67e | |
| parent | 4c80bf4324956e39073eb7d13c144cdcd0f64fba (diff) | |
| download | brew-0fee65bf12cd6999f30570b6050a5bdbb03a81aa.tar.bz2 | |
link_overwrite if the owning keg no longer exists
| -rw-r--r-- | Library/Homebrew/formula.rb | 17 |
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| |
