2018-09-03 19:39:07 +01:00
|
|
|
require "cask/download"
|
2018-08-06 20:22:19 +02:00
|
|
|
|
2016-09-24 13:52:43 +02:00
|
|
|
module Hbc
|
|
|
|
class Auditor
|
2018-08-31 13:16:11 +00:00
|
|
|
def self.audit(cask, audit_download: false, check_token_conflicts: false, quarantine: true, commit_range: nil)
|
|
|
|
new(cask, audit_download, check_token_conflicts, quarantine, commit_range).audit
|
2016-10-24 04:08:56 -04:00
|
|
|
end
|
|
|
|
|
2017-05-07 06:41:40 +02:00
|
|
|
attr_reader :cask, :commit_range
|
2016-10-24 04:08:56 -04:00
|
|
|
|
2018-08-31 13:16:11 +00:00
|
|
|
def initialize(cask, audit_download, check_token_conflicts, quarantine, commit_range)
|
2016-10-24 04:08:56 -04:00
|
|
|
@cask = cask
|
|
|
|
@audit_download = audit_download
|
2018-08-31 13:16:11 +00:00
|
|
|
@quarantine = quarantine
|
2017-05-07 06:41:40 +02:00
|
|
|
@commit_range = commit_range
|
2016-10-24 04:08:56 -04:00
|
|
|
@check_token_conflicts = check_token_conflicts
|
|
|
|
end
|
|
|
|
|
|
|
|
def audit_download?
|
|
|
|
@audit_download
|
|
|
|
end
|
|
|
|
|
2018-08-31 13:16:11 +00:00
|
|
|
def quarantine?
|
|
|
|
@quarantine
|
|
|
|
end
|
|
|
|
|
2016-10-24 04:08:56 -04:00
|
|
|
def check_token_conflicts?
|
|
|
|
@check_token_conflicts
|
|
|
|
end
|
|
|
|
|
|
|
|
def audit
|
|
|
|
if !ARGV.value("language") && language_blocks
|
|
|
|
audit_all_languages
|
2016-09-25 22:47:31 +02:00
|
|
|
else
|
2016-10-24 04:08:56 -04:00
|
|
|
audit_cask_instance(cask)
|
2016-09-25 22:47:31 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-10-24 04:08:56 -04:00
|
|
|
private
|
|
|
|
|
|
|
|
def audit_all_languages
|
|
|
|
saved_languages = MacOS.instance_variable_get(:@languages)
|
|
|
|
begin
|
|
|
|
language_blocks.keys.all?(&method(:audit_languages))
|
|
|
|
ensure
|
|
|
|
MacOS.instance_variable_set(:@languages, saved_languages)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def audit_languages(languages)
|
|
|
|
ohai "Auditing language: #{languages.map { |lang| "'#{lang}'" }.join(", ")}"
|
|
|
|
MacOS.instance_variable_set(:@languages, languages)
|
2017-10-07 15:58:49 +02:00
|
|
|
audit_cask_instance(CaskLoader.load(cask.sourcefile_path))
|
2016-10-24 04:08:56 -04:00
|
|
|
ensure
|
2018-08-27 23:24:37 +02:00
|
|
|
# TODO: Check if this is still needed once cache deduplication is active.
|
|
|
|
Homebrew::Cleanup.new(days: 0).cleanup_cask(cask) if audit_download?
|
2016-10-24 04:08:56 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def audit_cask_instance(cask)
|
2018-08-31 13:16:11 +00:00
|
|
|
download = audit_download? && Download.new(cask, quarantine: quarantine?)
|
2016-09-24 13:52:43 +02:00
|
|
|
audit = Audit.new(cask, download: download,
|
2017-05-07 06:41:40 +02:00
|
|
|
check_token_conflicts: check_token_conflicts?,
|
|
|
|
commit_range: commit_range)
|
2016-09-24 13:52:43 +02:00
|
|
|
audit.run!
|
|
|
|
puts audit.summary
|
|
|
|
audit.success?
|
|
|
|
end
|
2016-10-24 04:08:56 -04:00
|
|
|
|
|
|
|
def language_blocks
|
|
|
|
cask.instance_variable_get(:@dsl).instance_variable_get(:@language_blocks)
|
|
|
|
end
|
2016-08-18 22:11:42 +03:00
|
|
|
end
|
|
|
|
end
|