link_overwrite if the owning keg no longer exists

This commit is contained in:
Robin Neatherway 2015-09-28 22:47:53 +01:00 committed by Xu Cheng
parent 4c80bf4324
commit 0fee65bf12

View File

@ -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|