diff options
Diffstat (limited to 'Library/Homebrew/cmd')
| -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  | 
