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
|
exit 0
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
source "${HOMEBREW_LIBRARY}/Homebrew/help.sh"
|
||||||
|
|
||||||
# functions that take multiple arguments or handle multiple commands.
|
# functions that take multiple arguments or handle multiple commands.
|
||||||
# doesn't need a default case as other arguments handled elsewhere.
|
# doesn't need a default case as other arguments handled elsewhere.
|
||||||
# shellcheck disable=SC2249
|
# shellcheck disable=SC2249
|
||||||
@ -162,6 +165,10 @@ case "$@" in
|
|||||||
source "${HOMEBREW_LIBRARY}/Homebrew/list.sh"
|
source "${HOMEBREW_LIBRARY}/Homebrew/list.sh"
|
||||||
homebrew-list "$@" && exit 0
|
homebrew-list "$@" && exit 0
|
||||||
;;
|
;;
|
||||||
|
# falls back to cmd/help.rb on a non-zero return
|
||||||
|
help | "")
|
||||||
|
homebrew-help "$@" && exit 0
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
#####
|
#####
|
||||||
@ -683,6 +690,7 @@ HOMEBREW_USER_AGENT_CURL="${HOMEBREW_USER_AGENT} ${curl_name_and_version// //}"
|
|||||||
HOMEBREW_CURL_SPEED_LIMIT=100
|
HOMEBREW_CURL_SPEED_LIMIT=100
|
||||||
HOMEBREW_CURL_SPEED_TIME=5
|
HOMEBREW_CURL_SPEED_TIME=5
|
||||||
|
|
||||||
|
export HOMEBREW_HELP_MESSAGE
|
||||||
export HOMEBREW_VERSION
|
export HOMEBREW_VERSION
|
||||||
export HOMEBREW_MACOS_ARM_DEFAULT_PREFIX
|
export HOMEBREW_MACOS_ARM_DEFAULT_PREFIX
|
||||||
export HOMEBREW_LINUX_DEFAULT_PREFIX
|
export HOMEBREW_LINUX_DEFAULT_PREFIX
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
require_relative "startup"
|
require_relative "startup"
|
||||||
|
|
||||||
|
HOMEBREW_HELP_MESSAGE = ENV.fetch("HOMEBREW_HELP_MESSAGE").freeze
|
||||||
|
|
||||||
HOMEBREW_API_DEFAULT_DOMAIN = ENV.fetch("HOMEBREW_API_DEFAULT_DOMAIN").freeze
|
HOMEBREW_API_DEFAULT_DOMAIN = ENV.fetch("HOMEBREW_API_DEFAULT_DOMAIN").freeze
|
||||||
HOMEBREW_BOTTLE_DEFAULT_DOMAIN = ENV.fetch("HOMEBREW_BOTTLE_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
|
HOMEBREW_BREW_DEFAULT_GIT_REMOTE = ENV.fetch("HOMEBREW_BREW_DEFAULT_GIT_REMOTE").freeze
|
||||||
|
@ -7,48 +7,16 @@ require "commands"
|
|||||||
module Homebrew
|
module Homebrew
|
||||||
# Helper module for printing help output.
|
# Helper module for printing help output.
|
||||||
module Help
|
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: [])
|
def self.help(cmd = nil, empty_argv: false, usage_error: nil, remaining_args: [])
|
||||||
if cmd.nil?
|
if cmd.nil?
|
||||||
# Handle `brew` (no arguments).
|
# Handle `brew` (no arguments).
|
||||||
if empty_argv
|
if empty_argv
|
||||||
$stderr.puts HOMEBREW_HELP
|
$stderr.puts HOMEBREW_HELP_MESSAGE
|
||||||
exit 1
|
exit 1
|
||||||
end
|
end
|
||||||
|
|
||||||
# Handle `brew (-h|--help|--usage|-?|help)` (no other arguments).
|
# Handle `brew (-h|--help|--usage|-?|help)` (no other arguments).
|
||||||
puts HOMEBREW_HELP
|
puts HOMEBREW_HELP_MESSAGE
|
||||||
exit 0
|
exit 0
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -57,7 +25,7 @@ module Homebrew
|
|||||||
|
|
||||||
# Display command-specific (or generic) help in response to `UsageError`.
|
# Display command-specific (or generic) help in response to `UsageError`.
|
||||||
if usage_error
|
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
|
$stderr.puts
|
||||||
onoe usage_error
|
onoe usage_error
|
||||||
exit 1
|
exit 1
|
||||||
@ -83,7 +51,7 @@ module Homebrew
|
|||||||
|
|
||||||
output ||= if output.blank?
|
output ||= if output.blank?
|
||||||
opoo "No help text in: #{path}" if Homebrew::EnvConfig.developer?
|
opoo "No help text in: #{path}" if Homebrew::EnvConfig.developer?
|
||||||
HOMEBREW_HELP
|
HOMEBREW_HELP_MESSAGE
|
||||||
end
|
end
|
||||||
|
|
||||||
output
|
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