Merge pull request #11714 from Rylan12/developer

Add `brew developer` command
This commit is contained in:
Rylan Polster 2021-07-21 09:53:04 -04:00 committed by GitHub
commit b18bbacced
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 173 additions and 0 deletions

View File

@ -93,6 +93,15 @@ begin
internal_cmd ||= begin internal_cmd ||= begin
internal_dev_cmd = Commands.valid_internal_dev_cmd?(cmd) internal_dev_cmd = Commands.valid_internal_dev_cmd?(cmd)
if internal_dev_cmd && !Homebrew::EnvConfig.developer? if internal_dev_cmd && !Homebrew::EnvConfig.developer?
if ENV["HOMEBREW_DEV_CMD_RUN"].blank?
opoo <<~MESSAGE
#{Tty.bold}#{cmd}#{Tty.reset} is a developer command, so
Homebrew's developer mode has been automatically turned on.
To turn developer mode off, run #{Tty.bold}brew developer off#{Tty.reset}
MESSAGE
end
Homebrew::Settings.write "devcmdrun", true Homebrew::Settings.write "devcmdrun", true
ENV["HOMEBREW_DEV_CMD_RUN"] = "1" ENV["HOMEBREW_DEV_CMD_RUN"] = "1"
end end

View File

@ -81,6 +81,30 @@ ohai() {
fi fi
} }
opoo() {
if [[ -n "${HOMEBREW_COLOR}" || (-t 2 && -z "${HOMEBREW_NO_COLOR}") ]] # check whether stderr is a tty.
then
echo -ne "\\033[4;33mWarning\\033[0m: " >&2 # highlight Warning with underline and yellow color
else
echo -n "Warning: " >&2
fi
if [[ $# -eq 0 ]]
then
cat >&2
else
echo "$*" >&2
fi
}
bold() {
if [[ -n "${HOMEBREW_COLOR}" || (-t 2 && -z "${HOMEBREW_NO_COLOR}") ]] # check whether stderr is a tty.
then
echo -e "\\033[1m""$*""\\033[0m"
else
echo "$*"
fi
}
onoe() { onoe() {
if [[ -n "${HOMEBREW_COLOR}" || (-t 2 && -z "${HOMEBREW_NO_COLOR}") ]] # check whether stderr is a tty. if [[ -n "${HOMEBREW_COLOR}" || (-t 2 && -z "${HOMEBREW_NO_COLOR}") ]] # check whether stderr is a tty.
then then
@ -621,6 +645,15 @@ elif [[ -f "${HOMEBREW_LIBRARY}/Homebrew/dev-cmd/${HOMEBREW_COMMAND}.sh" ]]
then then
if [[ -z "${HOMEBREW_DEVELOPER}" ]] if [[ -z "${HOMEBREW_DEVELOPER}" ]]
then then
if [[ -z "${HOMEBREW_DEV_CMD_RUN}" ]]
then
message="$(bold "${HOMEBREW_COMMAND}") is a developer command, so
Homebrew's developer mode has been automatically turned on.
To turn developer mode off, run $(bold "brew developer off")
"
opoo "${message}"
fi
git config --file="${HOMEBREW_GIT_CONFIG_FILE}" --replace-all homebrew.devcmdrun true 2>/dev/null git config --file="${HOMEBREW_GIT_CONFIG_FILE}" --replace-all homebrew.devcmdrun true 2>/dev/null
export HOMEBREW_DEV_CMD_RUN="1" export HOMEBREW_DEV_CMD_RUN="1"
fi fi

View File

@ -0,0 +1,58 @@
# typed: true
# frozen_string_literal: true
require "cli/parser"
module Homebrew
extend T::Sig
module_function
sig { returns(CLI::Parser) }
def developer_args
Homebrew::CLI::Parser.new do
description <<~EOS
Control Homebrew's developer mode. When developer mode is enabled,
`brew update` will update Homebrew to the latest commit on the `master`
branch instead of the latest stable version along with some other behaviour changes.
`brew developer` [`state`]:
Display the current state of Homebrew's developer mode.
`brew developer` (`on`|`off`):
Turn Homebrew's developer mode on or off respectively.
EOS
named_args %w[state on off], max: 1
end
end
def developer
args = developer_args.parse
env_vars = []
env_vars << "HOMEBREW_DEVELOPER" if Homebrew::EnvConfig.developer?
env_vars << "HOMEBREW_UPDATE_TO_TAG" if Homebrew::EnvConfig.update_to_tag?
env_vars.map! do |var|
"#{Tty.bold}#{var}#{Tty.reset}"
end
case args.named.first
when nil, "state"
if env_vars.any?
puts "Developer mode is enabled because #{env_vars.to_sentence} #{"is".pluralize(env_vars.count)} set."
elsif Homebrew::Settings.read("devcmdrun") == "true"
puts "Developer mode is enabled."
else
puts "Developer mode is disabled."
end
when "on"
Homebrew::Settings.write "devcmdrun", true
when "off"
Homebrew::Settings.delete "devcmdrun"
puts "To fully disable developer mode, you must unset #{env_vars.to_sentence}." if env_vars.any?
else
raise UsageError, "unknown subcommand: #{args.named.first}"
end
end
end

View File

@ -0,0 +1,8 @@
# typed: false
# frozen_string_literal: true
require "cmd/shared_examples/args_parse"
describe "brew developer" do
it_behaves_like "parseable arguments"
end

View File

@ -83,6 +83,7 @@ RSpec.shared_context "integration test" do # rubocop:disable RSpec/ContextWordin
"HOMEBREW_INTEGRATION_TEST" => command_id_from_args(args), "HOMEBREW_INTEGRATION_TEST" => command_id_from_args(args),
"HOMEBREW_TEST_TMPDIR" => TEST_TMPDIR, "HOMEBREW_TEST_TMPDIR" => TEST_TMPDIR,
"HOMEBREW_DEVELOPER" => ENV["HOMEBREW_DEVELOPER"], "HOMEBREW_DEVELOPER" => ENV["HOMEBREW_DEVELOPER"],
"HOMEBREW_DEV_CMD_RUN" => "true",
"GEM_HOME" => nil, "GEM_HOME" => nil,
) )

View File

@ -746,6 +746,23 @@ _brew_desc() {
__brew_complete_formulae __brew_complete_formulae
} }
_brew_developer() {
local cur="${COMP_WORDS[COMP_CWORD]}"
case "${cur}" in
-*)
__brewcomp "
--debug
--help
--quiet
--verbose
"
return
;;
*)
esac
__brewcomp "state on off"
}
_brew_dispatch_build_bottle() { _brew_dispatch_build_bottle() {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
case "${cur}" in case "${cur}" in
@ -2446,6 +2463,7 @@ _brew() {
create) _brew_create ;; create) _brew_create ;;
deps) _brew_deps ;; deps) _brew_deps ;;
desc) _brew_desc ;; desc) _brew_desc ;;
developer) _brew_developer ;;
dispatch-build-bottle) _brew_dispatch_build_bottle ;; dispatch-build-bottle) _brew_dispatch_build_bottle ;;
doctor) _brew_doctor ;; doctor) _brew_doctor ;;
dr) _brew_dr ;; dr) _brew_dr ;;

