Compare commits

...

12 Commits

Author SHA1 Message Date
Mike McQuaid
613d6466a9
Merge pull request #20669 from Homebrew/sponsors-maintainers-man-completions
Update maintainers.
2025-09-11 11:36:46 +00:00
BrewTestBot
99456ee150
Update maintainers.
Autogenerated by the [sponsors-maintainers-man-completions](https://github.com/Homebrew/brew/blob/HEAD/.github/workflows/sponsors-maintainers-man-completions.yml) workflow.
2025-09-11 11:17:02 +00:00
Mike McQuaid
29270a8858
Merge pull request #20666 from Homebrew/contributions_team
dev-cmd/contributions: add `--team` flag.
2025-09-11 10:53:21 +00:00
Mike McQuaid
3fb55a1577
Merge pull request #20668 from gibfahn/private_repo_fix
github: handle user opting out of github API in private_repo check
2025-09-11 10:39:23 +00:00
Mike McQuaid
3d80dfadd1
dev-cmd/contributions: add --team flag.
This allows specifying an organisation team instead of an organisation
or individual users.
2025-09-11 11:36:48 +01:00
Gibson Fahnestock
f233244ab7
Update Library/Homebrew/utils/github.rb
Co-authored-by: Mike McQuaid <mike@mikemcquaid.com>
2025-09-11 11:23:23 +01:00
Gibson Fahnestock
e4ac3bfeed
github: handle user opting out of github API in private_repo check
Today we get a sorbet error when the user opts out, because `json` is
`{}`, so `json["private"]` is `nil`.

Given this function is used to check whether to send analytics, I assume
we should default to treating the repo as a private repo.

Refs: 8ef7a9dbd4/Library/Homebrew/utils/github/api.rb (L276)
2025-09-11 10:31:46 +01:00
Mike McQuaid
610c67b715
Merge pull request #20650 from botantony/build-typecheck
build build_environment build_options: enable `typed: strict`
2025-09-11 07:25:51 +00:00
botantony
6d548f784b
build: suggestions from @MikeMcQuaid
Signed-off-by: botantony <antonsm21@gmail.com>
Co-authored-by: Mike McQuaid <mike@mikemcquaid.com>
2025-09-11 06:26:01 +02:00
botantony
b2539d37fe
build_options: typed: strict
Signed-off-by: botantony <antonsm21@gmail.com>
2025-09-11 06:26:01 +02:00
botantony
1cc4d0bc25
build_environment: typed: strict
Signed-off-by: botantony <antonsm21@gmail.com>
2025-09-11 06:26:01 +02:00
botantony
89d36e0dd5
build: typed: strict
Signed-off-by: botantony <antonsm21@gmail.com>
2025-09-11 06:26:00 +02:00
12 changed files with 110 additions and 39 deletions

View File

@ -1,4 +1,4 @@
# typed: true # rubocop:todo Sorbet/StrictSigil # typed: strict
# frozen_string_literal: true # frozen_string_literal: true
# This script is loaded by formula_installer as a separate instance. # This script is loaded by formula_installer as a separate instance.
@ -23,28 +23,40 @@ require "extend/pathname/write_mkpath_extension"
class Build class Build
include Utils::Output::Mixin include Utils::Output::Mixin
attr_reader :formula, :deps, :reqs, :args sig { returns(Formula) }
attr_reader :formula
sig { returns(T::Array[Dependency]) }
attr_reader :deps
sig { returns(Requirements) }
attr_reader :reqs
sig { returns(Homebrew::Cmd::InstallCmd::Args) }
attr_reader :args
sig { params(formula: Formula, options: Options, args: Homebrew::Cmd::InstallCmd::Args).void }
def initialize(formula, options, args:) def initialize(formula, options, args:)
@formula = formula @formula = formula
@formula.build = BuildOptions.new(options, formula.options) @formula.build = BuildOptions.new(options, formula.options)
@args = args @args = T.let(args, Homebrew::Cmd::InstallCmd::Args)
@deps = T.let([], T::Array[Dependency])
@reqs = T.let(Requirements.new, Requirements)
if args.ignore_dependencies? return if args.ignore_dependencies?
@deps = []
@reqs = [] @deps = expand_deps
else @reqs = expand_reqs
@deps = expand_deps
@reqs = expand_reqs
end
end end
sig { params(dependent: Formula).returns(BuildOptions) }
def effective_build_options_for(dependent) def effective_build_options_for(dependent)
args = dependent.build.used_options args = dependent.build.used_options
args |= Tab.for_formula(dependent).used_options args |= Tab.for_formula(dependent).used_options
BuildOptions.new(args, dependent.options) BuildOptions.new(args, dependent.options)
end end
sig { returns(Requirements) }
def expand_reqs def expand_reqs
formula.recursive_requirements do |dependent, req| formula.recursive_requirements do |dependent, req|
build = effective_build_options_for(dependent) build = effective_build_options_for(dependent)
@ -54,6 +66,7 @@ class Build
end end
end end
sig { returns(T::Array[Dependency]) }
def expand_deps def expand_deps
formula.recursive_dependencies do |dependent, dep| formula.recursive_dependencies do |dependent, dep|
build = effective_build_options_for(dependent) build = effective_build_options_for(dependent)
@ -67,6 +80,7 @@ class Build
end end
end end
sig { void }
def install def install
formula_deps = deps.map(&:to_formula) formula_deps = deps.map(&:to_formula)
keg_only_deps = formula_deps.select(&:keg_only?) keg_only_deps = formula_deps.select(&:keg_only?)
@ -79,7 +93,7 @@ class Build
ENV.activate_extensions!(env: args.env) ENV.activate_extensions!(env: args.env)
if superenv?(args.env) if superenv?(args.env)
superenv = T.cast(ENV, Superenv) superenv = ENV
superenv.keg_only_deps = keg_only_deps superenv.keg_only_deps = keg_only_deps
superenv.deps = formula_deps superenv.deps = formula_deps
superenv.run_time_deps = run_time_deps superenv.run_time_deps = run_time_deps
@ -192,7 +206,7 @@ class Build
tab.write tab.write
# Find and link metafiles # Find and link metafiles
formula.prefix.install_metafiles formula.buildpath formula.prefix.install_metafiles T.must(formula.buildpath)
formula.prefix.install_metafiles formula.libexec if formula.libexec.exist? formula.prefix.install_metafiles formula.libexec if formula.libexec.exist?
normalize_pod2man_outputs!(formula) normalize_pod2man_outputs!(formula)
@ -202,6 +216,7 @@ class Build
end end
end end
sig { returns(T::Array[Symbol]) }
def detect_stdlibs def detect_stdlibs
keg = Keg.new(formula.prefix) keg = Keg.new(formula.prefix)
@ -211,13 +226,15 @@ class Build
keg.detect_cxx_stdlibs(skip_executables: true) keg.detect_cxx_stdlibs(skip_executables: true)
end end
sig { params(formula: Formula).void }
def fixopt(formula) def fixopt(formula)
path = if formula.linked_keg.directory? && formula.linked_keg.symlink? path = if formula.linked_keg.directory? && formula.linked_keg.symlink?
formula.linked_keg.resolved_path formula.linked_keg.resolved_path
elsif formula.prefix.directory? elsif formula.prefix.directory?
formula.prefix formula.prefix
elsif (kids = formula.rack.children).size == 1 && kids.first.directory? elsif (children = formula.rack.children.presence) && children.size == 1 &&
kids.first (first_child = children.first.presence) && first_child.directory?
first_child
else else
raise raise
end end
@ -226,6 +243,7 @@ class Build
raise "#{formula.opt_prefix} not present or broken\nPlease reinstall #{formula.full_name}. Sorry :(" raise "#{formula.opt_prefix} not present or broken\nPlease reinstall #{formula.full_name}. Sorry :("
end end
sig { params(formula: Formula).void }
def normalize_pod2man_outputs!(formula) def normalize_pod2man_outputs!(formula)
keg = Keg.new(formula.prefix) keg = Keg.new(formula.prefix)
keg.normalize_pod2man_outputs! keg.normalize_pod2man_outputs!
@ -245,7 +263,7 @@ begin
trap("INT", old_trap) trap("INT", old_trap)
formula = args.named.to_formulae.first formula = args.named.to_formulae.fetch(0)
options = Options.create(args.flags_only) options = Options.create(args.flags_only)
build = Build.new(formula, options, args:) build = Build.new(formula, options, args:)

View File

@ -1,11 +1,11 @@
# typed: true # rubocop:todo Sorbet/StrictSigil # typed: strict
# frozen_string_literal: true # frozen_string_literal: true
# Settings for the build environment. # Settings for the build environment.
class BuildEnvironment class BuildEnvironment
sig { params(settings: Symbol).void } sig { params(settings: Symbol).void }
def initialize(*settings) def initialize(*settings)
@settings = Set.new(settings) @settings = T.let(Set.new(settings), T::Set[Symbol])
end end
sig { params(args: T::Enumerable[Symbol]).returns(T.self_type) } sig { params(args: T::Enumerable[Symbol]).returns(T.self_type) }
@ -29,16 +29,17 @@ class BuildEnvironment
module DSL module DSL
# Initialise @env for each class which may use this DSL (e.g. each formula subclass). # Initialise @env for each class which may use this DSL (e.g. each formula subclass).
# `env` may never be called and it needs to be initialised before the class is frozen. # `env` may never be called and it needs to be initialised before the class is frozen.
sig { params(child: T.untyped).void }
def inherited(child) def inherited(child)
super super
child.instance_eval do child.instance_eval do
@env = BuildEnvironment.new @env = T.let(BuildEnvironment.new, T.nilable(BuildEnvironment))
end end
end end
sig { params(settings: Symbol).returns(BuildEnvironment) } sig { params(settings: Symbol).returns(BuildEnvironment) }
def env(*settings) def env(*settings)
@env.merge(settings) T.must(@env).merge(settings)
end end
end end

View File

@ -1,11 +1,12 @@
# typed: true # rubocop:todo Sorbet/StrictSigil # typed: strict
# frozen_string_literal: true # frozen_string_literal: true
# Options for a formula build. # Options for a formula build.
class BuildOptions class BuildOptions
sig { params(args: Options, options: Options).void }
def initialize(args, options) def initialize(args, options)
@args = args @args = T.let(args, Options)
@options = options @options = T.let(options, Options)
end end
# True if a {Formula} is being built with a specific option. # True if a {Formula} is being built with a specific option.
@ -29,8 +30,13 @@ class BuildOptions
# args << "--with-example1" # args << "--with-example1"
# end # end
# ``` # ```
sig { params(val: T.any(String, Requirement, Dependency)).returns(T::Boolean) }
def with?(val) def with?(val)
option_names = val.respond_to?(:option_names) ? val.option_names : [val] option_names = if val.is_a?(String)
[val]
else
val.option_names
end
option_names.any? do |name| option_names.any? do |name|
if option_defined? "with-#{name}" if option_defined? "with-#{name}"
@ -50,11 +56,13 @@ class BuildOptions
# ```ruby # ```ruby
# args << "--no-spam-plz" if build.without? "spam" # args << "--no-spam-plz" if build.without? "spam"
# ``` # ```
sig { params(val: T.any(String, Requirement, Dependency)).returns(T::Boolean) }
def without?(val) def without?(val)
!with?(val) !with?(val)
end end
# True if a {Formula} is being built as a bottle (i.e. binary package). # True if a {Formula} is being built as a bottle (i.e. binary package).
sig { returns(T::Boolean) }
def bottle? def bottle?
include? "build-bottle" include? "build-bottle"
end end
@ -75,6 +83,7 @@ class BuildOptions
# args << "--and-a-cold-beer" if build.with? "cold-beer" # args << "--and-a-cold-beer" if build.with? "cold-beer"
# end # end
# ``` # ```
sig { returns(T::Boolean) }
def head? def head?
include? "HEAD" include? "HEAD"
end end
@ -87,29 +96,35 @@ class BuildOptions
# ```ruby # ```ruby
# args << "--some-feature" if build.stable? # args << "--some-feature" if build.stable?
# ``` # ```
sig { returns(T::Boolean) }
def stable? def stable?
!head? !head?
end end
# True if the build has any arguments or options specified. # True if the build has any arguments or options specified.
sig { returns(T::Boolean) }
def any_args_or_options? def any_args_or_options?
!@args.empty? || !@options.empty? !@args.empty? || !@options.empty?
end end
sig { returns(Options) }
def used_options def used_options
@options & @args @options & @args
end end
sig { returns(Options) }
def unused_options def unused_options
@options - @args @options - @args
end end
private private
sig { params(name: String).returns(T::Boolean) }
def include?(name) def include?(name)
@args.include?("--#{name}") @args.include?("--#{name}")
end end
sig { params(name: String).returns(T::Boolean) }
def option_defined?(name) def option_defined?(name)
@options.include? name @options.include? name
end end

View File

@ -42,6 +42,9 @@ module Homebrew
flag "--organisation=", "--organization=", "--org=", flag "--organisation=", "--organization=", "--org=",
description: "Specify the organisation to populate sources repositories from. " \ description: "Specify the organisation to populate sources repositories from. " \
"Omitting this flag searches the Homebrew primary repositories." "Omitting this flag searches the Homebrew primary repositories."
flag "--team=",
description: "Specify the team to populate users from. " \
"The first part of the team name will be used as the organisation."
flag "--from=", flag "--from=",
description: "Date (ISO 8601 format) to start searching contributions. " \ description: "Date (ISO 8601 format) to start searching contributions. " \
"Omitting this flag searches the past year." "Omitting this flag searches the past year."
@ -50,6 +53,8 @@ module Homebrew
switch "--csv", switch "--csv",
description: "Print a CSV of contributions across repositories over the time period." description: "Print a CSV of contributions across repositories over the time period."
conflicts "--organisation", "--repositories" conflicts "--organisation", "--repositories"
conflicts "--organisation", "--team"
conflicts "--user", "--team"
end end
sig { override.void } sig { override.void }
@ -58,15 +63,34 @@ module Homebrew
Homebrew.install_bundler_gems!(groups: ["contributions"]) if args.csv? Homebrew.install_bundler_gems!(groups: ["contributions"]) if args.csv?
require "utils/github"
results = {} results = {}
grand_totals = {} grand_totals = {}
from = args.from.presence || Date.today.prev_year.iso8601 from = args.from.presence || Date.today.prev_year.iso8601
to = args.to.presence || (Date.today + 1).iso8601 to = args.to.presence || (Date.today + 1).iso8601
organisation = nil organisation = nil
repositories = if (org = args.organisation.presence)
users = if (team = args.team.presence)
team_sections = team.split("/")
organisation = team_sections.first.presence
team_name = team_sections.last.presence
if team_sections.length != 2 || organisation.nil? || team_name.nil?
odie "Team must be in the format `organisation/team`!"
end
puts "Getting members for #{organisation}/#{team_name}..." if args.verbose?
GitHub.members_by_team(organisation, team_name).keys
elsif (users = args.user.presence)
users
else
puts "Getting members for Homebrew/maintainers..." if args.verbose?
GitHub.members_by_team("Homebrew", "maintainers").keys
end
repositories = if (org = organisation.presence) || (org = args.organisation.presence)
organisation = org organisation = org
puts "Getting repositories for #{organisation}..." if args.verbose?
GitHub.organisation_repositories(organisation, from, to, args.verbose?) GitHub.organisation_repositories(organisation, from, to, args.verbose?)
elsif (repos = args.repositories.presence) && repos.length == 1 && (first_repository = repos.first) elsif (repos = args.repositories.presence) && repos.length == 1 && (first_repository = repos.first)
case first_repository case first_repository
@ -87,8 +111,6 @@ module Homebrew
end end
organisation ||= T.must(repositories.fetch(0).split("/").first) organisation ||= T.must(repositories.fetch(0).split("/").first)
require "utils/github"
users = args.user.presence || GitHub.members_by_team("Homebrew", "maintainers").keys
users.each do |username| users.each do |username|
# TODO: Using the GitHub username to scan the `git log` undercounts some # TODO: Using the GitHub username to scan the `git log` undercounts some
# contributions as people might not always have configured their Git # contributions as people might not always have configured their Git

View File

@ -29,6 +29,9 @@ class Homebrew::DevCmd::Contributions::Args < Homebrew::CLI::Args
sig { returns(T.nilable(T::Array[String])) } sig { returns(T.nilable(T::Array[String])) }
def repositories; end def repositories; end
sig { returns(T.nilable(String)) }
def team; end
sig { returns(T.nilable(String)) } sig { returns(T.nilable(String)) }
def to; end def to; end

View File

@ -119,10 +119,11 @@ module GitHub
API.open_rest(url, data:, scopes:) API.open_rest(url, data:, scopes:)
end end
# We default to private if we aren't sure or if the GitHub API is disabled.
sig { params(full_name: String).returns(T::Boolean) } sig { params(full_name: String).returns(T::Boolean) }
def self.private_repo?(full_name) def self.private_repo?(full_name)
uri = url_to "repos", full_name uri = url_to "repos", full_name
API.open_rest(uri) { |json| json["private"] } API.open_rest(uri) { |json| json.fetch("private", true) }
end end
def self.search_query_string(*main_params, **qualifiers) def self.search_query_string(*main_params, **qualifiers)

View File

@ -61,7 +61,7 @@ Homebrew's [Project Leadership Committee](https://docs.brew.sh/Homebrew-Governan
Homebrew's [Technical Steering Committee](https://docs.brew.sh/Homebrew-Governance#7-technical-steering-committee) is [Bo Anderson](https://github.com/Bo98), [Issy Long](https://github.com/issyl0), [Michael Cho](https://github.com/cho-m), [Mike McQuaid](https://github.com/MikeMcQuaid) and [Ruoyu Zhong](https://github.com/ZhongRuoyu). Homebrew's [Technical Steering Committee](https://docs.brew.sh/Homebrew-Governance#7-technical-steering-committee) is [Bo Anderson](https://github.com/Bo98), [Issy Long](https://github.com/issyl0), [Michael Cho](https://github.com/cho-m), [Mike McQuaid](https://github.com/MikeMcQuaid) and [Ruoyu Zhong](https://github.com/ZhongRuoyu).
Homebrew's maintainers are [Alexander Bayandin](https://github.com/bayandin), [Bevan Kay](https://github.com/bevanjkay), [Bo Anderson](https://github.com/Bo98), [Branch Vincent](https://github.com/branchvincent), [Caleb Xu](https://github.com/alebcay), [Carlo Cabrera](https://github.com/carlocab), [Daeho Ro](https://github.com/daeho-ro), [Douglas Eichelberger](https://github.com/dduugg), [Dustin Rodrigues](https://github.com/dtrodrigues), [Eric Knibbe](https://github.com/EricFromCanada), [FX Coudert](https://github.com/fxcoudert), [Issy Long](https://github.com/issyl0), [Justin Krehel](https://github.com/krehel), [Klaus Hipp](https://github.com/khipp), [Markus Reiter](https://github.com/reitermarkus), [Michael Cho](https://github.com/cho-m), [Michka Popoff](https://github.com/iMichka), [Mike McQuaid](https://github.com/MikeMcQuaid), [Nanda H Krishna](https://github.com/nandahkrishna), [Patrick Linnane](https://github.com/p-linnane), [Rui Chen](https://github.com/chenrui333), [Ruoyu Zhong](https://github.com/ZhongRuoyu), [Rylan Polster](https://github.com/Rylan12), [Sam Ford](https://github.com/samford), [Sean Molenaar](https://github.com/SMillerDev), [Štefan Baebler](https://github.com/stefanb), [Thierry Moisan](https://github.com/Moisan), [Timothy Sutton](https://github.com/timsutton) and [William Woodruff](https://github.com/woodruffw). Homebrew's maintainers are [Bevan Kay](https://github.com/bevanjkay), [Bo Anderson](https://github.com/Bo98), [Branch Vincent](https://github.com/branchvincent), [Caleb Xu](https://github.com/alebcay), [Carlo Cabrera](https://github.com/carlocab), [Daeho Ro](https://github.com/daeho-ro), [Douglas Eichelberger](https://github.com/dduugg), [Dustin Rodrigues](https://github.com/dtrodrigues), [Eric Knibbe](https://github.com/EricFromCanada), [FX Coudert](https://github.com/fxcoudert), [Issy Long](https://github.com/issyl0), [Justin Krehel](https://github.com/krehel), [Klaus Hipp](https://github.com/khipp), [Markus Reiter](https://github.com/reitermarkus), [Michael Cho](https://github.com/cho-m), [Michka Popoff](https://github.com/iMichka), [Mike McQuaid](https://github.com/MikeMcQuaid), [Nanda H Krishna](https://github.com/nandahkrishna), [Patrick Linnane](https://github.com/p-linnane), [Rui Chen](https://github.com/chenrui333), [Ruoyu Zhong](https://github.com/ZhongRuoyu), [Rylan Polster](https://github.com/Rylan12), [Sam Ford](https://github.com/samford), [Sean Molenaar](https://github.com/SMillerDev), [Štefan Baebler](https://github.com/stefanb), [Thierry Moisan](https://github.com/Moisan) and [William Woodruff](https://github.com/woodruffw).
Former maintainers with significant contributions include [Miccal Matthews](https://github.com/miccal), [Misty De Méo](https://github.com/mistydemeo), [Shaun Jackman](https://github.com/sjackman), [Vítor Galvão](https://github.com/vitorgalvao), [Claudia Pellegrino](https://github.com/claui), [Seeker](https://github.com/SeekingMeaning), [Jan Viljanen](https://github.com/javian), [JCount](https://github.com/jcount), [commitay](https://github.com/commitay), [Dominyk Tiller](https://github.com/DomT4), [Tim Smith](https://github.com/tdsmith), [Baptiste Fontaine](https://github.com/bfontaine), [Xu Cheng](https://github.com/xu-cheng), [Martin Afanasjew](https://github.com/UniqMartin), [Brett Koonce](https://github.com/asparagui), [Charlie Sharpsteen](https://github.com/Sharpie), [Jack Nagel](https://github.com/jacknagel), [Adam Vandenberg](https://github.com/adamv), [Andrew Janke](https://github.com/apjanke), [Alex Dunn](https://github.com/dunn), [neutric](https://github.com/neutric), [Tomasz Pajor](https://github.com/nijikon), [Uladzislau Shablinski](https://github.com/vladshablinsky), [Alyssa Ross](https://github.com/alyssais), [ilovezfs](https://github.com/ilovezfs), [Chongyu Zhu](https://github.com/lembacon) and Homebrew's creator: [Max Howell](https://github.com/mxcl). Former maintainers with significant contributions include [Miccal Matthews](https://github.com/miccal), [Misty De Méo](https://github.com/mistydemeo), [Shaun Jackman](https://github.com/sjackman), [Vítor Galvão](https://github.com/vitorgalvao), [Claudia Pellegrino](https://github.com/claui), [Seeker](https://github.com/SeekingMeaning), [Jan Viljanen](https://github.com/javian), [JCount](https://github.com/jcount), [commitay](https://github.com/commitay), [Dominyk Tiller](https://github.com/DomT4), [Tim Smith](https://github.com/tdsmith), [Baptiste Fontaine](https://github.com/bfontaine), [Xu Cheng](https://github.com/xu-cheng), [Martin Afanasjew](https://github.com/UniqMartin), [Brett Koonce](https://github.com/asparagui), [Charlie Sharpsteen](https://github.com/Sharpie), [Jack Nagel](https://github.com/jacknagel), [Adam Vandenberg](https://github.com/adamv), [Andrew Janke](https://github.com/apjanke), [Alex Dunn](https://github.com/dunn), [neutric](https://github.com/neutric), [Tomasz Pajor](https://github.com/nijikon), [Uladzislau Shablinski](https://github.com/vladshablinsky), [Alyssa Ross](https://github.com/alyssais), [ilovezfs](https://github.com/ilovezfs), [Chongyu Zhu](https://github.com/lembacon) and Homebrew's creator: [Max Howell](https://github.com/mxcl).

View File

@ -821,6 +821,7 @@ _brew_contributions() {
--organisation --organisation
--quiet --quiet
--repositories --repositories
--team
--to --to
--user --user
--verbose --verbose

View File

@ -605,6 +605,7 @@ __fish_brew_complete_arg 'contributions' -l help -d 'Show this message'
__fish_brew_complete_arg 'contributions' -l organisation -d 'Specify the organisation to populate sources repositories from. Omitting this flag searches the Homebrew primary repositories' __fish_brew_complete_arg 'contributions' -l organisation -d 'Specify the organisation to populate sources repositories from. Omitting this flag searches the Homebrew primary repositories'
__fish_brew_complete_arg 'contributions' -l quiet -d 'Make some output more quiet' __fish_brew_complete_arg 'contributions' -l quiet -d 'Make some output more quiet'
__fish_brew_complete_arg 'contributions' -l repositories -d 'Specify a comma-separated list of repositories to search. All repositories must be under the same user or organisation. Omitting this flag, or specifying `--repositories=primary`, searches only the main repositories: `Homebrew/brew`, `Homebrew/homebrew-core`, `Homebrew/homebrew-cask`. Specifying `--repositories=all` searches all non-deprecated Homebrew repositories. ' __fish_brew_complete_arg 'contributions' -l repositories -d 'Specify a comma-separated list of repositories to search. All repositories must be under the same user or organisation. Omitting this flag, or specifying `--repositories=primary`, searches only the main repositories: `Homebrew/brew`, `Homebrew/homebrew-core`, `Homebrew/homebrew-cask`. Specifying `--repositories=all` searches all non-deprecated Homebrew repositories. '
__fish_brew_complete_arg 'contributions' -l team -d 'Specify the team to populate users from. The first part of the team name will be used as the organisation'
__fish_brew_complete_arg 'contributions' -l to -d 'Date (ISO 8601 format) to stop searching contributions' __fish_brew_complete_arg 'contributions' -l to -d 'Date (ISO 8601 format) to stop searching contributions'
__fish_brew_complete_arg 'contributions' -l user -d 'Specify a comma-separated list of GitHub usernames or email addresses to find contributions from. Omitting this flag searches Homebrew maintainers' __fish_brew_complete_arg 'contributions' -l user -d 'Specify a comma-separated list of GitHub usernames or email addresses to find contributions from. Omitting this flag searches Homebrew maintainers'
__fish_brew_complete_arg 'contributions' -l verbose -d 'Make some output more verbose' __fish_brew_complete_arg 'contributions' -l verbose -d 'Make some output more verbose'

View File

@ -769,11 +769,12 @@ _brew_contributions() {
'--debug[Display any debugging information]' \ '--debug[Display any debugging information]' \
'--from[Date (ISO 8601 format) to start searching contributions. Omitting this flag searches the past year]' \ '--from[Date (ISO 8601 format) to start searching contributions. Omitting this flag searches the past year]' \
'--help[Show this message]' \ '--help[Show this message]' \
'(--repositories)--organisation[Specify the organisation to populate sources repositories from. Omitting this flag searches the Homebrew primary repositories]' \ '(--repositories --team)--organisation[Specify the organisation to populate sources repositories from. Omitting this flag searches the Homebrew primary repositories]' \
'--quiet[Make some output more quiet]' \ '--quiet[Make some output more quiet]' \
'(--organisation)--repositories[Specify a comma-separated list of repositories to search. All repositories must be under the same user or organisation. Omitting this flag, or specifying `--repositories=primary`, searches only the main repositories: `Homebrew/brew`, `Homebrew/homebrew-core`, `Homebrew/homebrew-cask`. Specifying `--repositories=all` searches all non-deprecated Homebrew repositories. ]' \ '(--organisation)--repositories[Specify a comma-separated list of repositories to search. All repositories must be under the same user or organisation. Omitting this flag, or specifying `--repositories=primary`, searches only the main repositories: `Homebrew/brew`, `Homebrew/homebrew-core`, `Homebrew/homebrew-cask`. Specifying `--repositories=all` searches all non-deprecated Homebrew repositories. ]' \
'(--organisation --user)--team[Specify the team to populate users from. The first part of the team name will be used as the organisation]' \
'--to[Date (ISO 8601 format) to stop searching contributions]' \ '--to[Date (ISO 8601 format) to stop searching contributions]' \
'--user[Specify a comma-separated list of GitHub usernames or email addresses to find contributions from. Omitting this flag searches Homebrew maintainers]' \ '(--team)--user[Specify a comma-separated list of GitHub usernames or email addresses to find contributions from. Omitting this flag searches Homebrew maintainers]' \
'--verbose[Make some output more verbose]' '--verbose[Make some output more verbose]'
} }

View File

@ -2426,6 +2426,11 @@ Summarise contributions to Homebrew repositories.
: Specify the organisation to populate sources repositories from. Omitting this : Specify the organisation to populate sources repositories from. Omitting this
flag searches the Homebrew primary repositories. flag searches the Homebrew primary repositories.
`--team`
: Specify the team to populate users from. The first part of the team name will
be used as the organisation.
`--from` `--from`
: Date (ISO 8601 format) to start searching contributions. Omitting this flag : Date (ISO 8601 format) to start searching contributions. Omitting this flag
@ -4539,12 +4544,12 @@ McQuaid, Patrick Linnane and Vanessa Gennarelli.
Homebrew's Technical Steering Committee is Bo Anderson, Issy Long, Michael Cho, Homebrew's Technical Steering Committee is Bo Anderson, Issy Long, Michael Cho,
Mike McQuaid and Ruoyu Zhong. Mike McQuaid and Ruoyu Zhong.
Homebrew's maintainers are Alexander Bayandin, Bevan Kay, Bo Anderson, Branch Homebrew's maintainers are Bevan Kay, Bo Anderson, Branch Vincent, Caleb Xu,
Vincent, Caleb Xu, Carlo Cabrera, Daeho Ro, Douglas Eichelberger, Dustin Carlo Cabrera, Daeho Ro, Douglas Eichelberger, Dustin Rodrigues, Eric Knibbe, FX
Rodrigues, Eric Knibbe, FX Coudert, Issy Long, Justin Krehel, Klaus Hipp, Markus Coudert, Issy Long, Justin Krehel, Klaus Hipp, Markus Reiter, Michael Cho,
Reiter, Michael Cho, Michka Popoff, Mike McQuaid, Nanda H Krishna, Patrick Michka Popoff, Mike McQuaid, Nanda H Krishna, Patrick Linnane, Rui Chen, Ruoyu
Linnane, Rui Chen, Ruoyu Zhong, Rylan Polster, Sam Ford, Sean Molenaar, Štefan Zhong, Rylan Polster, Sam Ford, Sean Molenaar, Štefan Baebler, Thierry Moisan
Baebler, Thierry Moisan, Timothy Sutton and William Woodruff. and William Woodruff.
Former maintainers with significant contributions include Miccal Matthews, Misty Former maintainers with significant contributions include Miccal Matthews, Misty
De Méo, Shaun Jackman, Vítor Galvão, Claudia Pellegrino, Seeker, Jan Viljanen, De Méo, Shaun Jackman, Vítor Galvão, Claudia Pellegrino, Seeker, Jan Viljanen,

View File

@ -1520,6 +1520,9 @@ Specify a comma\-separated list of repositories to search\. All repositories mus
\fB\-\-organisation\fP \fB\-\-organisation\fP
Specify the organisation to populate sources repositories from\. Omitting this flag searches the Homebrew primary repositories\. Specify the organisation to populate sources repositories from\. Omitting this flag searches the Homebrew primary repositories\.
.TP .TP
\fB\-\-team\fP
Specify the team to populate users from\. The first part of the team name will be used as the organisation\.
.TP
\fB\-\-from\fP \fB\-\-from\fP
Date (ISO 8601 format) to start searching contributions\. Omitting this flag searches the past year\. Date (ISO 8601 format) to start searching contributions\. Omitting this flag searches the past year\.
.TP .TP
@ -2979,7 +2982,7 @@ Homebrew\[u2019]s Project Leadership Committee is Colin Dean, Michka Popoff, Mik
.P .P
Homebrew\[u2019]s Technical Steering Committee is Bo Anderson, Issy Long, Michael Cho, Mike McQuaid and Ruoyu Zhong\. Homebrew\[u2019]s Technical Steering Committee is Bo Anderson, Issy Long, Michael Cho, Mike McQuaid and Ruoyu Zhong\.
.P .P
Homebrew\[u2019]s maintainers are Alexander Bayandin, Bevan Kay, Bo Anderson, Branch Vincent, Caleb Xu, Carlo Cabrera, Daeho Ro, Douglas Eichelberger, Dustin Rodrigues, Eric Knibbe, FX Coudert, Issy Long, Justin Krehel, Klaus Hipp, Markus Reiter, Michael Cho, Michka Popoff, Mike McQuaid, Nanda H Krishna, Patrick Linnane, Rui Chen, Ruoyu Zhong, Rylan Polster, Sam Ford, Sean Molenaar, Štefan Baebler, Thierry Moisan, Timothy Sutton and William Woodruff\. Homebrew\[u2019]s maintainers are Bevan Kay, Bo Anderson, Branch Vincent, Caleb Xu, Carlo Cabrera, Daeho Ro, Douglas Eichelberger, Dustin Rodrigues, Eric Knibbe, FX Coudert, Issy Long, Justin Krehel, Klaus Hipp, Markus Reiter, Michael Cho, Michka Popoff, Mike McQuaid, Nanda H Krishna, Patrick Linnane, Rui Chen, Ruoyu Zhong, Rylan Polster, Sam Ford, Sean Molenaar, Štefan Baebler, Thierry Moisan and William Woodruff\.
.P .P
Former maintainers with significant contributions include Miccal Matthews, Misty De Méo, Shaun Jackman, Vítor Galvão, Claudia Pellegrino, Seeker, Jan Viljanen, JCount, commitay, Dominyk Tiller, Tim Smith, Baptiste Fontaine, Xu Cheng, Martin Afanasjew, Brett Koonce, Charlie Sharpsteen, Jack Nagel, Adam Vandenberg, Andrew Janke, Alex Dunn, neutric, Tomasz Pajor, Uladzislau Shablinski, Alyssa Ross, ilovezfs, Chongyu Zhu and Homebrew\[u2019]s creator: Max Howell\. Former maintainers with significant contributions include Miccal Matthews, Misty De Méo, Shaun Jackman, Vítor Galvão, Claudia Pellegrino, Seeker, Jan Viljanen, JCount, commitay, Dominyk Tiller, Tim Smith, Baptiste Fontaine, Xu Cheng, Martin Afanasjew, Brett Koonce, Charlie Sharpsteen, Jack Nagel, Adam Vandenberg, Andrew Janke, Alex Dunn, neutric, Tomasz Pajor, Uladzislau Shablinski, Alyssa Ross, ilovezfs, Chongyu Zhu and Homebrew\[u2019]s creator: Max Howell\.
.SH "BUGS" .SH "BUGS"