mirror of
https://github.com/wavetermdev/homebrew-cask.git
synced 2026-08-05 13:43:24 -07:00
Make audit_modified_casks an internal cmd (#22826)
This commit is contained in:
@@ -1,154 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
#
|
||||
# audit_modified_casks
|
||||
#
|
||||
|
||||
###
|
||||
### dependencies
|
||||
###
|
||||
|
||||
require 'pathname'
|
||||
require 'open3'
|
||||
|
||||
$LOAD_PATH.unshift(Pathname(`brew --repository`.chomp).realpath.join('Library/Homebrew'))
|
||||
$LOAD_PATH.unshift(Pathname(__FILE__).realpath.join('../../../lib'))
|
||||
|
||||
require 'vendor/homebrew-fork/global'
|
||||
require 'hbc'
|
||||
|
||||
###
|
||||
### constants
|
||||
###
|
||||
|
||||
CASK_DIR = Pathname(__FILE__).realpath.join('../../../Casks')
|
||||
RELEVANT_STANZAS = %i{version sha256 url}
|
||||
|
||||
###
|
||||
### methods
|
||||
###
|
||||
|
||||
def cd_to_project_root
|
||||
Dir.chdir Pathname(__FILE__).realpath.dirname
|
||||
@git_root ||= git(*%w[rev-parse --show-toplevel])
|
||||
Dir.chdir @git_root
|
||||
end
|
||||
|
||||
def die(msg, status=1)
|
||||
onoe msg
|
||||
exit status
|
||||
end
|
||||
|
||||
def main
|
||||
cd_to_project_root
|
||||
modified_cask_files.zip(modified_casks).each do |cask_file, cask|
|
||||
audit(cask, cask_file)
|
||||
end
|
||||
report_failures
|
||||
end
|
||||
|
||||
def commit_range
|
||||
$commit_range
|
||||
end
|
||||
|
||||
def modified_cask_files
|
||||
return @modified_cask_files if defined? @modified_cask_files
|
||||
out = git(*%w[diff --name-only --diff-filter=AM], commit_range,
|
||||
'--', "#{CASK_DIR}/*.rb")
|
||||
@modified_cask_files = out.split("\n")
|
||||
end
|
||||
|
||||
def modified_casks
|
||||
return @modified_casks if defined? @modified_casks
|
||||
@modified_casks = modified_cask_files.map { |f| Hbc.load(f) }
|
||||
if @modified_casks.any?
|
||||
num_modified = @modified_casks.size
|
||||
ohai "#{num_modified} modified #{pluralize('cask', num_modified)}: " \
|
||||
"#{@modified_casks.join(' ')}"
|
||||
end
|
||||
@modified_casks
|
||||
end
|
||||
|
||||
def audit(cask, cask_file)
|
||||
audit_download = audit_download?(cask, cask_file)
|
||||
success = Hbc::Auditor.audit(cask, audit_download: audit_download)
|
||||
failed_casks << cask unless success
|
||||
end
|
||||
|
||||
def failed_casks
|
||||
@failed_casks ||= []
|
||||
end
|
||||
|
||||
def audit_download?(cask, cask_file)
|
||||
cask.sha256 != :no_check && relevant_stanza_modified?(cask_file)
|
||||
end
|
||||
|
||||
def relevant_stanza_modified?(cask_file)
|
||||
out = git('diff', commit_range, '--', cask_file)
|
||||
out =~ /^\+\s*(#{RELEVANT_STANZAS.join('|')})/
|
||||
end
|
||||
|
||||
def git(*args)
|
||||
ohai ['git', *args].join(' ') if $debug
|
||||
out, err, status = Open3.capture3('git', *args)
|
||||
return out.chomp if status.success?
|
||||
die err.chomp, status.exitstatus
|
||||
end
|
||||
|
||||
def report_failures
|
||||
return if failed_casks.empty?
|
||||
num_failed = failed_casks.size
|
||||
cask_pluralized = pluralize('cask', num_failed)
|
||||
die "audit failed for #{num_failed} #{cask_pluralized}: " \
|
||||
"#{failed_casks.join(' ')}"
|
||||
end
|
||||
|
||||
def pluralize(str, num)
|
||||
num == 1 ? str : "#{str}s"
|
||||
end
|
||||
|
||||
def cleanup
|
||||
Hbc::CLI::Cleanup.run if $clean_cache
|
||||
end
|
||||
|
||||
###
|
||||
### main
|
||||
###
|
||||
|
||||
usage = <<-EOS
|
||||
Usage: audit_modified_casks [options...] <commit range>
|
||||
|
||||
Given a range of Git commits, find any Casks that were modified and run `brew
|
||||
cask audit' on them. If the `url', `version', or `sha256' stanzas were modified,
|
||||
run with the `--download' flag to verify the hash.
|
||||
|
||||
Options:
|
||||
-c, --clean-cache
|
||||
Remove all cached downloads. Use with care.
|
||||
-d, --debug
|
||||
Enable debugging output.
|
||||
-h, --help
|
||||
Display usage and exit.
|
||||
EOS
|
||||
|
||||
while ARGV.any? do
|
||||
case ARGV.first
|
||||
when /^-+h(elp)?$/i
|
||||
puts usage
|
||||
exit 0
|
||||
when /^-+d(ebug)?$/i
|
||||
$debug = 1
|
||||
ARGV.shift
|
||||
when /^-+c(lean-cache)?$/i
|
||||
$clean_cache = 1
|
||||
ARGV.shift
|
||||
else
|
||||
die usage if $commit_range
|
||||
$commit_range = ARGV.shift
|
||||
end
|
||||
end
|
||||
|
||||
die usage unless $commit_range
|
||||
|
||||
at_exit { cleanup }
|
||||
|
||||
main
|
||||
Reference in New Issue
Block a user