View File

@ -578,6 +578,16 @@ __fish_brew_complete_arg 'desc' -l verbose -d 'Make some output more verbose'
__fish_brew_complete_arg 'desc' -a '(__fish_brew_suggest_formulae_all)' __fish_brew_complete_arg 'desc' -a '(__fish_brew_suggest_formulae_all)'
__fish_brew_complete_cmd 'developer' 'Control Homebrew\'s developer mode'
__fish_brew_complete_sub_cmd 'developer' 'state'
__fish_brew_complete_sub_cmd 'developer' 'on'
__fish_brew_complete_sub_cmd 'developer' 'off'
__fish_brew_complete_arg 'developer' -l debug -d 'Display any debugging information'
__fish_brew_complete_arg 'developer' -l help -d 'Show this message'
__fish_brew_complete_arg 'developer' -l quiet -d 'Make some output more quiet'
__fish_brew_complete_arg 'developer' -l verbose -d 'Make some output more verbose'
__fish_brew_complete_cmd 'dispatch-build-bottle' 'Build bottles for these formulae with GitHub Actions' __fish_brew_complete_cmd 'dispatch-build-bottle' 'Build bottles for these formulae with GitHub Actions'
__fish_brew_complete_arg 'dispatch-build-bottle' -l debug -d 'Display any debugging information' __fish_brew_complete_arg 'dispatch-build-bottle' -l debug -d 'Display any debugging information'
__fish_brew_complete_arg 'dispatch-build-bottle' -l help -d 'Show this message' __fish_brew_complete_arg 'dispatch-build-bottle' -l help -d 'Show this message'

View File

@ -29,6 +29,7 @@ config
create create
deps deps
desc desc
developer
dispatch-build-bottle dispatch-build-bottle
doctor doctor
dr dr

View File

