2012-02-01 22:36:07 -06:00
|
|
|
require 'keg'
|
2013-04-13 17:22:01 -05:00
|
|
|
require 'cmd/tap'
|
2012-02-01 22:36:07 -06:00
|
|
|
|
2010-09-11 20:22:54 +01:00
|
|
|
module Homebrew extend self
|
|
|
|
def prune
|
2013-08-09 21:09:48 -05:00
|
|
|
ObserverPathnameExtension.reset_counts!
|
|
|
|
|
2010-09-11 20:22:54 +01:00
|
|
|
dirs = []
|
|
|
|
|
2013-05-15 12:45:39 -05:00
|
|
|
Keg::PRUNEABLE_DIRECTORIES.select(&:directory?).each do |dir|
|
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
|
2010-09-11 20:22:54 +01:00
|
|
|
elsif path.directory?
|
|
|
|
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
|
|
|
|
2013-05-15 12:45:39 -05:00
|
|
|
repair_taps unless ARGV.dry_run?
|
2013-04-13 17:22:01 -05:00
|
|
|
|
2013-08-09 21:09:48 -05:00
|
|
|
if ObserverPathnameExtension.total.zero?
|
2010-09-11 20:22:54 +01:00
|
|
|
puts "Nothing pruned" if ARGV.verbose?
|
|
|
|
else
|
2014-02-23 22:07:30 -08:00
|
|
|
n, d = ObserverPathnameExtension.counts
|
2013-08-09 21:09:48 -05:00
|
|
|
print "Pruned #{n} symbolic links "
|
|
|
|
print "and #{d} directories " if d > 0
|
2010-09-11 20:22:54 +01:00
|
|
|
puts "from #{HOMEBREW_PREFIX}"
|
2013-05-15 12:45:39 -05:00
|
|
|
end unless ARGV.dry_run?
|
2010-09-11 20:22:54 +01:00
|
|
|
end
|
|
|
|
end
|