Port brew help
(without arguments) to Bash
This provides a decent speedup: ``` $ hyperfine 'git checkout master; brew help' 'git checkout help_bash; brew help' Benchmark 1: git checkout master; brew help Time (mean ± σ): 506.4 ms ± 50.9 ms [User: 223.7 ms, System: 99.9 ms] Range (min … max): 454.6 ms … 634.1 ms 10 runs Benchmark 2: git checkout help_bash; brew help Time (mean ± σ): 109.5 ms ± 57.1 ms [User: 1 ``` and compares favourably to `pip3 help`: ``` $ hyperfine 'brew help' 'pip3 help' Benchmark 1: brew help Time (mean ± σ): 72.9 ms ± 15.9 ms [User: 4.9 ms, System: 6.3 ms] Range (min … max): 53.6 ms … 126.6 ms 31 runs Benchmark 2: pip3 help Time (mean ± σ): 171.5 ms ± 6.1 ms [User: 131.6 ms, System: 24.7 ms] Range (min … max): 164.2 ms … 189.3 ms 15 runs Summary brew help ran 2.35 ± 0.52 times faster than pip3 help ```
This commit is contained in:
parent
b9da669ef2
commit
4c012a41c6
@ -127,6 +127,9 @@ case "$1" in
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
source "${HOMEBREW_LIBRARY}/Homebrew/help.sh"
|
||||
|
||||
# functions that take multiple arguments or handle multiple commands.
|
||||
# doesn't need a default case as other arguments handled elsewhere.
|
||||
# shellcheck disable=SC2249
|
||||
@ -162,6 +165,10 @@ case "$@" in
|
||||
source "${HOMEBREW_LIBRARY}/Homebrew/list.sh"
|
||||
homebrew-list "$@" && exit 0
|
||||
;;
|
||||
# falls back to cmd/help.rb on a non-zero return
|
||||
help | "")
|
||||
homebrew-help "$@" && exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
#####
|
||||
@ -683,6 +690,7 @@ HOMEBREW_USER_AGENT_CURL="${HOMEBREW_USER_AGENT} ${curl_name_and_version// //}"
|
||||
HOMEBREW_CURL_SPEED_LIMIT=100
|
||||
HOMEBREW_CURL_SPEED_TIME=5
|
||||
|
||||
export HOMEBREW_HELP_MESSAGE
|
||||
export HOMEBREW_VERSION
|
||||
export HOMEBREW_MACOS_ARM_DEFAULT_PREFIX
|
||||
export HOMEBREW_LINUX_DEFAULT_PREFIX
|
||||
|
@ -3,6 +3,8 @@
|
||||
|
||||
require_relative "startup"
|
||||
|
||||
HOMEBREW_HELP_MESSAGE = ENV.fetch("HOMEBREW_HELP_MESSAGE").freeze
|
||||
|
||||
HOMEBREW_API_DEFAULT_DOMAIN = ENV.fetch("HOMEBREW_API_DEFAULT_DOMAIN").freeze
|
||||
HOMEBREW_BOTTLE_DEFAULT_DOMAIN = ENV.fetch("HOMEBREW_BOTTLE_DEFAULT_DOMAIN").freeze
|
||||
HOMEBREW_BREW_DEFAULT_GIT_REMOTE = ENV.fetch("HOMEBREW_BREW_DEFAULT_GIT_REMOTE").freeze
|
||||
|
@ -7,48 +7,16 @@ require "commands"
|
||||
module Homebrew
|
||||
# Helper module for printing help output.
|
||||
module Help
|
||||
# NOTE: Keep the length of vanilla `--help` less than 25 lines!
|
||||
# This is because the default Terminal height is 25 lines. Scrolling sucks
|
||||
# and concision is important. If more help is needed we should start
|
||||
# specialising help like the gem command does.
|
||||
# NOTE: Keep lines less than 80 characters! Wrapping is just not cricket.
|
||||
HOMEBREW_HELP = <<~EOS
|
||||
Example usage:
|
||||
brew search TEXT|/REGEX/
|
||||
brew info [FORMULA|CASK...]
|
||||
brew install FORMULA|CASK...
|
||||
brew update
|
||||
brew upgrade [FORMULA|CASK...]
|
||||
brew uninstall FORMULA|CASK...
|
||||
brew list [FORMULA|CASK...]
|
||||
|
||||
Troubleshooting:
|
||||
brew config
|
||||
brew doctor
|
||||
brew install --verbose --debug FORMULA|CASK
|
||||
|
||||
Contributing:
|
||||
brew create URL [--no-fetch]
|
||||
brew edit [FORMULA|CASK...]
|
||||
|
||||
Further help:
|
||||
brew commands
|
||||
brew help [COMMAND]
|
||||
man brew
|
||||
https://docs.brew.sh
|
||||
EOS
|
||||
private_constant :HOMEBREW_HELP
|
||||
|
||||
def self.help(cmd = nil, empty_argv: false, usage_error: nil, remaining_args: [])
|
||||
if cmd.nil?
|
||||
# Handle `brew` (no arguments).
|
||||
if empty_argv
|
||||
$stderr.puts HOMEBREW_HELP
|
||||
$stderr.puts HOMEBREW_HELP_MESSAGE
|
||||
exit 1
|
||||
end
|
||||
|
||||
# Handle `brew (-h|--help|--usage|-?|help)` (no other arguments).
|
||||
puts HOMEBREW_HELP
|
||||
puts HOMEBREW_HELP_MESSAGE
|
||||
exit 0
|
||||
end
|
||||
|
||||
@ -57,7 +25,7 @@ module Homebrew
|
||||
|
||||
# Display command-specific (or generic) help in response to `UsageError`.
|
||||
if usage_error
|
||||
$stderr.puts path ? command_help(cmd, path, remaining_args:) : HOMEBREW_HELP
|
||||
$stderr.puts path ? command_help(cmd, path, remaining_args:) : HOMEBREW_HELP_MESSAGE
|
||||
$stderr.puts
|
||||
onoe usage_error
|
||||
exit 1
|
||||
@ -83,7 +51,7 @@ module Homebrew
|
||||
|
||||
output ||= if output.blank?
|
||||
opoo "No help text in: #{path}" if Homebrew::EnvConfig.developer?
|
||||
HOMEBREW_HELP
|
||||
HOMEBREW_HELP_MESSAGE
|
||||
end
|
||||
|
||||
output
|
||||
|
48
Library/Homebrew/help.sh
Normal file
48
Library/Homebrew/help.sh
Normal file
@ -0,0 +1,48 @@
|
||||
#: * `help`
|
||||
#:
|
||||
#: Outputs the usage instructions for `brew`.
|
||||
#:
|
||||
|
||||
# NOTE: Keep the length of vanilla `--help` less than 25 lines!
|
||||
# This is because the default Terminal height is 25 lines. Scrolling sucks
|
||||
# and concision is important. If more help is needed we should start
|
||||
# specialising help like the gem command does.
|
||||
# NOTE: Keep lines less than 80 characters! Wrapping is just not cricket.
|
||||
HOMEBREW_HELP_MESSAGE=$(
|
||||
cat <<'EOS'
|
||||
Example usage:
|
||||
brew search TEXT|/REGEX/
|
||||
brew info [FORMULA|CASK...]
|
||||
brew install FORMULA|CASK...
|
||||
brew update
|
||||
brew upgrade [FORMULA|CASK...]
|
||||
brew uninstall FORMULA|CASK...
|
||||
brew list [FORMULA|CASK...]
|
||||
|
||||
Troubleshooting:
|
||||
brew config
|
||||
brew doctor
|
||||
brew install --verbose --debug FORMULA|CASK
|
||||
|
||||
Contributing:
|
||||
brew create URL [--no-fetch]
|
||||
brew edit [FORMULA|CASK...]
|
||||
|
||||
Further help:
|
||||
brew commands
|
||||
brew help [COMMAND]
|
||||
man brew
|
||||
https://docs.brew.sh
|
||||
EOS
|
||||
)
|
||||
|
||||
homebrew-help() {
|
||||
if [[ -z "$*" ]]
|
||||
then
|
||||
echo "${HOMEBREW_HELP_MESSAGE}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "${HOMEBREW_HELP_MESSAGE}"
|
||||
return 0
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user