@ -155,6 +155,7 @@ __brew_internal_commands() {
'create:Generate a formula or, with `--cask`, a cask for the downloadable file at URL and open it in the editor' 'create:Generate a formula or, with `--cask`, a cask for the downloadable file at URL and open it in the editor'
'deps:Show dependencies for formula' 'deps:Show dependencies for formula'
'desc:Display formula'\''s name and one-line description' 'desc:Display formula'\''s name and one-line description'
'developer:Control Homebrew'\''s developer mode'
'dispatch-build-bottle:Build bottles for these formulae with GitHub Actions' 'dispatch-build-bottle:Build bottles for these formulae with GitHub Actions'
'doctor:Check your system for potential problems' 'doctor:Check your system for potential problems'
'edit:Open a formula or cask in the editor set by `EDITOR` or `HOMEBREW_EDITOR`, or open the Homebrew repository for editing if no formula is provided' 'edit:Open a formula or cask in the editor set by `EDITOR` or `HOMEBREW_EDITOR`, or open the Homebrew repository for editing if no formula is provided'
@ -710,6 +711,17 @@ _brew_desc() {
'*::formula:__brew_formulae' '*::formula:__brew_formulae'
} }
# brew developer
_brew_developer() {
_arguments \
'--debug[Display any debugging information]' \
'--help[Show this message]' \
'--quiet[Make some output more quiet]' \
'--verbose[Make some output more verbose]' \
- subcommand \
'*::subcommand:(state on off)'
}
# brew dispatch-build-bottle # brew dispatch-build-bottle
_brew_dispatch_build_bottle() { _brew_dispatch_build_bottle() {
_arguments \ _arguments \

View File

@ -184,6 +184,18 @@ first search, making that search slower than subsequent ones.
* `-d`, `--description`: * `-d`, `--description`:
Search just descriptions for *`text`*. If *`text`* is flanked by slashes, it is interpreted as a regular expression. Search just descriptions for *`text`*. If *`text`* is flanked by slashes, it is interpreted as a regular expression.
### `developer` [*`subcommand`*]
Control Homebrew's developer mode. When developer mode is enabled,
`brew update` will update Homebrew to the latest commit on the `master`
branch instead of the latest stable version along with some other behaviour changes.
`brew developer` [`state`]
<br>Display the current state of Homebrew's developer mode.
`brew developer` (`on`|`off`)
<br>Turn Homebrew's developer mode on or off respectively.
### `doctor`, `dr` [*`--list-checks`*] [*`--audit-debug`*] [*`diagnostic_check`* ...] ### `doctor`, `dr` [*`--list-checks`*] [*`--audit-debug`*] [*`diagnostic_check`* ...]
Check your system for potential problems. Will exit with a non-zero status Check your system for potential problems. Will exit with a non-zero status

View File

@ -229,6 +229,17 @@ Search just names for \fItext\fR\. If \fItext\fR is flanked by slashes, it is in
\fB\-d\fR, \fB\-\-description\fR \fB\-d\fR, \fB\-\-description\fR
Search just descriptions for \fItext\fR\. If \fItext\fR is flanked by slashes, it is interpreted as a regular expression\. Search just descriptions for \fItext\fR\. If \fItext\fR is flanked by slashes, it is interpreted as a regular expression\.
. .
.SS "\fBdeveloper\fR [\fIsubcommand\fR]"
Control Homebrew\'s developer mode\. When developer mode is enabled, \fBbrew update\fR will update Homebrew to the latest commit on the \fBmaster\fR branch instead of the latest stable version along with some other behaviour changes\.
.
.P
\fBbrew developer\fR [\fBstate\fR]
Display the current state of Homebrew\'s developer mode\.
.
.P
\fBbrew developer\fR (\fBon\fR|\fBoff\fR)
Turn Homebrew\'s developer mode on or off respectively\.
.
.SS "\fBdoctor\fR, \fBdr\fR [\fI\-\-list\-checks\fR] [\fI\-\-audit\-debug\fR] [\fIdiagnostic_check\fR \.\.\.]" .SS "\fBdoctor\fR, \fBdr\fR [\fI\-\-list\-checks\fR] [\fI\-\-audit\-debug\fR] [\fIdiagnostic_check\fR \.\.\.]"
Check your system for potential problems\. Will exit with a non\-zero status if any potential problems are found\. Please note that these warnings are just used to help the Homebrew maintainers with debugging if you file an issue\. If everything you use Homebrew for is working fine: please don\'t worry or file an issue; just ignore this\. Check your system for potential problems\. Will exit with a non\-zero status if any potential problems are found\. Please note that these warnings are just used to help the Homebrew maintainers with debugging if you file an issue\. If everything you use Homebrew for is working fine: please don\'t worry or file an issue; just ignore this\.
. .