94 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			94 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|  | HOMEBREW_HELP = <<~EOS.freeze | ||
|  |   Example usage: | ||
|  |     brew search [TEXT|/REGEX/] | ||
|  |     brew info [FORMULA...] | ||
|  |     brew install FORMULA... | ||
|  |     brew update | ||
|  |     brew upgrade [FORMULA...] | ||
|  |     brew uninstall FORMULA... | ||
|  |     brew list [FORMULA...] | ||
|  | 
 | ||
|  |   Troubleshooting: | ||
|  |     brew config | ||
|  |     brew doctor | ||
|  |     brew install --verbose --debug FORMULA | ||
|  | 
 | ||
|  |   Contributing: | ||
|  |     brew create [URL [--no-fetch]] | ||
|  |     brew edit [FORMULA...] | ||
|  | 
 | ||
|  |   Further help: | ||
|  |     brew commands | ||
|  |     brew help [COMMAND] | ||
|  |     man brew | ||
|  |     https://docs.brew.sh | ||
|  | EOS | ||
|  | 
 | ||
|  | # 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. | ||
|  | # NOTE The reason the string is at the top is so 25 lines is easy to measure! | ||
|  | 
 | ||
|  | require "commands" | ||
|  | 
 | ||
|  | module Homebrew | ||
|  |   module Help | ||
|  |     module_function | ||
|  | 
 | ||
|  |     def help(cmd = nil, flags = {}) | ||
|  |       # Resolve command aliases and find file containing the implementation. | ||
|  |       if cmd | ||
|  |         cmd = HOMEBREW_INTERNAL_COMMAND_ALIASES.fetch(cmd, cmd) | ||
|  |         path = Commands.path(cmd) | ||
|  |         path ||= which("brew-#{cmd}") | ||
|  |         path ||= which("brew-#{cmd}.rb") | ||
|  |       end | ||
|  | 
 | ||
|  |       # Display command-specific (or generic) help in response to `UsageError`. | ||
|  |       if (error_message = flags[:usage_error]) | ||
|  |         $stderr.puts path ? command_help(path) : HOMEBREW_HELP | ||
|  |         $stderr.puts | ||
|  |         onoe error_message | ||
|  |         exit 1
 | ||
|  |       end | ||
|  | 
 | ||
|  |       # Handle `brew` (no arguments). | ||
|  |       if flags[:empty_argv] | ||
|  |         $stderr.puts HOMEBREW_HELP | ||
|  |         exit 1
 | ||
|  |       end | ||
|  | 
 | ||
|  |       # Handle `brew (-h|--help|--usage|-?|help)` (no other arguments). | ||
|  |       if cmd.nil? | ||
|  |         puts HOMEBREW_HELP | ||
|  |         exit 0
 | ||
|  |       end | ||
|  | 
 | ||
|  |       # Resume execution in `brew.rb` for unknown commands. | ||
|  |       return if path.nil? | ||
|  | 
 | ||
|  |       # Display help for internal command (or generic help if undocumented). | ||
|  |       puts command_help(path) | ||
|  |       exit 0
 | ||
|  |     end | ||
|  | 
 | ||
|  |     def command_help(path) | ||
|  |       help_lines = command_help_lines(path) | ||
|  |       if help_lines.empty? | ||
|  |         opoo "No help text in: #{path}" if ARGV.homebrew_developer? | ||
|  |         HOMEBREW_HELP | ||
|  |       else | ||
|  |         help_lines.map do |line| | ||
|  |           line.sub(/^  \* /, "#{Tty.bold}brew#{Tty.reset} ") | ||
|  |               .gsub(/`(.*?)`/, "#{Tty.bold}\\1#{Tty.reset}") | ||
|  |               .gsub(%r{<([^\s]+?://[^\s]+?)>}) { |url| Formatter.url(url) } | ||
|  |               .gsub(/<(.*?)>/, "#{Tty.underline}\\1#{Tty.reset}") | ||
|  |               .gsub("@hide_from_man_page", "") | ||
|  |         end.join.strip | ||
|  |       end | ||
|  |     end | ||
|  |   end | ||
|  | end |