diff options
Diffstat (limited to 'Library/Homebrew/cmd/cleanup.rb')
| -rw-r--r-- | Library/Homebrew/cmd/cleanup.rb | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/Library/Homebrew/cmd/cleanup.rb b/Library/Homebrew/cmd/cleanup.rb index a644fbb41..114ae1f3a 100644 --- a/Library/Homebrew/cmd/cleanup.rb +++ b/Library/Homebrew/cmd/cleanup.rb @@ -62,21 +62,30 @@ module Homebrew extend self def cleanup_cache return unless HOMEBREW_CACHE.directory? + HOMEBREW_CACHE.children.select(&:file?).each do |file| version = file.version - name = file.basename.to_s.match(/(.*)-(#{version})/).captures.first rescue nil - if name and version - f = Formula.factory(name) rescue nil - old_bottle = bottle_file_outdated? f, file - if (f and f.version > version) or (ARGV.switch? "s" and (f and (not f.installed?))) or old_bottle - if ARGV.dry_run? - puts "Would remove: #{file}" - else - puts "Removing: #{file}..." - rm file - end - end + name = file.basename.to_s.match(/(.*)-(?:#{Regexp.escape(version)})/).captures.first rescue nil + next unless name && version + + begin + f = Formula.factory(name) + rescue FormulaUnavailableError + next end + + if f.version > version || ARGV.switch?('s') && !f.installed? || bottle_file_outdated?(f, file) + cleanup_cached_file(file) + end + end + end + + def cleanup_cached_file file + if ARGV.dry_run? + puts "Would remove: #{file}" + else + puts "Removing: #{file}..." + file.unlink end end |
