Merge branch 'master' into codecov-action
This commit is contained in:
commit
9dff3236a7
10
.github/workflows/doctor.yml
vendored
10
.github/workflows/doctor.yml
vendored
@ -8,20 +8,22 @@ on:
|
|||||||
- Library/Homebrew/extend/os/diagnostic.rb
|
- Library/Homebrew/extend/os/diagnostic.rb
|
||||||
- Library/Homebrew/extend/os/mac/diagnostic.rb
|
- Library/Homebrew/extend/os/mac/diagnostic.rb
|
||||||
- Library/Homebrew/os/mac/xcode.rb
|
- Library/Homebrew/os/mac/xcode.rb
|
||||||
branches-ignore:
|
|
||||||
- master
|
|
||||||
env:
|
env:
|
||||||
HOMEBREW_DEVELOPER: 1
|
HOMEBREW_DEVELOPER: 1
|
||||||
HOMEBREW_NO_AUTO_UPDATE: 1
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
||||||
|
HOMEBREW_CHANGE_ARCH_TO_ARM: 1
|
||||||
jobs:
|
jobs:
|
||||||
tests:
|
tests:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
version: [10.15, 10.14, 10.13]
|
version: ['11-arm', '11.0', '10.15', '10.14']
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
runs-on: ${{ matrix.version }}
|
runs-on: ${{ matrix.version }}
|
||||||
env:
|
env:
|
||||||
PATH: "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
|
PATH: "/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
working-directory: /tmp
|
||||||
steps:
|
steps:
|
||||||
- name: Set up Homebrew
|
- name: Set up Homebrew
|
||||||
id: set-up-homebrew
|
id: set-up-homebrew
|
||||||
|
|||||||
5
.github/workflows/tests.yml
vendored
5
.github/workflows/tests.yml
vendored
@ -40,11 +40,6 @@ jobs:
|
|||||||
brew install vale
|
brew install vale
|
||||||
vale docs/
|
vale docs/
|
||||||
|
|
||||||
- name: Lint Dockerfile
|
|
||||||
run: |
|
|
||||||
brew install hadolint
|
|
||||||
hadolint Dockerfile
|
|
||||||
|
|
||||||
tap-syntax:
|
tap-syntax:
|
||||||
name: tap syntax (Linux)
|
name: tap syntax (Linux)
|
||||||
if: startsWith(github.repository, 'Homebrew/')
|
if: startsWith(github.repository, 'Homebrew/')
|
||||||
|
|||||||
12
.github/workflows/vendor-gems.yml
vendored
12
.github/workflows/vendor-gems.yml
vendored
@ -41,17 +41,25 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.HOMEBREW_GITHUB_API_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.HOMEBREW_GITHUB_API_TOKEN }}
|
||||||
- name: Vendor Gems
|
- name: Vendor Gems
|
||||||
|
env:
|
||||||
|
GEM_NAME: ${{ steps.checkout.outputs.gem_name }}
|
||||||
run: |
|
run: |
|
||||||
if [[ '${{ steps.checkout.outputs.gem_name }}' == 'sorbet' ]]; then
|
set -u
|
||||||
|
|
||||||
|
if [[ "${GEM_NAME}" == 'sorbet' ]]; then
|
||||||
brew vendor-gems --update sorbet,sorbet-runtime
|
brew vendor-gems --update sorbet,sorbet-runtime
|
||||||
else
|
else
|
||||||
brew vendor-gems
|
brew vendor-gems
|
||||||
fi
|
fi
|
||||||
- name: Update RBI files
|
- name: Update RBI files
|
||||||
|
env:
|
||||||
|
GEM_NAME: ${{ steps.checkout.outputs.gem_name }}
|
||||||
run: |
|
run: |
|
||||||
|
set -u
|
||||||
|
|
||||||
if brew typecheck --update --fail-if-not-changed; then
|
if brew typecheck --update --fail-if-not-changed; then
|
||||||
if git add Library/Homebrew/sorbet; then
|
if git add Library/Homebrew/sorbet; then
|
||||||
git commit -m "Update RBI files for ${{ steps.checkout.outputs.gem_name }}."
|
git commit -m "Update RBI files for ${GEM_NAME}."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
git reset --hard
|
git reset --hard
|
||||||
|
|||||||
@ -36,8 +36,9 @@ Metrics/PerceivedComplexity:
|
|||||||
Max: 90
|
Max: 90
|
||||||
Metrics/MethodLength:
|
Metrics/MethodLength:
|
||||||
Max: 260
|
Max: 260
|
||||||
|
# TODO: Reduce to 600 after refactoring utils/github
|
||||||
Metrics/ModuleLength:
|
Metrics/ModuleLength:
|
||||||
Max: 600
|
Max: 620
|
||||||
Exclude:
|
Exclude:
|
||||||
- "test/**/*"
|
- "test/**/*"
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
activesupport (6.1.1)
|
activesupport (6.1.2)
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||||
i18n (>= 1.6, < 2)
|
i18n (>= 1.6, < 2)
|
||||||
minitest (>= 5.1)
|
minitest (>= 5.1)
|
||||||
@ -9,7 +9,7 @@ GEM
|
|||||||
zeitwerk (~> 2.3)
|
zeitwerk (~> 2.3)
|
||||||
ast (2.4.2)
|
ast (2.4.2)
|
||||||
bindata (2.4.8)
|
bindata (2.4.8)
|
||||||
bootsnap (1.7.0)
|
bootsnap (1.7.2)
|
||||||
msgpack (~> 1.0)
|
msgpack (~> 1.0)
|
||||||
byebug (11.1.3)
|
byebug (11.1.3)
|
||||||
coderay (1.1.3)
|
coderay (1.1.3)
|
||||||
@ -28,7 +28,7 @@ GEM
|
|||||||
hpricot (0.8.6)
|
hpricot (0.8.6)
|
||||||
http-cookie (1.0.3)
|
http-cookie (1.0.3)
|
||||||
domain_name (~> 0.5)
|
domain_name (~> 0.5)
|
||||||
i18n (1.8.7)
|
i18n (1.8.8)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
mechanize (2.7.7)
|
mechanize (2.7.7)
|
||||||
domain_name (~> 0.5, >= 0.5.1)
|
domain_name (~> 0.5, >= 0.5.1)
|
||||||
@ -137,11 +137,11 @@ GEM
|
|||||||
simplecov_json_formatter (~> 0.1)
|
simplecov_json_formatter (~> 0.1)
|
||||||
simplecov-html (0.12.3)
|
simplecov-html (0.12.3)
|
||||||
simplecov_json_formatter (0.1.2)
|
simplecov_json_formatter (0.1.2)
|
||||||
sorbet (0.5.6262)
|
sorbet (0.5.6274)
|
||||||
sorbet-static (= 0.5.6262)
|
sorbet-static (= 0.5.6274)
|
||||||
sorbet-runtime (0.5.6262)
|
sorbet-runtime (0.5.6267)
|
||||||
sorbet-runtime-stub (0.2.0)
|
sorbet-runtime-stub (0.2.0)
|
||||||
sorbet-static (0.5.6262-universal-darwin-14)
|
sorbet-static (0.5.6274-universal-darwin-14)
|
||||||
spoom (1.0.7)
|
spoom (1.0.7)
|
||||||
colorize
|
colorize
|
||||||
sorbet (~> 0.5.5)
|
sorbet (~> 0.5.5)
|
||||||
|
|||||||
@ -169,6 +169,8 @@ module Cask
|
|||||||
def to_h
|
def to_h
|
||||||
{
|
{
|
||||||
"token" => token,
|
"token" => token,
|
||||||
|
"full_token" => full_name,
|
||||||
|
"tap" => tap&.name,
|
||||||
"name" => name,
|
"name" => name,
|
||||||
"desc" => desc,
|
"desc" => desc,
|
||||||
"homepage" => homepage,
|
"homepage" => homepage,
|
||||||
|
|||||||
@ -88,6 +88,8 @@ module Homebrew
|
|||||||
share/pypy3/*
|
share/pypy3/*
|
||||||
share/info/dir
|
share/info/dir
|
||||||
share/man/whatis
|
share/man/whatis
|
||||||
|
share/mime/*
|
||||||
|
texlive/*
|
||||||
].freeze
|
].freeze
|
||||||
|
|
||||||
def list_unbrewed
|
def list_unbrewed
|
||||||
|
|||||||
@ -14,6 +14,8 @@ module Homebrew
|
|||||||
description <<~EOS
|
description <<~EOS
|
||||||
Remove a tapped formula repository.
|
Remove a tapped formula repository.
|
||||||
EOS
|
EOS
|
||||||
|
switch "-f", "--force",
|
||||||
|
description: "Untap even if formulae or casks from this tap are currently installed."
|
||||||
|
|
||||||
named_args :tap, min: 1
|
named_args :tap, min: 1
|
||||||
end
|
end
|
||||||
|
|||||||
@ -17,7 +17,7 @@ module Homebrew
|
|||||||
|
|
||||||
def update_preinstall_header(args:)
|
def update_preinstall_header(args:)
|
||||||
@update_preinstall_header ||= begin
|
@update_preinstall_header ||= begin
|
||||||
ohai "Auto-updated Homebrew!" if args.preinstall?
|
ohai_stdout_or_stderr "Auto-updated Homebrew!" if args.preinstall?
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -50,8 +50,8 @@ module Homebrew
|
|||||||
print "\a"
|
print "\a"
|
||||||
|
|
||||||
# Use an extra newline and bold to avoid this being missed.
|
# Use an extra newline and bold to avoid this being missed.
|
||||||
ohai "Homebrew has enabled anonymous aggregate formula and cask analytics."
|
ohai_stdout_or_stderr "Homebrew has enabled anonymous aggregate formula and cask analytics."
|
||||||
puts <<~EOS
|
puts_stdout_or_stderr <<~EOS
|
||||||
#{Tty.bold}Read the analytics documentation (and how to opt-out) here:
|
#{Tty.bold}Read the analytics documentation (and how to opt-out) here:
|
||||||
#{Formatter.url("https://docs.brew.sh/Analytics")}#{Tty.reset}
|
#{Formatter.url("https://docs.brew.sh/Analytics")}#{Tty.reset}
|
||||||
No analytics have been recorded yet (nor will be during this `brew` run).
|
No analytics have been recorded yet (nor will be during this `brew` run).
|
||||||
@ -63,8 +63,8 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
|
|
||||||
if Settings.read("donationmessage") != "true" && !args.quiet?
|
if Settings.read("donationmessage") != "true" && !args.quiet?
|
||||||
ohai "Homebrew is run entirely by unpaid volunteers. Please consider donating:"
|
ohai_stdout_or_stderr "Homebrew is run entirely by unpaid volunteers. Please consider donating:"
|
||||||
puts " #{Formatter.url("https://github.com/Homebrew/brew#donations")}\n"
|
puts_stdout_or_stderr " #{Formatter.url("https://github.com/Homebrew/brew#donations")}\n"
|
||||||
|
|
||||||
# Consider the message possibly missed if not a TTY.
|
# Consider the message possibly missed if not a TTY.
|
||||||
Settings.write "donationmessage", true if $stdout.tty?
|
Settings.write "donationmessage", true if $stdout.tty?
|
||||||
@ -81,7 +81,8 @@ module Homebrew
|
|||||||
|
|
||||||
if initial_revision != current_revision
|
if initial_revision != current_revision
|
||||||
update_preinstall_header args: args
|
update_preinstall_header args: args
|
||||||
puts "Updated Homebrew from #{shorten_revision(initial_revision)} to #{shorten_revision(current_revision)}."
|
puts_stdout_or_stderr \
|
||||||
|
"Updated Homebrew from #{shorten_revision(initial_revision)} to #{shorten_revision(current_revision)}."
|
||||||
updated = true
|
updated = true
|
||||||
|
|
||||||
old_tag = Settings.read "latesttag"
|
old_tag = Settings.read "latesttag"
|
||||||
@ -119,13 +120,14 @@ module Homebrew
|
|||||||
|
|
||||||
unless updated_taps.empty?
|
unless updated_taps.empty?
|
||||||
update_preinstall_header args: args
|
update_preinstall_header args: args
|
||||||
puts "Updated #{updated_taps.count} #{"tap".pluralize(updated_taps.count)} (#{updated_taps.to_sentence})."
|
puts_stdout_or_stderr \
|
||||||
|
"Updated #{updated_taps.count} #{"tap".pluralize(updated_taps.count)} (#{updated_taps.to_sentence})."
|
||||||
updated = true
|
updated = true
|
||||||
end
|
end
|
||||||
|
|
||||||
if updated
|
if updated
|
||||||
if hub.empty?
|
if hub.empty?
|
||||||
puts "No changes to formulae." unless args.quiet?
|
puts_stdout_or_stderr "No changes to formulae." unless args.quiet?
|
||||||
else
|
else
|
||||||
hub.dump(updated_formula_report: !args.preinstall?)
|
hub.dump(updated_formula_report: !args.preinstall?)
|
||||||
hub.reporters.each(&:migrate_tap_migration)
|
hub.reporters.each(&:migrate_tap_migration)
|
||||||
@ -137,7 +139,7 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
puts if args.preinstall?
|
puts if args.preinstall?
|
||||||
elsif !args.preinstall? && !ENV["HOMEBREW_UPDATE_FAILED"]
|
elsif !args.preinstall? && !ENV["HOMEBREW_UPDATE_FAILED"]
|
||||||
puts "Already up-to-date." unless args.quiet?
|
puts_stdout_or_stderr "Already up-to-date." unless args.quiet?
|
||||||
end
|
end
|
||||||
|
|
||||||
Commands.rebuild_commands_completion_list
|
Commands.rebuild_commands_completion_list
|
||||||
@ -148,8 +150,8 @@ module Homebrew
|
|||||||
if failed_fetch_dirs.present?
|
if failed_fetch_dirs.present?
|
||||||
failed_fetch_taps = failed_fetch_dirs.map { |dir| Tap.from_path(dir) }
|
failed_fetch_taps = failed_fetch_dirs.map { |dir| Tap.from_path(dir) }
|
||||||
|
|
||||||
puts Formatter.headline "Some taps failed to update!", color: :red
|
ofail <<~EOS
|
||||||
puts <<~EOS
|
Some taps failed to update!
|
||||||
The following taps can not read their remote branches:
|
The following taps can not read their remote branches:
|
||||||
#{failed_fetch_taps.join("\n ")}
|
#{failed_fetch_taps.join("\n ")}
|
||||||
This is happening because the remote branch was renamed or deleted.
|
This is happening because the remote branch was renamed or deleted.
|
||||||
@ -159,14 +161,14 @@ module Homebrew
|
|||||||
|
|
||||||
return if new_repository_version.blank?
|
return if new_repository_version.blank?
|
||||||
|
|
||||||
ohai "Homebrew was updated to version #{new_repository_version}"
|
ohai_stdout_or_stderr "Homebrew was updated to version #{new_repository_version}"
|
||||||
if new_repository_version.split(".").last == "0"
|
if new_repository_version.split(".").last == "0"
|
||||||
puts <<~EOS
|
puts_stdout_or_stderr <<~EOS
|
||||||
More detailed release notes are available on the Homebrew Blog:
|
More detailed release notes are available on the Homebrew Blog:
|
||||||
#{Formatter.url("https://brew.sh/blog/#{new_repository_version}")}
|
#{Formatter.url("https://brew.sh/blog/#{new_repository_version}")}
|
||||||
EOS
|
EOS
|
||||||
else
|
else
|
||||||
puts <<~EOS
|
puts_stdout_or_stderr <<~EOS
|
||||||
The changelog can be found at:
|
The changelog can be found at:
|
||||||
#{Formatter.url("https://github.com/Homebrew/brew/releases/tag/#{new_repository_version}")}
|
#{Formatter.url("https://github.com/Homebrew/brew/releases/tag/#{new_repository_version}")}
|
||||||
EOS
|
EOS
|
||||||
@ -355,13 +357,13 @@ class Reporter
|
|||||||
|
|
||||||
new_tap = Tap.fetch(new_tap_name)
|
new_tap = Tap.fetch(new_tap_name)
|
||||||
new_tap.install unless new_tap.installed?
|
new_tap.install unless new_tap.installed?
|
||||||
ohai "#{name} has been moved to Homebrew.", <<~EOS
|
ohai_stdout_or_stderr "#{name} has been moved to Homebrew.", <<~EOS
|
||||||
To uninstall the cask, run:
|
To uninstall the cask, run:
|
||||||
brew uninstall --cask --force #{name}
|
brew uninstall --cask --force #{name}
|
||||||
EOS
|
EOS
|
||||||
next if (HOMEBREW_CELLAR/new_name.split("/").last).directory?
|
next if (HOMEBREW_CELLAR/new_name.split("/").last).directory?
|
||||||
|
|
||||||
ohai "Installing #{new_name}..."
|
ohai_stdout_or_stderr "Installing #{new_name}..."
|
||||||
system HOMEBREW_BREW_FILE, "install", new_full_name
|
system HOMEBREW_BREW_FILE, "install", new_full_name
|
||||||
begin
|
begin
|
||||||
unless Formulary.factory(new_full_name).keg_only?
|
unless Formulary.factory(new_full_name).keg_only?
|
||||||
@ -382,12 +384,12 @@ class Reporter
|
|||||||
# For formulae migrated to cask: Auto-install cask or provide install instructions.
|
# For formulae migrated to cask: Auto-install cask or provide install instructions.
|
||||||
if new_tap_name.start_with?("homebrew/cask")
|
if new_tap_name.start_with?("homebrew/cask")
|
||||||
if new_tap.installed? && (HOMEBREW_PREFIX/"Caskroom").directory?
|
if new_tap.installed? && (HOMEBREW_PREFIX/"Caskroom").directory?
|
||||||
ohai "#{name} has been moved to Homebrew Cask."
|
ohai_stdout_or_stderr "#{name} has been moved to Homebrew Cask."
|
||||||
ohai "brew unlink #{name}"
|
ohai_stdout_or_stderr "brew unlink #{name}"
|
||||||
system HOMEBREW_BREW_FILE, "unlink", name
|
system HOMEBREW_BREW_FILE, "unlink", name
|
||||||
ohai "brew cleanup"
|
ohai_stdout_or_stderr "brew cleanup"
|
||||||
system HOMEBREW_BREW_FILE, "cleanup"
|
system HOMEBREW_BREW_FILE, "cleanup"
|
||||||
ohai "brew install --cask #{new_name}"
|
ohai_stdout_or_stderr "brew install --cask #{new_name}"
|
||||||
system HOMEBREW_BREW_FILE, "install", "--cask", new_name
|
system HOMEBREW_BREW_FILE, "install", "--cask", new_name
|
||||||
ohai <<~EOS
|
ohai <<~EOS
|
||||||
#{name} has been moved to Homebrew Cask.
|
#{name} has been moved to Homebrew Cask.
|
||||||
@ -396,7 +398,7 @@ class Reporter
|
|||||||
brew uninstall --force #{name}
|
brew uninstall --force #{name}
|
||||||
EOS
|
EOS
|
||||||
else
|
else
|
||||||
ohai "#{name} has been moved to Homebrew Cask.", <<~EOS
|
ohai_stdout_or_stderr "#{name} has been moved to Homebrew Cask.", <<~EOS
|
||||||
To uninstall the formula and install the cask, run:
|
To uninstall the formula and install the cask, run:
|
||||||
brew uninstall --force #{name}
|
brew uninstall --force #{name}
|
||||||
brew tap #{new_tap_name}
|
brew tap #{new_tap_name}
|
||||||
@ -483,7 +485,10 @@ class ReporterHub
|
|||||||
dump_formula_report :M, "Updated Formulae"
|
dump_formula_report :M, "Updated Formulae"
|
||||||
else
|
else
|
||||||
updated = select_formula(:M).count
|
updated = select_formula(:M).count
|
||||||
ohai "Updated Formulae", "Updated #{updated} #{"formula".pluralize(updated)}." if updated.positive?
|
if updated.positive?
|
||||||
|
ohai_stdout_or_stderr "Updated Formulae",
|
||||||
|
"Updated #{updated} #{"formula".pluralize(updated)}."
|
||||||
|
end
|
||||||
end
|
end
|
||||||
dump_formula_report :R, "Renamed Formulae"
|
dump_formula_report :R, "Renamed Formulae"
|
||||||
dump_formula_report :D, "Deleted Formulae"
|
dump_formula_report :D, "Deleted Formulae"
|
||||||
@ -492,7 +497,10 @@ class ReporterHub
|
|||||||
dump_formula_report :MC, "Updated Casks"
|
dump_formula_report :MC, "Updated Casks"
|
||||||
else
|
else
|
||||||
updated = select_formula(:MC).count
|
updated = select_formula(:MC).count
|
||||||
ohai "Updated Casks", "Updated #{updated} #{"cask".pluralize(updated)}." if updated.positive?
|
if updated.positive?
|
||||||
|
ohai_stdout_or_stderr "Updated Casks",
|
||||||
|
"Updated #{updated} #{"cask".pluralize(updated)}."
|
||||||
|
end
|
||||||
end
|
end
|
||||||
dump_formula_report :DC, "Deleted Casks"
|
dump_formula_report :DC, "Deleted Casks"
|
||||||
end
|
end
|
||||||
|
|||||||
@ -78,6 +78,7 @@ end
|
|||||||
#
|
#
|
||||||
# @api private
|
# @api private
|
||||||
class CompilerSelector
|
class CompilerSelector
|
||||||
|
extend T::Sig
|
||||||
include CompilerConstants
|
include CompilerConstants
|
||||||
|
|
||||||
Compiler = Struct.new(:name, :version)
|
Compiler = Struct.new(:name, :version)
|
||||||
@ -109,11 +110,16 @@ class CompilerSelector
|
|||||||
raise CompilerSelectionError, formula
|
raise CompilerSelectionError, formula
|
||||||
end
|
end
|
||||||
|
|
||||||
|
sig { returns(String) }
|
||||||
|
def self.preferred_gcc
|
||||||
|
"gcc"
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def gnu_gcc_versions
|
def gnu_gcc_versions
|
||||||
# prioritize gcc version provided by gcc formula.
|
# prioritize gcc version provided by gcc formula.
|
||||||
v = Formulary.factory("gcc").version.to_s.slice(/\d+/)
|
v = Formulary.factory(CompilerSelector.preferred_gcc).version.to_s.slice(/\d+/)
|
||||||
GNU_GCC_VERSIONS - [v] + [v] # move the version to the end of the list
|
GNU_GCC_VERSIONS - [v] + [v] # move the version to the end of the list
|
||||||
rescue FormulaUnavailableError
|
rescue FormulaUnavailableError
|
||||||
GNU_GCC_VERSIONS
|
GNU_GCC_VERSIONS
|
||||||
@ -150,3 +156,5 @@ class CompilerSelector
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
require "extend/os/compilers"
|
||||||
|
|||||||
@ -74,7 +74,7 @@ end
|
|||||||
|
|
||||||
# This can be used to match any given option against the given list of arguments:
|
# This can be used to match any given option against the given list of arguments:
|
||||||
# * to add condition on interdependent options
|
# * to add condition on interdependent options
|
||||||
# * to ddd condition on mutually exclusive options
|
# * to add condition on mutually exclusive options
|
||||||
#
|
#
|
||||||
# Usage examples (for `completion -n '...'`):
|
# Usage examples (for `completion -n '...'`):
|
||||||
# * `__fish_brew_opt -s --long` returns true if _either_ `-s` _or_ `--long` is present
|
# * `__fish_brew_opt -s --long` returns true if _either_ `-s` _or_ `--long` is present
|
||||||
|
|||||||
@ -88,7 +88,7 @@ module Homebrew
|
|||||||
readme.read[/(Homebrew's \[Technical Steering Committee.*\.)/, 1]
|
readme.read[/(Homebrew's \[Technical Steering Committee.*\.)/, 1]
|
||||||
.gsub(/\[([^\]]+)\]\([^)]+\)/, '\1')
|
.gsub(/\[([^\]]+)\]\([^)]+\)/, '\1')
|
||||||
variables[:linux] =
|
variables[:linux] =
|
||||||
readme.read[%r{(Homebrew/brew's Linux maintainers .*\.)}, 1]
|
readme.read[/(Homebrew's Linux maintainers .*\.)/, 1]
|
||||||
.gsub(/\[([^\]]+)\]\([^)]+\)/, '\1')
|
.gsub(/\[([^\]]+)\]\([^)]+\)/, '\1')
|
||||||
variables[:maintainers] =
|
variables[:maintainers] =
|
||||||
readme.read[/(Homebrew's other current maintainers .*\.)/, 1]
|
readme.read[/(Homebrew's other current maintainers .*\.)/, 1]
|
||||||
|
|||||||
67
Library/Homebrew/dev-cmd/update-maintainers.rb
Normal file
67
Library/Homebrew/dev-cmd/update-maintainers.rb
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
# typed: false
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "cli/parser"
|
||||||
|
require "utils/github"
|
||||||
|
|
||||||
|
module Homebrew
|
||||||
|
extend T::Sig
|
||||||
|
|
||||||
|
module_function
|
||||||
|
|
||||||
|
sig { returns(CLI::Parser) }
|
||||||
|
def update_maintainers_args
|
||||||
|
Homebrew::CLI::Parser.new do
|
||||||
|
description <<~EOS
|
||||||
|
Update the list of maintainers in the `Homebrew/brew` README.
|
||||||
|
EOS
|
||||||
|
|
||||||
|
named_args :none
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def update_maintainers
|
||||||
|
update_maintainers_args.parse
|
||||||
|
|
||||||
|
# We assume that only public members wish to be included in the README
|
||||||
|
public_members = GitHub.public_member_usernames("Homebrew")
|
||||||
|
|
||||||
|
members = {
|
||||||
|
plc: GitHub.members_by_team("Homebrew", "plc"),
|
||||||
|
tsc: GitHub.members_by_team("Homebrew", "tsc"),
|
||||||
|
linux: GitHub.members_by_team("Homebrew", "linux"),
|
||||||
|
}
|
||||||
|
members[:other] = GitHub.members_by_team("Homebrew", "maintainers")
|
||||||
|
.except(*members.values.map(&:keys).flatten.uniq)
|
||||||
|
|
||||||
|
sentences = {}
|
||||||
|
members.each do |group, hash|
|
||||||
|
hash.slice!(*public_members)
|
||||||
|
hash.each { |login, name| hash[login] = "[#{name}](https://github.com/#{login})" }
|
||||||
|
sentences[group] = hash.values.sort.to_sentence
|
||||||
|
end
|
||||||
|
|
||||||
|
readme = HOMEBREW_REPOSITORY/"README.md"
|
||||||
|
|
||||||
|
content = readme.read
|
||||||
|
content.gsub!(/(Homebrew's \[Project Leadership Committee.*) is .*\./,
|
||||||
|
"\\1 is #{sentences[:plc]}.")
|
||||||
|
content.gsub!(/(Homebrew's \[Technical Steering Committee.*) is .*\./,
|
||||||
|
"\\1 is #{sentences[:tsc]}.")
|
||||||
|
content.gsub!(/(Homebrew's Linux maintainers are).*\./,
|
||||||
|
"\\1 #{sentences[:linux]}.")
|
||||||
|
content.gsub!(/(Homebrew's other current maintainers are).*\./,
|
||||||
|
"\\1 #{sentences[:other]}.")
|
||||||
|
|
||||||
|
File.open(readme, "w+") { |f| f.write(content) }
|
||||||
|
|
||||||
|
diff = system_command "git", args: [
|
||||||
|
"-C", HOMEBREW_REPOSITORY, "diff", "--exit-code", "README.md"
|
||||||
|
]
|
||||||
|
if diff.status.success?
|
||||||
|
puts "No changes to list of maintainers."
|
||||||
|
else
|
||||||
|
puts "List of maintainers updated in README."
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@ -872,7 +872,6 @@ module Homebrew
|
|||||||
"N/A"
|
"N/A"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
add_info "Java", SystemConfig.describe_java
|
|
||||||
|
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|||||||
@ -238,7 +238,6 @@ module SharedEnvExtension
|
|||||||
|
|
||||||
# Snow Leopard defines an NCURSES value the opposite of most distros.
|
# Snow Leopard defines an NCURSES value the opposite of most distros.
|
||||||
# @see https://bugs.python.org/issue6848
|
# @see https://bugs.python.org/issue6848
|
||||||
# Currently only used by aalib in core.
|
|
||||||
sig { void }
|
sig { void }
|
||||||
def ncurses_define
|
def ncurses_define
|
||||||
odeprecated "ENV.ncurses_define"
|
odeprecated "ENV.ncurses_define"
|
||||||
|
|||||||
@ -97,7 +97,7 @@ module Stdenv
|
|||||||
old
|
old
|
||||||
end
|
end
|
||||||
|
|
||||||
%w[O3 O2 O1 O0 Os].each do |opt|
|
%w[O3 O2 Os].each do |opt|
|
||||||
define_method opt do
|
define_method opt do
|
||||||
odisabled "ENV.#{opt}"
|
odisabled "ENV.#{opt}"
|
||||||
|
|
||||||
@ -106,6 +106,13 @@ module Stdenv
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
%w[O1 O0].each do |opt|
|
||||||
|
define_method opt do
|
||||||
|
send(:remove_from_cflags, /-O./)
|
||||||
|
send(:append_to_cflags, "-#{opt}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
sig { returns(T.any(String, Pathname)) }
|
sig { returns(T.any(String, Pathname)) }
|
||||||
def determine_cc
|
def determine_cc
|
||||||
s = super
|
s = super
|
||||||
|
|||||||
@ -344,7 +344,7 @@ module Superenv
|
|||||||
append_to_cccfg "O"
|
append_to_cccfg "O"
|
||||||
end
|
end
|
||||||
|
|
||||||
%w[O3 O2 O1 O0 Os].each do |opt|
|
%w[O3 O2 Os].each do |opt|
|
||||||
define_method opt do
|
define_method opt do
|
||||||
odisabled "ENV.#{opt}"
|
odisabled "ENV.#{opt}"
|
||||||
|
|
||||||
@ -352,6 +352,12 @@ module Superenv
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
%w[O1 O0].each do |opt|
|
||||||
|
define_method opt do
|
||||||
|
send(:[]=, "HOMEBREW_OPTIMIZATION_LEVEL", opt)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
sig { void }
|
sig { void }
|
||||||
def set_x11_env_if_installed
|
def set_x11_env_if_installed
|
||||||
odisabled "ENV.set_x11_env_if_installed"
|
odisabled "ENV.set_x11_env_if_installed"
|
||||||
|
|||||||
4
Library/Homebrew/extend/os/compilers.rb
Normal file
4
Library/Homebrew/extend/os/compilers.rb
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# typed: strict
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "extend/os/linux/compilers" if OS.linux?
|
||||||
11
Library/Homebrew/extend/os/linux/compilers.rb
Normal file
11
Library/Homebrew/extend/os/linux/compilers.rb
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# typed: strict
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class CompilerSelector
|
||||||
|
sig { returns(String) }
|
||||||
|
def self.preferred_gcc
|
||||||
|
# gcc-5 is the lowest gcc version we support on Linux.
|
||||||
|
# gcc-5 is the default gcc in Ubuntu 16.04 (used for our CI)
|
||||||
|
"gcc@5"
|
||||||
|
end
|
||||||
|
end
|
||||||
@ -1,6 +1,8 @@
|
|||||||
# typed: true
|
# typed: true
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "compilers"
|
||||||
|
|
||||||
class Keg
|
class Keg
|
||||||
def relocate_dynamic_linkage(relocation)
|
def relocate_dynamic_linkage(relocation)
|
||||||
# Patching the dynamic linker of glibc breaks it.
|
# Patching the dynamic linker of glibc breaks it.
|
||||||
@ -84,7 +86,7 @@ class Keg
|
|||||||
def self.bottle_dependencies
|
def self.bottle_dependencies
|
||||||
@bottle_dependencies ||= begin
|
@bottle_dependencies ||= begin
|
||||||
formulae = relocation_formulae
|
formulae = relocation_formulae
|
||||||
gcc = Formula["gcc"]
|
gcc = Formulary.factory(CompilerSelector.preferred_gcc)
|
||||||
if !Homebrew::EnvConfig.force_homebrew_on_linux? &&
|
if !Homebrew::EnvConfig.force_homebrew_on_linux? &&
|
||||||
DevelopmentTools.non_apple_gcc_version("gcc") < gcc.version.to_i
|
DevelopmentTools.non_apple_gcc_version("gcc") < gcc.version.to_i
|
||||||
formulae += gcc.recursive_dependencies.map(&:name)
|
formulae += gcc.recursive_dependencies.map(&:name)
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
# typed: true
|
# typed: true
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "compilers"
|
||||||
|
|
||||||
class LinkageChecker
|
class LinkageChecker
|
||||||
# Libraries provided by glibc and gcc.
|
# Libraries provided by glibc and gcc.
|
||||||
SYSTEM_LIBRARY_ALLOWLIST = %w[
|
SYSTEM_LIBRARY_ALLOWLIST = %w[
|
||||||
@ -30,6 +32,6 @@ class LinkageChecker
|
|||||||
@unwanted_system_dylibs = @system_dylibs.reject do |s|
|
@unwanted_system_dylibs = @system_dylibs.reject do |s|
|
||||||
SYSTEM_LIBRARY_ALLOWLIST.include? File.basename(s)
|
SYSTEM_LIBRARY_ALLOWLIST.include? File.basename(s)
|
||||||
end
|
end
|
||||||
@undeclared_deps -= ["gcc", "glibc"]
|
@undeclared_deps -= [CompilerSelector.preferred_gcc, "glibc"]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
# typed: true
|
# typed: true
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "compilers"
|
||||||
require "os/linux/glibc"
|
require "os/linux/glibc"
|
||||||
require "system_command"
|
require "system_command"
|
||||||
|
|
||||||
@ -46,7 +47,7 @@ module SystemConfig
|
|||||||
out.puts "Host glibc: #{host_glibc_version}"
|
out.puts "Host glibc: #{host_glibc_version}"
|
||||||
out.puts "/usr/bin/gcc: #{host_gcc_version}"
|
out.puts "/usr/bin/gcc: #{host_gcc_version}"
|
||||||
out.puts "/usr/bin/ruby: #{host_ruby_version}" if RUBY_PATH != HOST_RUBY_PATH
|
out.puts "/usr/bin/ruby: #{host_ruby_version}" if RUBY_PATH != HOST_RUBY_PATH
|
||||||
["glibc", "gcc", "xorg"].each do |f|
|
["glibc", CompilerSelector.preferred_gcc, "xorg"].each do |f|
|
||||||
out.puts "#{f}: #{formula_linked_version(f)}"
|
out.puts "#{f}: #{formula_linked_version(f)}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -42,8 +42,20 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
|
|
||||||
class Checks
|
class Checks
|
||||||
undef fatal_build_from_source_checks, fatal_setup_build_environment_checks,
|
undef fatal_preinstall_checks, fatal_build_from_source_checks,
|
||||||
supported_configuration_checks, build_from_source_checks
|
fatal_setup_build_environment_checks, supported_configuration_checks,
|
||||||
|
build_from_source_checks
|
||||||
|
|
||||||
|
def fatal_preinstall_checks
|
||||||
|
checks = %w[
|
||||||
|
check_access_directories
|
||||||
|
]
|
||||||
|
|
||||||
|
# We need the developer tools for `codesign`.
|
||||||
|
checks << "check_for_installed_developer_tools" if Hardware::CPU.arm?
|
||||||
|
|
||||||
|
checks.freeze
|
||||||
|
end
|
||||||
|
|
||||||
def fatal_build_from_source_checks
|
def fatal_build_from_source_checks
|
||||||
%w[
|
%w[
|
||||||
@ -405,6 +417,7 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
|
|
||||||
def check_if_supported_sdk_available
|
def check_if_supported_sdk_available
|
||||||
|
return unless DevelopmentTools.installed?
|
||||||
return unless MacOS.sdk_root_needed?
|
return unless MacOS.sdk_root_needed?
|
||||||
return if MacOS.sdk
|
return if MacOS.sdk
|
||||||
|
|
||||||
|
|||||||
@ -1766,6 +1766,7 @@ class Formula
|
|||||||
hsh = {
|
hsh = {
|
||||||
"name" => name,
|
"name" => name,
|
||||||
"full_name" => full_name,
|
"full_name" => full_name,
|
||||||
|
"tap" => tap&.name,
|
||||||
"oldname" => oldname,
|
"oldname" => oldname,
|
||||||
"aliases" => aliases.sort,
|
"aliases" => aliases.sort,
|
||||||
"versioned_formulae" => versioned_formulae.map(&:name),
|
"versioned_formulae" => versioned_formulae.map(&:name),
|
||||||
@ -1821,25 +1822,7 @@ class Formula
|
|||||||
"revision" => stable.specs[:revision],
|
"revision" => stable.specs[:revision],
|
||||||
}
|
}
|
||||||
|
|
||||||
if bottle_defined?
|
hsh["bottle"]["stable"] = bottle_hash if bottle_defined?
|
||||||
bottle_spec = stable.bottle_specification
|
|
||||||
bottle_info = {
|
|
||||||
"rebuild" => bottle_spec.rebuild,
|
|
||||||
"cellar" => (cellar = bottle_spec.cellar).is_a?(Symbol) ? cellar.inspect : cellar,
|
|
||||||
"prefix" => bottle_spec.prefix,
|
|
||||||
"root_url" => bottle_spec.root_url,
|
|
||||||
}
|
|
||||||
bottle_info["files"] = {}
|
|
||||||
bottle_spec.collector.each_key do |os|
|
|
||||||
bottle_url = "#{bottle_spec.root_url}/#{Bottle::Filename.create(self, os, bottle_spec.rebuild).bintray}"
|
|
||||||
checksum = bottle_spec.collector[os][:checksum]
|
|
||||||
bottle_info["files"][os] = {
|
|
||||||
"url" => bottle_url,
|
|
||||||
"sha256" => checksum.hexdigest,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
hsh["bottle"]["stable"] = bottle_info
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
hsh["options"] = options.map do |opt|
|
hsh["options"] = options.map do |opt|
|
||||||
@ -1873,6 +1856,27 @@ class Formula
|
|||||||
hsh
|
hsh
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns the bottle information for a formula
|
||||||
|
def bottle_hash
|
||||||
|
bottle_spec = stable.bottle_specification
|
||||||
|
hash = {
|
||||||
|
"rebuild" => bottle_spec.rebuild,
|
||||||
|
"cellar" => (cellar = bottle_spec.cellar).is_a?(Symbol) ? cellar.inspect : cellar,
|
||||||
|
"prefix" => bottle_spec.prefix,
|
||||||
|
"root_url" => bottle_spec.root_url,
|
||||||
|
"files" => {},
|
||||||
|
}
|
||||||
|
bottle_spec.collector.each_key do |os|
|
||||||
|
bottle_url = "#{bottle_spec.root_url}/#{Bottle::Filename.create(self, os, bottle_spec.rebuild).bintray}"
|
||||||
|
checksum = bottle_spec.collector[os][:checksum]
|
||||||
|
hash["files"][os] = {
|
||||||
|
"url" => bottle_url,
|
||||||
|
"sha256" => checksum.hexdigest,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
hash
|
||||||
|
end
|
||||||
|
|
||||||
# @private
|
# @private
|
||||||
def fetch(verify_download_integrity: true)
|
def fetch(verify_download_integrity: true)
|
||||||
active_spec.fetch(verify_download_integrity: verify_download_integrity)
|
active_spec.fetch(verify_download_integrity: verify_download_integrity)
|
||||||
@ -2447,11 +2451,11 @@ class Formula
|
|||||||
#
|
#
|
||||||
# <pre>bottle do
|
# <pre>bottle do
|
||||||
# root_url "https://example.com" # Optional root to calculate bottle URLs.
|
# root_url "https://example.com" # Optional root to calculate bottle URLs.
|
||||||
# cellar "/opt/homebrew/Cellar" # Optional HOMEBREW_CELLAR in which the bottles were built.
|
|
||||||
# rebuild 1 # Marks the old bottle as outdated without bumping the version/revision of the formula.
|
# rebuild 1 # Marks the old bottle as outdated without bumping the version/revision of the formula.
|
||||||
# sha256 "ef65c759c5097a36323fa9c77756468649e8d1980a3a4e05695c05e39568967c" => :catalina
|
# # Optionally specify the HOMEBREW_CELLAR in which the bottles were built.
|
||||||
# sha256 "28f4090610946a4eb207df102d841de23ced0d06ba31cb79e040d883906dcd4f" => :mojave
|
# sha256 cellar: "/brew/Cellar", catalina: "ef65c759c5097a36323fa9c77756468649e8d1980a3a4e05695c05e39568967c"
|
||||||
# sha256 "91dd0caca9bd3f38c439d5a7b6f68440c4274945615fae035ff0a369264b8a2f" => :high_sierra
|
# sha256 cellar: :any, mojave: "28f4090610946a4eb207df102d841de23ced0d06ba31cb79e040d883906dcd4f"
|
||||||
|
# sha256 high_sierra: "91dd0caca9bd3f38c439d5a7b6f68440c4274945615fae035ff0a369264b8a2f"
|
||||||
# end</pre>
|
# end</pre>
|
||||||
#
|
#
|
||||||
# Homebrew maintainers aim to bottle all formulae that require compilation.
|
# Homebrew maintainers aim to bottle all formulae that require compilation.
|
||||||
|
|||||||
@ -399,7 +399,7 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
|
|
||||||
def audit_github_repository_archived
|
def audit_github_repository_archived
|
||||||
return if formula.deprecated?
|
return if formula.deprecated? || formula.disabled?
|
||||||
|
|
||||||
user, repo = get_repo_data(%r{https?://github\.com/([^/]+)/([^/]+)/?.*}) if @online
|
user, repo = get_repo_data(%r{https?://github\.com/([^/]+)/([^/]+)/?.*}) if @online
|
||||||
return if user.blank?
|
return if user.blank?
|
||||||
@ -411,7 +411,7 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
|
|
||||||
def audit_gitlab_repository_archived
|
def audit_gitlab_repository_archived
|
||||||
return if formula.deprecated?
|
return if formula.deprecated? || formula.disabled?
|
||||||
|
|
||||||
user, repo = get_repo_data(%r{https?://gitlab\.com/([^/]+)/([^/]+)/?.*}) if @online
|
user, repo = get_repo_data(%r{https?://gitlab\.com/([^/]+)/([^/]+)/?.*}) if @online
|
||||||
return if user.blank?
|
return if user.blank?
|
||||||
|
|||||||
@ -14,17 +14,18 @@ if !ENV["HOMEBREW_NO_BOOTSNAP"] &&
|
|||||||
begin
|
begin
|
||||||
require "bootsnap"
|
require "bootsnap"
|
||||||
rescue LoadError
|
rescue LoadError
|
||||||
raise if ENV["HOMEBREW_BOOTSNAP_RETRY"]
|
unless ENV["HOMEBREW_BOOTSNAP_RETRY"]
|
||||||
|
|
||||||
require "utils/gems"
|
require "utils/gems"
|
||||||
Homebrew.install_bundler_gems!
|
Homebrew.install_bundler_gems!
|
||||||
|
|
||||||
ENV["HOMEBREW_BOOTSNAP_RETRY"] = "1"
|
ENV["HOMEBREW_BOOTSNAP_RETRY"] = "1"
|
||||||
exec ENV["HOMEBREW_BREW_FILE"], *ARGV
|
exec ENV["HOMEBREW_BREW_FILE"], *ARGV
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
ENV.delete("HOMEBREW_BOOTSNAP_RETRY")
|
ENV.delete("HOMEBREW_BOOTSNAP_RETRY")
|
||||||
|
|
||||||
|
if defined?(Bootsnap)
|
||||||
cache = ENV["HOMEBREW_CACHE"] || ENV["HOMEBREW_DEFAULT_CACHE"]
|
cache = ENV["HOMEBREW_CACHE"] || ENV["HOMEBREW_DEFAULT_CACHE"]
|
||||||
# Can't use .blank? here because we haven't required active_support yet.
|
# Can't use .blank? here because we haven't required active_support yet.
|
||||||
raise "Needs HOMEBREW_CACHE or HOMEBREW_DEFAULT_CACHE!" if cache.nil? || cache.empty? # rubocop:disable Rails/Blank
|
raise "Needs HOMEBREW_CACHE or HOMEBREW_DEFAULT_CACHE!" if cache.nil? || cache.empty? # rubocop:disable Rails/Blank
|
||||||
@ -35,4 +36,7 @@ if !ENV["HOMEBREW_NO_BOOTSNAP"] &&
|
|||||||
compile_cache_iseq: true,
|
compile_cache_iseq: true,
|
||||||
compile_cache_yaml: true,
|
compile_cache_yaml: true,
|
||||||
)
|
)
|
||||||
|
else
|
||||||
|
$stderr.puts "Error: HOMEBREW_BOOTSNAP could not `require \"bootsnap\"`!\n\n"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -352,11 +352,11 @@ module Homebrew
|
|||||||
|
|
||||||
case formula_or_cask
|
case formula_or_cask
|
||||||
when Formula
|
when Formula
|
||||||
urls << formula_or_cask.head.url if formula_or_cask.head
|
|
||||||
if formula_or_cask.stable
|
if formula_or_cask.stable
|
||||||
urls << formula_or_cask.stable.url
|
urls << formula_or_cask.stable.url
|
||||||
urls.concat(formula_or_cask.stable.mirrors)
|
urls.concat(formula_or_cask.stable.mirrors)
|
||||||
end
|
end
|
||||||
|
urls << formula_or_cask.head.url if formula_or_cask.head
|
||||||
urls << formula_or_cask.homepage if formula_or_cask.homepage
|
urls << formula_or_cask.homepage if formula_or_cask.homepage
|
||||||
when Cask::Cask
|
when Cask::Cask
|
||||||
urls << formula_or_cask.appcast.to_s if formula_or_cask.appcast
|
urls << formula_or_cask.appcast.to_s if formula_or_cask.appcast
|
||||||
|
|||||||
@ -20,10 +20,10 @@ module OS
|
|||||||
# This may be a beta version for a beta macOS.
|
# This may be a beta version for a beta macOS.
|
||||||
sig { returns(String) }
|
sig { returns(String) }
|
||||||
def latest_version
|
def latest_version
|
||||||
latest_stable = "12.3"
|
latest_stable = "12.4"
|
||||||
case MacOS.version
|
case MacOS.version
|
||||||
when "11" then latest_stable
|
when "11" then latest_stable
|
||||||
when "10.15" then "12.3"
|
when "10.15" then "12.4"
|
||||||
when "10.14" then "11.3.1"
|
when "10.14" then "11.3.1"
|
||||||
when "10.13" then "10.1"
|
when "10.13" then "10.1"
|
||||||
when "10.12" then "9.2"
|
when "10.12" then "9.2"
|
||||||
@ -280,7 +280,7 @@ module OS
|
|||||||
sig { returns(String) }
|
sig { returns(String) }
|
||||||
def latest_clang_version
|
def latest_clang_version
|
||||||
case MacOS.version
|
case MacOS.version
|
||||||
when "11", "10.15" then "1200.0.32.27"
|
when "11", "10.15" then "1200.0.32.29"
|
||||||
when "10.14" then "1100.0.33.17"
|
when "10.14" then "1100.0.33.17"
|
||||||
when "10.13" then "1000.10.44.2"
|
when "10.13" then "1000.10.44.2"
|
||||||
when "10.12" then "900.0.39.2"
|
when "10.12" then "900.0.39.2"
|
||||||
|
|||||||
@ -110,7 +110,7 @@ module RuboCop
|
|||||||
end
|
end
|
||||||
|
|
||||||
def check_on_os_block_content(component_precedence_list, on_os_block)
|
def check_on_os_block_content(component_precedence_list, on_os_block)
|
||||||
on_os_allowed_methods = %w[depends_on patch resource deprecate! disable!]
|
on_os_allowed_methods = %w[depends_on patch resource deprecate! disable! conflicts_with]
|
||||||
_, offensive_node = check_order(component_precedence_list, on_os_block.body)
|
_, offensive_node = check_order(component_precedence_list, on_os_block.body)
|
||||||
component_problem(*offensive_node) if offensive_node
|
component_problem(*offensive_node) if offensive_node
|
||||||
child_nodes = on_os_block.body.begin_type? ? on_os_block.body.child_nodes : [on_os_block.body]
|
child_nodes = on_os_block.body.begin_type? ? on_os_block.body.child_nodes : [on_os_block.body]
|
||||||
|
|||||||
@ -371,6 +371,14 @@ class BottleSpecification
|
|||||||
end
|
end
|
||||||
|
|
||||||
def cellar(val = nil)
|
def cellar(val = nil)
|
||||||
|
# TODO: (3.1) uncomment to deprecate the old bottle syntax
|
||||||
|
# if val.present?
|
||||||
|
# odeprecated(
|
||||||
|
# "`cellar` in a bottle block",
|
||||||
|
# "`brew style --fix` on the formula to update the style or use `sha256` with a `cellar:` argument",
|
||||||
|
# )
|
||||||
|
# end
|
||||||
|
|
||||||
return collector.dig(Utils::Bottles.tag, :cellar) || @all_tags_cellar if val.nil?
|
return collector.dig(Utils::Bottles.tag, :cellar) || @all_tags_cellar if val.nil?
|
||||||
|
|
||||||
@all_tags_cellar = val
|
@all_tags_cellar = val
|
||||||
@ -422,6 +430,14 @@ class BottleSpecification
|
|||||||
digest, tag = hash.find do |key, value|
|
digest, tag = hash.find do |key, value|
|
||||||
key.is_a?(String) && value.is_a?(Symbol) && key.match?(sha256_regex)
|
key.is_a?(String) && value.is_a?(Symbol) && key.match?(sha256_regex)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# TODO: (3.1) uncomment to deprecate the old bottle syntax
|
||||||
|
# if digest && tag
|
||||||
|
# odeprecated(
|
||||||
|
# '`sha256 "digest" => :tag` in a bottle block',
|
||||||
|
# '`brew style --fix` on the formula to update the style or use `sha256 tag: "digest"`',
|
||||||
|
# )
|
||||||
|
# end
|
||||||
end
|
end
|
||||||
|
|
||||||
cellar ||= all_tags_cellar
|
cellar ||= all_tags_cellar
|
||||||
@ -435,7 +451,10 @@ class BottleSpecification
|
|||||||
|
|
||||||
def checksums
|
def checksums
|
||||||
tags = collector.keys.sort_by do |tag|
|
tags = collector.keys.sort_by do |tag|
|
||||||
"#{OS::Mac::Version.from_symbol(tag)}_#{tag}"
|
version = OS::Mac::Version.from_symbol(tag)
|
||||||
|
# Give arm64 bottles a higher priority so they are first
|
||||||
|
priority = version.arch == :arm64 ? "2" : "1"
|
||||||
|
"#{priority}.#{version}_#{tag}"
|
||||||
rescue MacOSVersionError
|
rescue MacOSVersionError
|
||||||
# Sort non-MacOS tags below MacOS tags.
|
# Sort non-MacOS tags below MacOS tags.
|
||||||
"0.#{tag}"
|
"0.#{tag}"
|
||||||
|
|||||||
8
Library/Homebrew/sorbet/rbi/gems/codecov@0.4.3.rbi
Normal file
8
Library/Homebrew/sorbet/rbi/gems/codecov@0.4.3.rbi
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# DO NOT EDIT MANUALLY
|
||||||
|
# This is an autogenerated file for types exported from the `codecov` gem.
|
||||||
|
# Please instead update this file by running `tapioca sync`.
|
||||||
|
|
||||||
|
# typed: true
|
||||||
|
|
||||||
|
# THIS IS AN EMPTY RBI FILE.
|
||||||
|
# see https://github.com/Shopify/tapioca/blob/master/README.md#manual-gem-requires
|
||||||
@ -2999,6 +2999,8 @@ end
|
|||||||
module Bootsnap::LoadPathCache::PathScanner
|
module Bootsnap::LoadPathCache::PathScanner
|
||||||
def self.call(path); end
|
def self.call(path); end
|
||||||
|
|
||||||
|
def self.os_path(path); end
|
||||||
|
|
||||||
def self.walk(absolute_dir_path, relative_dir_path, &block); end
|
def self.walk(absolute_dir_path, relative_dir_path, &block); end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -3062,6 +3064,8 @@ module Bootsnap
|
|||||||
|
|
||||||
def self.instrumentation=(callback); end
|
def self.instrumentation=(callback); end
|
||||||
|
|
||||||
|
def self.iseq_cache_supported?(); end
|
||||||
|
|
||||||
def self.log!(); end
|
def self.log!(); end
|
||||||
|
|
||||||
def self.logger(); end
|
def self.logger(); end
|
||||||
@ -6111,6 +6115,11 @@ class CompilerSelector::Compiler
|
|||||||
def self.members(); end
|
def self.members(); end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class CompilerSelector
|
||||||
|
extend ::T::Private::Methods::MethodHooks
|
||||||
|
extend ::T::Private::Methods::SingletonMethodHooks
|
||||||
|
end
|
||||||
|
|
||||||
class Concurrent::Promises::AbstractEventFuture
|
class Concurrent::Promises::AbstractEventFuture
|
||||||
include ::Concurrent::Promises::InternalStates
|
include ::Concurrent::Promises::InternalStates
|
||||||
end
|
end
|
||||||
@ -29490,7 +29499,7 @@ end
|
|||||||
class Time
|
class Time
|
||||||
def self.===(other); end
|
def self.===(other); end
|
||||||
|
|
||||||
def self.at_with_coercion(*args); end
|
def self.at_with_coercion(*args, **kwargs); end
|
||||||
|
|
||||||
def self.at_without_coercion(*_); end
|
def self.at_without_coercion(*_); end
|
||||||
|
|
||||||
|
|||||||
@ -113,16 +113,6 @@ module SystemConfig
|
|||||||
`uname -m`.chomp
|
`uname -m`.chomp
|
||||||
end
|
end
|
||||||
|
|
||||||
sig { returns(String) }
|
|
||||||
def describe_java
|
|
||||||
return "N/A" unless which "java"
|
|
||||||
|
|
||||||
_, err, status = system_command("java", args: ["-version"], print_stderr: false)
|
|
||||||
return "N/A" unless status.success?
|
|
||||||
|
|
||||||
err[/java version "([\d._]+)"/, 1] || "N/A"
|
|
||||||
end
|
|
||||||
|
|
||||||
sig { returns(String) }
|
sig { returns(String) }
|
||||||
def describe_git
|
def describe_git
|
||||||
return "N/A" unless Utils::Git.available?
|
return "N/A" unless Utils::Git.available?
|
||||||
@ -132,7 +122,7 @@ module SystemConfig
|
|||||||
|
|
||||||
sig { returns(String) }
|
sig { returns(String) }
|
||||||
def describe_curl
|
def describe_curl
|
||||||
out, = system_command(curl_executable, args: ["--version"])
|
out, = system_command(curl_executable, args: ["--version"], verbose: false)
|
||||||
|
|
||||||
if /^curl (?<curl_version>[\d.]+)/ =~ out
|
if /^curl (?<curl_version>[\d.]+)/ =~ out
|
||||||
"#{curl_version} => #{curl_executable}"
|
"#{curl_version} => #{curl_executable}"
|
||||||
@ -194,7 +184,6 @@ module SystemConfig
|
|||||||
f.puts "Clang: #{describe_clang}"
|
f.puts "Clang: #{describe_clang}"
|
||||||
f.puts "Git: #{describe_git}"
|
f.puts "Git: #{describe_git}"
|
||||||
f.puts "Curl: #{describe_curl}"
|
f.puts "Curl: #{describe_curl}"
|
||||||
f.puts "Java: #{describe_java}" if describe_java != "N/A"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def dump_verbose_config(f = $stdout)
|
def dump_verbose_config(f = $stdout)
|
||||||
|
|||||||
@ -296,6 +296,10 @@ class Tap
|
|||||||
|
|
||||||
$stderr.ohai "Tapping #{name}" unless quiet
|
$stderr.ohai "Tapping #{name}" unless quiet
|
||||||
args = %W[clone #{requested_remote} #{path}]
|
args = %W[clone #{requested_remote} #{path}]
|
||||||
|
|
||||||
|
# Override possible user configs like:
|
||||||
|
# git config --global clone.defaultRemoteName notorigin
|
||||||
|
args << "--origin=origin"
|
||||||
args << "--depth=1" unless full_clone
|
args << "--depth=1" unless full_clone
|
||||||
args << "-q" if quiet
|
args << "-q" if quiet
|
||||||
|
|
||||||
|
|||||||
@ -84,10 +84,10 @@ describe Cask::Cmd::List, :cask do
|
|||||||
end
|
end
|
||||||
|
|
||||||
describe "lists json" do
|
describe "lists json" do
|
||||||
let(:casks) { ["local-caffeine", "local-transmission"] }
|
let(:casks) { ["local-caffeine", "local-transmission", "third-party/tap/third-party-cask"] }
|
||||||
let(:expected_output) {
|
let(:expected_output) {
|
||||||
<<~EOS
|
<<~EOS
|
||||||
[{"token":"local-caffeine","name":[],"desc":null,"homepage":"https://brew.sh/","url":"file:///usr/local/Homebrew/Library/Homebrew/test/support/fixtures/cask/caffeine.zip","appcast":null,"version":"1.2.3","installed":"1.2.3","outdated":false,"sha256":"67cdb8a02803ef37fdbf7e0be205863172e41a561ca446cd84f0d7ab35a99d94","artifacts":[["Caffeine.app"]],"caveats":null,"depends_on":{},"conflicts_with":null,"container":null,"auto_updates":null},{"token":"local-transmission","name":["Transmission"],"desc":"BitTorrent client","homepage":"https://transmissionbt.com/","url":"file:///usr/local/Homebrew/Library/Homebrew/test/support/fixtures/cask/transmission-2.61.dmg","appcast":null,"version":"2.61","installed":"2.61","outdated":false,"sha256":"e44ffa103fbf83f55c8d0b1bea309a43b2880798dae8620b1ee8da5e1095ec68","artifacts":[["Transmission.app"]],"caveats":null,"depends_on":{},"conflicts_with":null,"container":null,"auto_updates":null}]
|
[{"token":"local-caffeine","full_token":"local-caffeine","tap":"homebrew/cask","name":[],"desc":null,"homepage":"https://brew.sh/","url":"file:///usr/local/Homebrew/Library/Homebrew/test/support/fixtures/cask/caffeine.zip","appcast":null,"version":"1.2.3","installed":"1.2.3","outdated":false,"sha256":"67cdb8a02803ef37fdbf7e0be205863172e41a561ca446cd84f0d7ab35a99d94","artifacts":[["Caffeine.app"]],"caveats":null,"depends_on":{},"conflicts_with":null,"container":null,"auto_updates":null},{"token":"local-transmission","full_token":"local-transmission","tap":"homebrew/cask","name":["Transmission"],"desc":"BitTorrent client","homepage":"https://transmissionbt.com/","url":"file:///usr/local/Homebrew/Library/Homebrew/test/support/fixtures/cask/transmission-2.61.dmg","appcast":null,"version":"2.61","installed":"2.61","outdated":false,"sha256":"e44ffa103fbf83f55c8d0b1bea309a43b2880798dae8620b1ee8da5e1095ec68","artifacts":[["Transmission.app"]],"caveats":null,"depends_on":{},"conflicts_with":null,"container":null,"auto_updates":null},{"token":"third-party-cask","full_token":"third-party/tap/third-party-cask","tap":"third-party/tap","name":[],"desc":null,"homepage":"https://brew.sh/","url":"https://brew.sh/ThirdParty.dmg","appcast":null,"version":"1.2.3","installed":"1.2.3","outdated":false,"sha256":"8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b","artifacts":[["ThirdParty.app"]],"caveats":null,"depends_on":{},"conflicts_with":null,"container":null,"auto_updates":null}]
|
||||||
EOS
|
EOS
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,7 +103,7 @@ describe Cask::Cmd::List, :cask do
|
|||||||
|
|
||||||
it "of given Casks" do
|
it "of given Casks" do
|
||||||
expect {
|
expect {
|
||||||
described_class.run("--json", "local-caffeine", "local-transmission")
|
described_class.run("--json", "local-caffeine", "local-transmission", "third-party/tap/third-party-cask")
|
||||||
}.to output(expected_output).to_stdout
|
}.to output(expected_output).to_stdout
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -22,6 +22,7 @@ describe CompilerSelector do
|
|||||||
case name
|
case name
|
||||||
when "gcc-7" then Version.create("7.1")
|
when "gcc-7" then Version.create("7.1")
|
||||||
when "gcc-6" then Version.create("6.1")
|
when "gcc-6" then Version.create("6.1")
|
||||||
|
when "gcc-5" then Version.create("5.1")
|
||||||
else Version::NULL
|
else Version::NULL
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -42,16 +43,31 @@ describe CompilerSelector do
|
|||||||
expect(selector.compiler).to eq("gcc-7")
|
expect(selector.compiler).to eq("gcc-7")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns gcc-6 if gcc formula offers gcc-6" do
|
it "returns gcc-6 if gcc formula offers gcc-6 on mac", :needs_macos do
|
||||||
software_spec.fails_with(:clang)
|
software_spec.fails_with(:clang)
|
||||||
allow(Formulary).to receive(:factory).with("gcc").and_return(double(version: "6.0"))
|
allow(Formulary).to receive(:factory).with("gcc").and_return(double(version: "6.0"))
|
||||||
expect(selector.compiler).to eq("gcc-6")
|
expect(selector.compiler).to eq("gcc-6")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "returns gcc-5 if gcc formula offers gcc-5 on linux", :needs_linux do
|
||||||
|
software_spec.fails_with(:clang)
|
||||||
|
allow(Formulary).to receive(:factory).with("gcc@5").and_return(double(version: "5.0"))
|
||||||
|
expect(selector.compiler).to eq("gcc-5")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns gcc-6 if gcc formula offers gcc-6 and fails with gcc-5 and gcc-7 on linux", :needs_linux do
|
||||||
|
software_spec.fails_with(:clang)
|
||||||
|
software_spec.fails_with(gcc: "5")
|
||||||
|
software_spec.fails_with(gcc: "7")
|
||||||
|
allow(Formulary).to receive(:factory).with("gcc@5").and_return(double(version: "5.0"))
|
||||||
|
expect(selector.compiler).to eq("gcc-6")
|
||||||
|
end
|
||||||
|
|
||||||
it "raises an error when gcc or llvm is missing" do
|
it "raises an error when gcc or llvm is missing" do
|
||||||
software_spec.fails_with(:clang)
|
software_spec.fails_with(:clang)
|
||||||
software_spec.fails_with(gcc: "7")
|
software_spec.fails_with(gcc: "7")
|
||||||
software_spec.fails_with(gcc: "6")
|
software_spec.fails_with(gcc: "6")
|
||||||
|
software_spec.fails_with(gcc: "5")
|
||||||
|
|
||||||
expect { selector.compiler }.to raise_error(CompilerSelectionError)
|
expect { selector.compiler }.to raise_error(CompilerSelectionError)
|
||||||
end
|
end
|
||||||
|
|||||||
@ -50,6 +50,17 @@ describe "brew bottle" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
Pathname("#{TEST_TMPDIR}/testball-1.0.arm64_big_sur.bottle.json").write stub_hash(
|
||||||
|
name: "testball",
|
||||||
|
version: "1.0",
|
||||||
|
path: "#{core_tap.path}/Formula/testball.rb",
|
||||||
|
cellar: "any_skip_relocation",
|
||||||
|
os: "arm64_big_sur",
|
||||||
|
filename: "testball-1.0.arm64_big_sur.bottle.tar.gz",
|
||||||
|
local_filename: "testball--1.0.arm64_big_sur.bottle.tar.gz",
|
||||||
|
sha256: "8f9aecd233463da6a4ea55f5f88fc5841718c013f3e2a7941350d6130f1dc149",
|
||||||
|
)
|
||||||
|
|
||||||
Pathname("#{TEST_TMPDIR}/testball-1.0.big_sur.bottle.json").write stub_hash(
|
Pathname("#{TEST_TMPDIR}/testball-1.0.big_sur.bottle.json").write stub_hash(
|
||||||
name: "testball",
|
name: "testball",
|
||||||
version: "1.0",
|
version: "1.0",
|
||||||
@ -74,6 +85,7 @@ describe "brew bottle" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
after do
|
after do
|
||||||
|
FileUtils.rm_f "#{TEST_TMPDIR}/testball-1.0.arm64_big_sur.bottle.json"
|
||||||
FileUtils.rm_f "#{TEST_TMPDIR}/testball-1.0.catalina.bottle.json"
|
FileUtils.rm_f "#{TEST_TMPDIR}/testball-1.0.catalina.bottle.json"
|
||||||
FileUtils.rm_f "#{TEST_TMPDIR}/testball-1.0.big_sur.bottle.json"
|
FileUtils.rm_f "#{TEST_TMPDIR}/testball-1.0.big_sur.bottle.json"
|
||||||
end
|
end
|
||||||
@ -90,12 +102,14 @@ describe "brew bottle" do
|
|||||||
brew "bottle",
|
brew "bottle",
|
||||||
"--merge",
|
"--merge",
|
||||||
"--write",
|
"--write",
|
||||||
|
"#{TEST_TMPDIR}/testball-1.0.arm64_big_sur.bottle.json",
|
||||||
"#{TEST_TMPDIR}/testball-1.0.big_sur.bottle.json",
|
"#{TEST_TMPDIR}/testball-1.0.big_sur.bottle.json",
|
||||||
"#{TEST_TMPDIR}/testball-1.0.catalina.bottle.json"
|
"#{TEST_TMPDIR}/testball-1.0.catalina.bottle.json"
|
||||||
}.to output(<<~EOS).to_stdout
|
}.to output(<<~EOS).to_stdout
|
||||||
==> testball
|
==> testball
|
||||||
bottle do
|
bottle do
|
||||||
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
||||||
|
sha256 cellar: :any_skip_relocation, arm64_big_sur: "8f9aecd233463da6a4ea55f5f88fc5841718c013f3e2a7941350d6130f1dc149"
|
||||||
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
||||||
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
||||||
end
|
end
|
||||||
@ -110,6 +124,7 @@ describe "brew bottle" do
|
|||||||
|
|
||||||
bottle do
|
bottle do
|
||||||
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
||||||
|
sha256 cellar: :any_skip_relocation, arm64_big_sur: "8f9aecd233463da6a4ea55f5f88fc5841718c013f3e2a7941350d6130f1dc149"
|
||||||
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
||||||
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
||||||
end
|
end
|
||||||
@ -141,8 +156,9 @@ describe "brew bottle" do
|
|||||||
bottle do
|
bottle do
|
||||||
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
||||||
cellar :any_skip_relocation
|
cellar :any_skip_relocation
|
||||||
sha256 big_sur: "6b276491297d4052538bd2fd22d5129389f27d90a98f831987236a5b90511b98"
|
sha256 "6b276491297d4052538bd2fd22d5129389f27d90a98f831987236a5b90511b98" => :big_sur
|
||||||
sha256 catalina: "16cf230afdfcb6306c208d169549cf8773c831c8653d2c852315a048960d7e72"
|
sha256 "c3c650d75f5188f5d6edd351dd3215e141b73b8ec1cf9144f30e39cbc45de72e" => :arm64_big_sur
|
||||||
|
sha256 "16cf230afdfcb6306c208d169549cf8773c831c8653d2c852315a048960d7e72" => :catalina
|
||||||
end
|
end
|
||||||
EOS
|
EOS
|
||||||
system "git", "add", "--all"
|
system "git", "add", "--all"
|
||||||
@ -153,12 +169,14 @@ describe "brew bottle" do
|
|||||||
brew "bottle",
|
brew "bottle",
|
||||||
"--merge",
|
"--merge",
|
||||||
"--write",
|
"--write",
|
||||||
|
"#{TEST_TMPDIR}/testball-1.0.arm64_big_sur.bottle.json",
|
||||||
"#{TEST_TMPDIR}/testball-1.0.big_sur.bottle.json",
|
"#{TEST_TMPDIR}/testball-1.0.big_sur.bottle.json",
|
||||||
"#{TEST_TMPDIR}/testball-1.0.catalina.bottle.json"
|
"#{TEST_TMPDIR}/testball-1.0.catalina.bottle.json"
|
||||||
}.to output(<<~EOS).to_stdout
|
}.to output(<<~EOS).to_stdout
|
||||||
==> testball
|
==> testball
|
||||||
bottle do
|
bottle do
|
||||||
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
||||||
|
sha256 cellar: :any_skip_relocation, arm64_big_sur: "8f9aecd233463da6a4ea55f5f88fc5841718c013f3e2a7941350d6130f1dc149"
|
||||||
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
||||||
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
||||||
end
|
end
|
||||||
@ -175,6 +193,7 @@ describe "brew bottle" do
|
|||||||
|
|
||||||
bottle do
|
bottle do
|
||||||
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
||||||
|
sha256 cellar: :any_skip_relocation, arm64_big_sur: "8f9aecd233463da6a4ea55f5f88fc5841718c013f3e2a7941350d6130f1dc149"
|
||||||
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
||||||
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
||||||
end
|
end
|
||||||
@ -203,6 +222,7 @@ describe "brew bottle" do
|
|||||||
|
|
||||||
bottle do
|
bottle do
|
||||||
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
||||||
|
sha256 cellar: :any_skip_relocation, arm64_big_sur: "c3c650d75f5188f5d6edd351dd3215e141b73b8ec1cf9144f30e39cbc45de72e"
|
||||||
sha256 cellar: :any_skip_relocation, big_sur: "6b276491297d4052538bd2fd22d5129389f27d90a98f831987236a5b90511b98"
|
sha256 cellar: :any_skip_relocation, big_sur: "6b276491297d4052538bd2fd22d5129389f27d90a98f831987236a5b90511b98"
|
||||||
sha256 cellar: :any_skip_relocation, catalina: "16cf230afdfcb6306c208d169549cf8773c831c8653d2c852315a048960d7e72"
|
sha256 cellar: :any_skip_relocation, catalina: "16cf230afdfcb6306c208d169549cf8773c831c8653d2c852315a048960d7e72"
|
||||||
end
|
end
|
||||||
@ -215,12 +235,14 @@ describe "brew bottle" do
|
|||||||
brew "bottle",
|
brew "bottle",
|
||||||
"--merge",
|
"--merge",
|
||||||
"--write",
|
"--write",
|
||||||
|
"#{TEST_TMPDIR}/testball-1.0.arm64_big_sur.bottle.json",
|
||||||
"#{TEST_TMPDIR}/testball-1.0.big_sur.bottle.json",
|
"#{TEST_TMPDIR}/testball-1.0.big_sur.bottle.json",
|
||||||
"#{TEST_TMPDIR}/testball-1.0.catalina.bottle.json"
|
"#{TEST_TMPDIR}/testball-1.0.catalina.bottle.json"
|
||||||
}.to output(<<~EOS).to_stdout
|
}.to output(<<~EOS).to_stdout
|
||||||
==> testball
|
==> testball
|
||||||
bottle do
|
bottle do
|
||||||
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
||||||
|
sha256 cellar: :any_skip_relocation, arm64_big_sur: "8f9aecd233463da6a4ea55f5f88fc5841718c013f3e2a7941350d6130f1dc149"
|
||||||
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
||||||
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
||||||
end
|
end
|
||||||
@ -237,6 +259,7 @@ describe "brew bottle" do
|
|||||||
|
|
||||||
bottle do
|
bottle do
|
||||||
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
||||||
|
sha256 cellar: :any_skip_relocation, arm64_big_sur: "8f9aecd233463da6a4ea55f5f88fc5841718c013f3e2a7941350d6130f1dc149"
|
||||||
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
||||||
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
||||||
end
|
end
|
||||||
@ -271,6 +294,7 @@ describe "brew bottle" do
|
|||||||
"--merge",
|
"--merge",
|
||||||
"--write",
|
"--write",
|
||||||
"--keep-old",
|
"--keep-old",
|
||||||
|
"#{TEST_TMPDIR}/testball-1.0.arm64_big_sur.bottle.json",
|
||||||
"#{TEST_TMPDIR}/testball-1.0.big_sur.bottle.json",
|
"#{TEST_TMPDIR}/testball-1.0.big_sur.bottle.json",
|
||||||
"#{TEST_TMPDIR}/testball-1.0.catalina.bottle.json"
|
"#{TEST_TMPDIR}/testball-1.0.catalina.bottle.json"
|
||||||
}.to output("Error: `--keep-old` was passed but there was no existing bottle block!\n").to_stderr
|
}.to output("Error: `--keep-old` was passed but there was no existing bottle block!\n").to_stderr
|
||||||
@ -296,12 +320,14 @@ describe "brew bottle" do
|
|||||||
"--merge",
|
"--merge",
|
||||||
"--write",
|
"--write",
|
||||||
"--keep-old",
|
"--keep-old",
|
||||||
|
"#{TEST_TMPDIR}/testball-1.0.arm64_big_sur.bottle.json",
|
||||||
"#{TEST_TMPDIR}/testball-1.0.big_sur.bottle.json",
|
"#{TEST_TMPDIR}/testball-1.0.big_sur.bottle.json",
|
||||||
"#{TEST_TMPDIR}/testball-1.0.catalina.bottle.json"
|
"#{TEST_TMPDIR}/testball-1.0.catalina.bottle.json"
|
||||||
}.to output(<<~EOS).to_stdout
|
}.to output(<<~EOS).to_stdout
|
||||||
==> testball
|
==> testball
|
||||||
bottle do
|
bottle do
|
||||||
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
||||||
|
sha256 cellar: :any_skip_relocation, arm64_big_sur: "8f9aecd233463da6a4ea55f5f88fc5841718c013f3e2a7941350d6130f1dc149"
|
||||||
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
||||||
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
||||||
sha256 cellar: :any, high_sierra: "6971b6eebf4c00eaaed72a1104a49be63861eabc95d679a0c84040398e320059"
|
sha256 cellar: :any, high_sierra: "6971b6eebf4c00eaaed72a1104a49be63861eabc95d679a0c84040398e320059"
|
||||||
@ -319,6 +345,7 @@ describe "brew bottle" do
|
|||||||
|
|
||||||
bottle do
|
bottle do
|
||||||
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
||||||
|
sha256 cellar: :any_skip_relocation, arm64_big_sur: "8f9aecd233463da6a4ea55f5f88fc5841718c013f3e2a7941350d6130f1dc149"
|
||||||
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
||||||
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
||||||
sha256 cellar: :any, high_sierra: "6971b6eebf4c00eaaed72a1104a49be63861eabc95d679a0c84040398e320059"
|
sha256 cellar: :any, high_sierra: "6971b6eebf4c00eaaed72a1104a49be63861eabc95d679a0c84040398e320059"
|
||||||
@ -360,12 +387,14 @@ describe "brew bottle" do
|
|||||||
"--merge",
|
"--merge",
|
||||||
"--write",
|
"--write",
|
||||||
"--keep-old",
|
"--keep-old",
|
||||||
|
"#{TEST_TMPDIR}/testball-1.0.arm64_big_sur.bottle.json",
|
||||||
"#{TEST_TMPDIR}/testball-1.0.big_sur.bottle.json",
|
"#{TEST_TMPDIR}/testball-1.0.big_sur.bottle.json",
|
||||||
"#{TEST_TMPDIR}/testball-1.0.catalina.bottle.json"
|
"#{TEST_TMPDIR}/testball-1.0.catalina.bottle.json"
|
||||||
}.to output(<<~EOS).to_stdout
|
}.to output(<<~EOS).to_stdout
|
||||||
==> testball
|
==> testball
|
||||||
bottle do
|
bottle do
|
||||||
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
||||||
|
sha256 cellar: :any_skip_relocation, arm64_big_sur: "8f9aecd233463da6a4ea55f5f88fc5841718c013f3e2a7941350d6130f1dc149"
|
||||||
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
||||||
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
||||||
sha256 cellar: :any, high_sierra: "6971b6eebf4c00eaaed72a1104a49be63861eabc95d679a0c84040398e320059"
|
sha256 cellar: :any, high_sierra: "6971b6eebf4c00eaaed72a1104a49be63861eabc95d679a0c84040398e320059"
|
||||||
@ -383,6 +412,7 @@ describe "brew bottle" do
|
|||||||
|
|
||||||
bottle do
|
bottle do
|
||||||
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
root_url "#{HOMEBREW_BOTTLE_DEFAULT_DOMAIN}"
|
||||||
|
sha256 cellar: :any_skip_relocation, arm64_big_sur: "8f9aecd233463da6a4ea55f5f88fc5841718c013f3e2a7941350d6130f1dc149"
|
||||||
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
sha256 cellar: :any_skip_relocation, big_sur: "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f"
|
||||||
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
sha256 cellar: :any_skip_relocation, catalina: "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac"
|
||||||
sha256 cellar: :any, high_sierra: "6971b6eebf4c00eaaed72a1104a49be63861eabc95d679a0c84040398e320059"
|
sha256 cellar: :any, high_sierra: "6971b6eebf4c00eaaed72a1104a49be63861eabc95d679a0c84040398e320059"
|
||||||
|
|||||||
8
Library/Homebrew/test/dev-cmd/update-maintainers_spec.rb
Normal file
8
Library/Homebrew/test/dev-cmd/update-maintainers_spec.rb
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# typed: false
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "cmd/shared_examples/args_parse"
|
||||||
|
|
||||||
|
describe "brew update-maintainers" do
|
||||||
|
it_behaves_like "parseable arguments"
|
||||||
|
end
|
||||||
@ -24,6 +24,7 @@ describe FormulaInstaller do
|
|||||||
|
|
||||||
stub_formula_loader formula
|
stub_formula_loader formula
|
||||||
stub_formula_loader formula("gcc") { url "gcc-1.0" }
|
stub_formula_loader formula("gcc") { url "gcc-1.0" }
|
||||||
|
stub_formula_loader formula("gcc@5") { url "gcc-5.0" }
|
||||||
stub_formula_loader formula("patchelf") { url "patchelf-1.0" }
|
stub_formula_loader formula("patchelf") { url "patchelf-1.0" }
|
||||||
allow(Formula["patchelf"]).to receive(:latest_version_installed?).and_return(true)
|
allow(Formula["patchelf"]).to receive(:latest_version_installed?).and_return(true)
|
||||||
|
|
||||||
|
|||||||
@ -838,6 +838,7 @@ describe Formula do
|
|||||||
expect(h).to be_a(Hash)
|
expect(h).to be_a(Hash)
|
||||||
expect(h["name"]).to eq("foo")
|
expect(h["name"]).to eq("foo")
|
||||||
expect(h["full_name"]).to eq("foo")
|
expect(h["full_name"]).to eq("foo")
|
||||||
|
expect(h["tap"]).to eq("homebrew/core")
|
||||||
expect(h["versions"]["stable"]).to eq("1.0")
|
expect(h["versions"]["stable"]).to eq("1.0")
|
||||||
expect(h["versions"]["bottle"]).to be_truthy
|
expect(h["versions"]["bottle"]).to be_truthy
|
||||||
end
|
end
|
||||||
|
|||||||
@ -142,6 +142,7 @@ describe Formulary do
|
|||||||
before do
|
before do
|
||||||
allow(described_class).to receive(:loader_for).and_call_original
|
allow(described_class).to receive(:loader_for).and_call_original
|
||||||
stub_formula_loader formula("gcc") { url "gcc-1.0" }
|
stub_formula_loader formula("gcc") { url "gcc-1.0" }
|
||||||
|
stub_formula_loader formula("gcc@5") { url "gcc-5.0" }
|
||||||
stub_formula_loader formula("patchelf") { url "patchelf-1.0" }
|
stub_formula_loader formula("patchelf") { url "patchelf-1.0" }
|
||||||
allow(Formula["patchelf"]).to receive(:latest_version_installed?).and_return(true)
|
allow(Formula["patchelf"]).to receive(:latest_version_installed?).and_return(true)
|
||||||
end
|
end
|
||||||
|
|||||||
@ -133,7 +133,7 @@ describe Homebrew::Livecheck do
|
|||||||
|
|
||||||
describe "::checkable_urls" do
|
describe "::checkable_urls" do
|
||||||
it "returns the list of URLs to check" do
|
it "returns the list of URLs to check" do
|
||||||
expect(livecheck.checkable_urls(f)).to eq([head_url, stable_url, homepage_url])
|
expect(livecheck.checkable_urls(f)).to eq([stable_url, head_url, homepage_url])
|
||||||
expect(livecheck.checkable_urls(c)).to eq([cask_url, homepage_url])
|
expect(livecheck.checkable_urls(c)).to eq([cask_url, homepage_url])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -50,6 +50,13 @@ describe GitHub do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "::public_member_usernames", :needs_network do
|
||||||
|
it "gets the usernames of all publicly visible members of the organisation" do
|
||||||
|
response = described_class.public_member_usernames("Homebrew")
|
||||||
|
expect(response).to be_a(Array)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "::sponsors_by_tier", :needs_network do
|
describe "::sponsors_by_tier", :needs_network do
|
||||||
it "errors on an unauthenticated token" do
|
it "errors on an unauthenticated token" do
|
||||||
expect {
|
expect {
|
||||||
|
|||||||
@ -111,6 +111,23 @@ module Kernel
|
|||||||
puts sput
|
puts sput
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def ohai_stdout_or_stderr(message, *sput)
|
||||||
|
if $stdout.tty?
|
||||||
|
ohai(message, *sput)
|
||||||
|
else
|
||||||
|
$stderr.puts(ohai_title(message))
|
||||||
|
$stderr.puts(sput)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def puts_stdout_or_stderr(*message)
|
||||||
|
if $stdout.tty?
|
||||||
|
puts(message)
|
||||||
|
else
|
||||||
|
$stderr.puts(message)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def odebug(title, *sput, always_display: false)
|
def odebug(title, *sput, always_display: false)
|
||||||
debug = if respond_to?(:debug)
|
debug = if respond_to?(:debug)
|
||||||
debug?
|
debug?
|
||||||
|
|||||||
@ -20,10 +20,16 @@ module GitHub
|
|||||||
|
|
||||||
CREATE_GIST_SCOPES = ["gist"].freeze
|
CREATE_GIST_SCOPES = ["gist"].freeze
|
||||||
CREATE_ISSUE_FORK_OR_PR_SCOPES = ["public_repo"].freeze
|
CREATE_ISSUE_FORK_OR_PR_SCOPES = ["public_repo"].freeze
|
||||||
ALL_SCOPES = (CREATE_GIST_SCOPES + CREATE_ISSUE_FORK_OR_PR_SCOPES).freeze
|
CREATE_WORKFLOW_SCOPES = ["workflow"].freeze
|
||||||
|
ALL_SCOPES = (CREATE_GIST_SCOPES + CREATE_ISSUE_FORK_OR_PR_SCOPES + CREATE_WORKFLOW_SCOPES).freeze
|
||||||
ALL_SCOPES_URL = Formatter.url(
|
ALL_SCOPES_URL = Formatter.url(
|
||||||
"https://github.com/settings/tokens/new?scopes=#{ALL_SCOPES.join(",")}&description=Homebrew",
|
"https://github.com/settings/tokens/new?scopes=#{ALL_SCOPES.join(",")}&description=Homebrew",
|
||||||
).freeze
|
).freeze
|
||||||
|
CREATE_GITHUB_PAT_MESSAGE = <<~EOS
|
||||||
|
Create a GitHub personal access token:
|
||||||
|
#{ALL_SCOPES_URL}
|
||||||
|
#{Utils::Shell.set_variable_in_profile("HOMEBREW_GITHUB_API_TOKEN", "your_token_here")}
|
||||||
|
EOS
|
||||||
|
|
||||||
# Generic API error.
|
# Generic API error.
|
||||||
class Error < RuntimeError
|
class Error < RuntimeError
|
||||||
@ -44,9 +50,8 @@ module GitHub
|
|||||||
@github_message = github_message
|
@github_message = github_message
|
||||||
super <<~EOS
|
super <<~EOS
|
||||||
GitHub API Error: #{github_message}
|
GitHub API Error: #{github_message}
|
||||||
Try again in #{pretty_ratelimit_reset(reset)}, or create a personal access token:
|
Try again in #{pretty_ratelimit_reset(reset)}, or:
|
||||||
#{ALL_SCOPES_URL}
|
#{CREATE_GITHUB_PAT_MESSAGE}
|
||||||
#{Utils::Shell.set_variable_in_profile("HOMEBREW_GITHUB_API_TOKEN", "your_token_here")}
|
|
||||||
EOS
|
EOS
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -70,15 +75,22 @@ module GitHub
|
|||||||
The GitHub credentials in the macOS keychain may be invalid.
|
The GitHub credentials in the macOS keychain may be invalid.
|
||||||
Clear them with:
|
Clear them with:
|
||||||
printf "protocol=https\\nhost=github.com\\n" | git credential-osxkeychain erase
|
printf "protocol=https\\nhost=github.com\\n" | git credential-osxkeychain erase
|
||||||
Or create a personal access token:
|
#{CREATE_GITHUB_PAT_MESSAGE}
|
||||||
#{ALL_SCOPES_URL}
|
|
||||||
#{Utils::Shell.set_variable_in_profile("HOMEBREW_GITHUB_API_TOKEN", "your_token_here")}
|
|
||||||
EOS
|
EOS
|
||||||
end
|
end
|
||||||
super message.freeze
|
super message.freeze
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Error when the user has no GitHub API credentials set at all (macOS keychain or envvar).
|
||||||
|
class MissingAuthenticationError < Error
|
||||||
|
def initialize
|
||||||
|
message = +"No GitHub credentials found in macOS Keychain or environment.\n"
|
||||||
|
message << CREATE_GITHUB_PAT_MESSAGE
|
||||||
|
super message
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Error when the API returns a validation error.
|
# Error when the API returns a validation error.
|
||||||
class ValidationFailedError < Error
|
class ValidationFailedError < Error
|
||||||
def initialize(github_message, errors)
|
def initialize(github_message, errors)
|
||||||
@ -168,9 +180,7 @@ module GitHub
|
|||||||
Your #{what} credentials do not have sufficient scope!
|
Your #{what} credentials do not have sufficient scope!
|
||||||
Scopes required: #{needed_scopes}
|
Scopes required: #{needed_scopes}
|
||||||
Scopes present: #{credentials_scopes}
|
Scopes present: #{credentials_scopes}
|
||||||
Create a personal access token:
|
#{CREATE_GITHUB_PAT_MESSAGE}
|
||||||
#{ALL_SCOPES_URL}
|
|
||||||
#{Utils::Shell.set_variable_in_profile("HOMEBREW_GITHUB_API_TOKEN", "your_token_here")}
|
|
||||||
EOS
|
EOS
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -277,6 +287,8 @@ module GitHub
|
|||||||
when "401", "403"
|
when "401", "403"
|
||||||
raise AuthenticationFailedError, message
|
raise AuthenticationFailedError, message
|
||||||
when "404"
|
when "404"
|
||||||
|
raise MissingAuthenticationError if api_credentials_type == :none && scopes.present?
|
||||||
|
|
||||||
raise HTTPNotFoundError, message
|
raise HTTPNotFoundError, message
|
||||||
when "422"
|
when "422"
|
||||||
errors = json&.[]("errors") || []
|
errors = json&.[]("errors") || []
|
||||||
@ -560,6 +572,47 @@ module GitHub
|
|||||||
artifact.first["archive_download_url"]
|
artifact.first["archive_download_url"]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def public_member_usernames(org, per_page: 100)
|
||||||
|
url = "#{API_URL}/orgs/#{org}/public_members?per_page=#{per_page}"
|
||||||
|
members = []
|
||||||
|
|
||||||
|
(1..API_MAX_PAGES).each do |page|
|
||||||
|
result = open_api("#{url}&page=#{page}").map { |member| member["login"] }
|
||||||
|
members.concat(result)
|
||||||
|
|
||||||
|
return members if result.length < per_page
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def members_by_team(org, team)
|
||||||
|
query = <<~EOS
|
||||||
|
{ organization(login: "#{org}") {
|
||||||
|
teams(first: 100) {
|
||||||
|
nodes {
|
||||||
|
... on Team { name }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
team(slug: "#{team}") {
|
||||||
|
members(first: 100) {
|
||||||
|
nodes {
|
||||||
|
... on User { login name }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOS
|
||||||
|
result = open_graphql(query, scopes: ["read:org", "user"])
|
||||||
|
|
||||||
|
if result["organization"]["teams"]["nodes"].blank?
|
||||||
|
raise Error,
|
||||||
|
"Your token needs the 'read:org' scope to access this API"
|
||||||
|
end
|
||||||
|
raise Error, "The team #{org}/#{team} does not exist" if result["organization"]["team"].blank?
|
||||||
|
|
||||||
|
result["organization"]["team"]["members"]["nodes"].map { |member| [member["login"], member["name"]] }.to_h
|
||||||
|
end
|
||||||
|
|
||||||
def sponsors_by_tier(user)
|
def sponsors_by_tier(user)
|
||||||
query = <<~EOS
|
query = <<~EOS
|
||||||
{ organization(login: "#{user}") {
|
{ organization(login: "#{user}") {
|
||||||
|
|||||||
14
Library/Homebrew/vendor/bundle/bundler/setup.rb
vendored
14
Library/Homebrew/vendor/bundle/bundler/setup.rb
vendored
@ -4,17 +4,17 @@ ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : 'ruby'
|
|||||||
ruby_version = RbConfig::CONFIG["ruby_version"]
|
ruby_version = RbConfig::CONFIG["ruby_version"]
|
||||||
path = File.expand_path('..', __FILE__)
|
path = File.expand_path('..', __FILE__)
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/concurrent-ruby-1.1.8/lib/concurrent-ruby"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/concurrent-ruby-1.1.8/lib/concurrent-ruby"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/i18n-1.8.7/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/i18n-1.8.8/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/minitest-5.14.3/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/minitest-5.14.3/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/tzinfo-2.0.4/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/tzinfo-2.0.4/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/zeitwerk-2.4.2/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/zeitwerk-2.4.2/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/activesupport-6.1.1/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/activesupport-6.1.2/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/ast-2.4.2/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/ast-2.4.2/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/bindata-2.4.8/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/bindata-2.4.8/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/x86_64-darwin-14/2.6.0-static/msgpack-1.4.2"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/x86_64-darwin-14/2.6.0-static/msgpack-1.4.2"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/msgpack-1.4.2/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/msgpack-1.4.2/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/x86_64-darwin-14/2.6.0-static/bootsnap-1.7.0"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/x86_64-darwin-14/2.6.0-static/bootsnap-1.7.2"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/bootsnap-1.7.0/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/bootsnap-1.7.2/lib"
|
||||||
$:.unshift "#{path}/"
|
$:.unshift "#{path}/"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/x86_64-darwin-14/2.6.0-static/byebug-11.1.3"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/x86_64-darwin-14/2.6.0-static/byebug-11.1.3"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/byebug-11.1.3/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/byebug-11.1.3/lib"
|
||||||
@ -54,7 +54,7 @@ $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/parallel-1.20.1/lib"
|
|||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/parallel_tests-3.4.0/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/parallel_tests-3.4.0/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/parser-3.0.0.0/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/parser-3.0.0.0/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rainbow-3.0.0/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rainbow-3.0.0/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/sorbet-runtime-0.5.6262/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/sorbet-runtime-0.5.6267/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/parlour-5.0.0/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/parlour-5.0.0/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/patchelf-1.3.0/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/patchelf-1.3.0/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/plist-3.6.0/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/plist-3.6.0/lib"
|
||||||
@ -73,8 +73,8 @@ $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-3.10.0/lib"
|
|||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-github-2.3.1/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-github-2.3.1/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-its-1.3.0/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-its-1.3.0/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-retry-0.6.2/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-retry-0.6.2/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/sorbet-static-0.5.6262-universal-darwin-14/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/sorbet-static-0.5.6274-universal-darwin-14/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/sorbet-0.5.6262/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/sorbet-0.5.6274/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-sorbet-1.8.0/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-sorbet-1.8.0/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-wait-0.0.9/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-wait-0.0.9/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-ast-1.4.1/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-ast-1.4.1/lib"
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user