keg: correctly cleanup old aliases.
Cleanup old, versioned aliases and tap aliases folders when unlinking or uninstalling a keg.
This commit is contained in:
parent
fe35bb32e8
commit
1651647a3d
@ -237,13 +237,37 @@ class Keg
|
|||||||
opt_record.symlink? && path == opt_record.resolved_path
|
opt_record.symlink? && path == opt_record.resolved_path
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_opt_record
|
def remove_old_aliases
|
||||||
opt_record.unlink
|
opt = opt_record.parent
|
||||||
aliases.each do |a|
|
|
||||||
alias_symlink = opt_record.parent/a
|
tap = begin
|
||||||
next if !alias_symlink.symlink? && !alias_symlink.exist?
|
to_formula.tap
|
||||||
|
rescue FormulaUnavailableError, TapFormulaAmbiguityError,
|
||||||
|
TapFormulaWithOldnameAmbiguityError
|
||||||
|
# If the formula can't be found, just ignore aliases for now.
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
|
if tap
|
||||||
|
bad_tap_opt = opt/tap.user
|
||||||
|
FileUtils.rm_rf bad_tap_opt if bad_tap_opt.directory?
|
||||||
|
end
|
||||||
|
|
||||||
|
Pathname.glob("#{opt_record}@*").each do |a|
|
||||||
|
a = a.basename
|
||||||
|
next if aliases.include?(a)
|
||||||
|
|
||||||
|
alias_symlink = opt/a
|
||||||
|
if alias_symlink.symlink? && alias_symlink.exist?
|
||||||
|
next if rack != alias_symlink.realpath.parent
|
||||||
|
end
|
||||||
|
|
||||||
alias_symlink.delete
|
alias_symlink.delete
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def remove_opt_record
|
||||||
|
opt_record.unlink
|
||||||
opt_record.parent.rmdir_if_possible
|
opt_record.parent.rmdir_if_possible
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -251,6 +275,7 @@ class Keg
|
|||||||
path.rmtree
|
path.rmtree
|
||||||
path.parent.rmdir_if_possible
|
path.parent.rmdir_if_possible
|
||||||
remove_opt_record if optlinked?
|
remove_opt_record if optlinked?
|
||||||
|
remove_old_aliases
|
||||||
remove_oldname_opt_record
|
remove_oldname_opt_record
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -277,6 +302,7 @@ class Keg
|
|||||||
|
|
||||||
dst.uninstall_info if dst.to_s =~ INFOFILE_RX
|
dst.uninstall_info if dst.to_s =~ INFOFILE_RX
|
||||||
dst.unlink
|
dst.unlink
|
||||||
|
remove_old_aliases
|
||||||
Find.prune if src.directory?
|
Find.prune if src.directory?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -468,12 +494,7 @@ class Keg
|
|||||||
end
|
end
|
||||||
|
|
||||||
def aliases
|
def aliases
|
||||||
formula = Formulary.from_rack(rack)
|
Tab.for_keg(self).aliases || []
|
||||||
aliases = formula.aliases
|
|
||||||
return aliases if formula.stable?
|
|
||||||
aliases.reject { |a| a.include?("@") }
|
|
||||||
rescue FormulaUnavailableError
|
|
||||||
[]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def optlink(mode = OpenStruct.new)
|
def optlink(mode = OpenStruct.new)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user