Merge pull request #4639 from reitermarkus/refactor-cleanup
Add cask cleanup and per-formula cache cleanup.
This commit is contained in:
commit
8e703e30ba
@ -1,3 +1,4 @@
|
||||
require "hbc/cask"
|
||||
require "uri"
|
||||
|
||||
module Hbc
|
||||
|
||||
@ -3,6 +3,8 @@ require "formula"
|
||||
require "hbc/cask_loader"
|
||||
|
||||
module CleanupRefinement
|
||||
LATEST_CASK_DAYS = 7
|
||||
|
||||
refine Pathname do
|
||||
def incomplete?
|
||||
extname.end_with?(".incomplete")
|
||||
@ -23,7 +25,7 @@ module CleanupRefinement
|
||||
def stale?(scrub = false)
|
||||
return false unless file?
|
||||
|
||||
stale_formula?(scrub)
|
||||
stale_formula?(scrub) || stale_cask?(scrub)
|
||||
end
|
||||
|
||||
private
|
||||
@ -35,13 +37,16 @@ module CleanupRefinement
|
||||
begin
|
||||
Utils::Bottles.resolve_version(self)
|
||||
rescue
|
||||
self.version
|
||||
nil
|
||||
end
|
||||
else
|
||||
self.version
|
||||
end
|
||||
|
||||
version ||= basename.to_s[/\A.*--(.*?)#{Regexp.escape(extname)}/, 1]
|
||||
|
||||
return false unless version
|
||||
|
||||
version = Version.parse(version)
|
||||
|
||||
return false unless (name = basename.to_s[/\A(.*?)\-\-?(?:#{Regexp.escape(version)})/, 1])
|
||||
|
||||
formula = begin
|
||||
@ -62,6 +67,29 @@ module CleanupRefinement
|
||||
|
||||
false
|
||||
end
|
||||
|
||||
def stale_cask?(scrub)
|
||||
return false unless name = basename.to_s[/\A(.*?)\-\-/, 1]
|
||||
|
||||
cask = begin
|
||||
Hbc::CaskLoader.load(name)
|
||||
rescue Hbc::CaskUnavailableError
|
||||
return false
|
||||
end
|
||||
|
||||
unless basename.to_s.match?(/\A#{Regexp.escape(name)}\-\-#{Regexp.escape(cask.version)}\b/)
|
||||
return true
|
||||
end
|
||||
|
||||
return true if scrub && !cask.versions.include?(cask.version)
|
||||
|
||||
if cask.version.latest?
|
||||
# TODO: Replace with ActiveSupport's `.days.ago`.
|
||||
return mtime < ((@time ||= Time.now) - LATEST_CASK_DAYS * 60 * 60 * 24)
|
||||
end
|
||||
|
||||
false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -114,19 +142,18 @@ module Homebrew
|
||||
end
|
||||
end
|
||||
|
||||
def update_disk_cleanup_size(path_size)
|
||||
@disk_cleanup_size += path_size
|
||||
end
|
||||
|
||||
def unremovable_kegs
|
||||
@unremovable_kegs ||= []
|
||||
end
|
||||
|
||||
def cleanup_formula(formula)
|
||||
formula.eligible_kegs_for_cleanup.each(&method(:cleanup_keg))
|
||||
cleanup_cache(Pathname.glob(cache/"#{formula.name}--*"))
|
||||
end
|
||||
|
||||
def cleanup_cask(cask); end
|
||||
def cleanup_cask(cask)
|
||||
cleanup_cache(Pathname.glob(cache/"Cask/#{cask.token}--*"))
|
||||
end
|
||||
|
||||
def cleanup_keg(keg)
|
||||
cleanup_path(keg) { keg.uninstall }
|
||||
@ -144,9 +171,10 @@ module Homebrew
|
||||
end
|
||||
end
|
||||
|
||||
def cleanup_cache
|
||||
return unless cache.directory?
|
||||
cache.children.each do |path|
|
||||
def cleanup_cache(entries = nil)
|
||||
entries ||= [cache, cache/"Cask"].select(&:directory?).flat_map(&:children)
|
||||
|
||||
entries.each do |path|
|
||||
next cleanup_path(path) { path.unlink } if path.incomplete?
|
||||
next cleanup_path(path) { FileUtils.rm_rf path } if path.nested_cache?
|
||||
|
||||
@ -159,7 +187,7 @@ module Homebrew
|
||||
next
|
||||
end
|
||||
|
||||
next cleanup_path(path) { path.unlink } if path.stale?(ARGV.switch?("s"))
|
||||
next cleanup_path(path) { path.unlink } if path.stale?(scrub?)
|
||||
end
|
||||
end
|
||||
|
||||
@ -173,7 +201,7 @@ module Homebrew
|
||||
yield
|
||||
end
|
||||
|
||||
update_disk_cleanup_size(disk_usage)
|
||||
@disk_cleanup_size += disk_usage
|
||||
end
|
||||
|
||||
def cleanup_lockfiles
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user