dev-cmd/unbottled: add --lost option
This option tries to find bottles where the bottle was removed from the formula in the past week and not added back in. It checks the output of `git log` to see if there are any bottles that fit this criteria.
This commit is contained in:
parent
c0c8a4dd4d
commit
20f00a6427
@ -21,11 +21,13 @@ module Homebrew
|
||||
description: "Skip getting analytics data and sort by number of dependents instead."
|
||||
switch "--total",
|
||||
description: "Print the number of unbottled and total formulae."
|
||||
switch "--lost",
|
||||
description: "Print the `homebrew/core` commits where bottles were lost in the last week."
|
||||
switch "--eval-all",
|
||||
description: "Evaluate all available formulae and casks, whether installed or not, to check them. " \
|
||||
"Implied if `HOMEBREW_EVAL_ALL` is set."
|
||||
|
||||
conflicts "--dependents", "--total"
|
||||
conflicts "--dependents", "--total", "--lost"
|
||||
|
||||
named_args :formula
|
||||
end
|
||||
@ -43,6 +45,17 @@ module Homebrew
|
||||
Utils::Bottles.tag
|
||||
end
|
||||
|
||||
if args.lost?
|
||||
if args.named.present?
|
||||
raise UsageError, "`brew unbottled --lost` cannot be used with formula arguments!"
|
||||
elsif !CoreTap.instance.installed?
|
||||
raise UsageError, "`brew unbottled --lost` requires `homebrew/core` to be tapped locally!"
|
||||
else
|
||||
output_lost_bottles
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
os = @bottle_tag.system
|
||||
arch = if Hardware::CPU::INTEL_ARCHS.include?(@bottle_tag.arch)
|
||||
:intel
|
||||
@ -243,4 +256,53 @@ module Homebrew
|
||||
|
||||
puts "No unbottled dependencies found!"
|
||||
end
|
||||
|
||||
def output_lost_bottles
|
||||
# $ git log --patch -G\^\ \+sha256.\*\ sonoma: --since=@\{\'1\ week\ ago\'\}
|
||||
git_log = %w[git log --patch]
|
||||
git_log << "-G^ +sha256.* #{@bottle_tag}:"
|
||||
git_log << "--since=@{'1 week ago'}"
|
||||
|
||||
bottle_tag_sha_regex = /^[+-] +sha256.* #{@bottle_tag}: /
|
||||
|
||||
processed_formulae = Set.new
|
||||
commit = T.let(nil, T.nilable(String))
|
||||
formula = T.let(nil, T.nilable(String))
|
||||
lost_bottles = 0
|
||||
|
||||
CoreTap.instance.path.cd do
|
||||
Utils.safe_popen_read(*git_log) do |io|
|
||||
io.each_line do |line|
|
||||
case line
|
||||
when /^commit [0-9a-f]{40}$/
|
||||
# Example match: `commit 7289b409b96a752540befef1a56b8a818baf1db7`
|
||||
if commit && lost_bottles.positive? && processed_formulae.exclude?(formula)
|
||||
puts "#{commit}: bottle lost for #{formula}"
|
||||
end
|
||||
processed_formulae << formula
|
||||
commit = line.split.last
|
||||
lost_bottles = 0
|
||||
when %r{^diff --git a/Formula/}
|
||||
# Example match: `diff --git a/Formula/a/aws-cdk.rb b/Formula/a/aws-cdk.rb`
|
||||
formula = line.split("/").last.chomp(".rb\n")
|
||||
when bottle_tag_sha_regex
|
||||
# Example match: `- sha256 cellar: :any_skip_relocation, sonoma: "f0a4..."`
|
||||
next if processed_formulae.include?(formula)
|
||||
|
||||
case line.chr
|
||||
when "+" then lost_bottles -= 1
|
||||
when "-" then lost_bottles += 1
|
||||
end
|
||||
when /^[+] +sha256.* all: /
|
||||
# Example match: `+ sha256 cellar: :any_skip_relocation, all: "9e35..."`
|
||||
lost_bottles -= 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return if !commit || !lost_bottles.positive? || processed_formulae.include?(formula)
|
||||
|
||||
puts "#{commit}: bottle lost for #{formula}"
|
||||
end
|
||||
end
|
||||
|
||||
@ -2258,6 +2258,7 @@ _brew_unbottled() {
|
||||
--dependents
|
||||
--eval-all
|
||||
--help
|
||||
--lost
|
||||
--quiet
|
||||
--tag
|
||||
--total
|
||||
|
||||
@ -1500,6 +1500,7 @@ __fish_brew_complete_arg 'unbottled' -l debug -d 'Display any debugging informat
|
||||
__fish_brew_complete_arg 'unbottled' -l dependents -d 'Skip getting analytics data and sort by number of dependents instead'
|
||||
__fish_brew_complete_arg 'unbottled' -l eval-all -d 'Evaluate all available formulae and casks, whether installed or not, to check them. Implied if `HOMEBREW_EVAL_ALL` is set'
|
||||
__fish_brew_complete_arg 'unbottled' -l help -d 'Show this message'
|
||||
__fish_brew_complete_arg 'unbottled' -l lost -d 'Print the `homebrew/core` commits where bottles were lost in the last week'
|
||||
__fish_brew_complete_arg 'unbottled' -l quiet -d 'Make some output more quiet'
|
||||
__fish_brew_complete_arg 'unbottled' -l tag -d 'Use the specified bottle tag (e.g. `big_sur`) instead of the current OS'
|
||||
__fish_brew_complete_arg 'unbottled' -l total -d 'Print the number of unbottled and total formulae'
|
||||
|
||||
@ -1846,12 +1846,13 @@ _brew_typecheck() {
|
||||
_brew_unbottled() {
|
||||
_arguments \
|
||||
'--debug[Display any debugging information]' \
|
||||
'(--total)--dependents[Skip getting analytics data and sort by number of dependents instead]' \
|
||||
'(--total --lost)--dependents[Skip getting analytics data and sort by number of dependents instead]' \
|
||||
'--eval-all[Evaluate all available formulae and casks, whether installed or not, to check them. Implied if `HOMEBREW_EVAL_ALL` is set]' \
|
||||
'--help[Show this message]' \
|
||||
'(--dependents --total)--lost[Print the `homebrew/core` commits where bottles were lost in the last week]' \
|
||||
'--quiet[Make some output more quiet]' \
|
||||
'--tag[Use the specified bottle tag (e.g. `big_sur`) instead of the current OS]' \
|
||||
'(--dependents)--total[Print the number of unbottled and total formulae]' \
|
||||
'(--dependents --lost)--total[Print the number of unbottled and total formulae]' \
|
||||
'--verbose[Make some output more verbose]' \
|
||||
- formula \
|
||||
'*::formula:__brew_formulae'
|
||||
|
||||
@ -1626,6 +1626,8 @@ Show the unbottled dependents of formulae.
|
||||
Skip getting analytics data and sort by number of dependents instead.
|
||||
* `--total`:
|
||||
Print the number of unbottled and total formulae.
|
||||
* `--lost`:
|
||||
Print the `homebrew/core` commits where bottles were lost in the last week.
|
||||
* `--eval-all`:
|
||||
Evaluate all available formulae and casks, whether installed or not, to check them. Implied if `HOMEBREW_EVAL_ALL` is set.
|
||||
|
||||
|
||||
@ -2339,6 +2339,10 @@ Skip getting analytics data and sort by number of dependents instead\.
|
||||
Print the number of unbottled and total formulae\.
|
||||
.
|
||||
.TP
|
||||
\fB\-\-lost\fR
|
||||
Print the \fBhomebrew/core\fR commits where bottles were lost in the last week\.
|
||||
.
|
||||
.TP
|
||||
\fB\-\-eval\-all\fR
|
||||
Evaluate all available formulae and casks, whether installed or not, to check them\. Implied if \fBHOMEBREW_EVAL_ALL\fR is set\.
|
||||
.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user