aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cmd/cleanup.rb
diff options
context:
space:
mode:
authorJack Nagel2013-05-15 12:45:39 -0500
committerJack Nagel2013-05-15 12:57:01 -0500
commit243089faf9affd0a40d38e582d3b7949dec915f3 (patch)
tree7fe9cd05d4b9e5fa279052876449174ca6b03f2a /Library/Homebrew/cmd/cleanup.rb
parent1539d8f598dfeaaf4e573021d10cefc8396e9316 (diff)
downloadhomebrew-243089faf9affd0a40d38e582d3b7949dec915f3.tar.bz2
cleanup: refactor cleanup_cache
Diffstat (limited to 'Library/Homebrew/cmd/cleanup.rb')
-rw-r--r--Library/Homebrew/cmd/cleanup.rb33
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