2016-04-08 16:28:43 +02:00
|
|
|
#: * `prune` [`--dry-run`]:
|
|
|
|
#: Remove dead symlinks from the Homebrew prefix. This is generally not
|
2018-03-25 10:11:24 +01:00
|
|
|
#: needed, but can be useful when doing DIY installations.
|
2016-04-08 16:28:43 +02:00
|
|
|
#:
|
|
|
|
#: If `--dry-run` or `-n` is passed, show what would be removed, but do not
|
|
|
|
#: actually remove anything.
|
|
|
|
|
2015-08-03 13:09:07 +01:00
|
|
|
require "keg"
|
2012-02-01 22:36:07 -06:00
|
|
|
|
2014-06-18 22:41:47 -05:00
|
|
|
module Homebrew
|
2016-09-26 01:44:51 +02:00
|
|
|
module_function
|
|
|
|
|
2010-09-11 20:22:54 +01:00
|
|
|
def prune
|
2013-08-09 21:09:48 -05:00
|
|
|
ObserverPathnameExtension.reset_counts!
|
|
|
|
|
2010-09-11 20:22:54 +01:00
|
|
|
dirs = []
|
|
|
|
|
2015-08-17 17:08:23 +02:00
|
|
|
Keg::PRUNEABLE_DIRECTORIES.each do |dir|
|
|
|
|
next unless dir.directory?
|
2013-02-17 22:54:43 -06:00
|
|
|
dir.find do |path|
|
2013-05-15 12:45:39 -05:00
|
|
|
path.extend(ObserverPathnameExtension)
|
2010-09-11 20:22:54 +01:00
|
|
|
if path.symlink?
|
2012-02-01 22:36:07 -06:00
|
|
|
unless path.resolved_path_exists?
|
2014-02-22 09:20:09 -08:00
|
|
|
if path.to_s =~ Keg::INFOFILE_RX
|
2013-05-15 12:45:39 -05:00
|
|
|
path.uninstall_info unless ARGV.dry_run?
|
|
|
|
end
|
|
|
|
|
|
|
|
if ARGV.dry_run?
|
|
|
|
puts "Would remove (broken link): #{path}"
|
|
|
|
else
|
|
|
|
path.unlink
|
2012-02-01 22:36:07 -06:00
|
|
|
end
|
|
|
|
end
|
2016-12-13 01:05:11 +00:00
|
|
|
elsif path.directory? && !Keg::PRUNEABLE_DIRECTORIES.include?(path)
|
2010-09-11 20:22:54 +01:00
|
|
|
dirs << path
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-12-21 21:37:26 -06:00
|
|
|
dirs.reverse_each do |d|
|
2013-05-15 12:45:39 -05:00
|
|
|
if ARGV.dry_run? && d.children.empty?
|
|
|
|
puts "Would remove (empty directory): #{d}"
|
|
|
|
else
|
|
|
|
d.rmdir_if_possible
|
|
|
|
end
|
|
|
|
end
|
2010-09-11 20:22:54 +01:00
|
|
|
|
2018-03-25 10:11:24 +01:00
|
|
|
return if ARGV.dry_run?
|
2015-12-08 09:11:33 +01:00
|
|
|
|
2018-03-25 10:11:24 +01:00
|
|
|
if ObserverPathnameExtension.total.zero?
|
|
|
|
puts "Nothing pruned" if ARGV.verbose?
|
|
|
|
else
|
|
|
|
n, d = ObserverPathnameExtension.counts
|
|
|
|
print "Pruned #{n} symbolic links "
|
|
|
|
print "and #{d} directories " if d.positive?
|
|
|
|
puts "from #{HOMEBREW_PREFIX}"
|
|
|
|
end
|
2010-09-11 20:22:54 +01:00
|
|
|
end
|
|
|
|
end
|