From 3503806e772ad0c5cfc4311bb816c1735c5b9e81 Mon Sep 17 00:00:00 2001
From: Martin Afanasjew <martin@afanasjew.de>
Date: Sun, 17 Apr 2016 03:45:10 +0200
Subject: [PATCH] help: handle help output (move from 'brew.rb')

Keep the footprint of `brew.rb` small. Handle fetching/displaying an
appropriate help text (taking into account various external conditions)
in the `help` command.
---
 Library/Homebrew/cmd/help.rb | 28 ++++++++++++++++++++++++++--
 Library/brew.rb              | 26 +++-----------------------
 2 files changed, 29 insertions(+), 25 deletions(-)

diff --git a/Library/Homebrew/cmd/help.rb b/Library/Homebrew/cmd/help.rb
index 77b5627457..d82ed8c203 100644
--- a/Library/Homebrew/cmd/help.rb
+++ b/Library/Homebrew/cmd/help.rb
@@ -32,14 +32,38 @@ EOS
 # NOTE The reason the string is at the top is so 25 lines is easy to measure!
 
 module Homebrew
-  def help
-    puts HOMEBREW_HELP
+  def help(cmd = nil, empty_argv = false)
+    # Handle `brew` (no arguments).
+    if 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
+
+    # Get help text and if `nil` (external commands), resume in `brew.rb`.
+    help_text = help_for_command(cmd)
+    return if help_text.nil?
+
+    # Display help for internal command (or generic help if undocumented).
+    if help_text.empty?
+      opoo "No help available for '#{cmd}' command."
+      help_text = HOMEBREW_HELP
+    end
+    puts help_text
+    exit 0
   end
 
   def help_s
     HOMEBREW_HELP
   end
 
+  private
+
   def help_for_command(cmd)
     cmd = HOMEBREW_INTERNAL_COMMAND_ALIASES.fetch(cmd, cmd)
     cmd_path = if File.exist?(HOMEBREW_LIBRARY_PATH/"cmd/#{cmd}.sh")
diff --git a/Library/brew.rb b/Library/brew.rb
index a70c5755ec..7207e22b69 100644
--- a/Library/brew.rb
+++ b/Library/brew.rb
@@ -68,29 +68,9 @@ begin
   #
   # It should never affect external commands so they can handle usage
   # arguments themselves.
-
-  if empty_argv
-    $stderr.puts ARGV.usage
-    exit 1
-  elsif help_flag
-    if cmd.nil?
-      puts ARGV.usage
-      exit 0
-    else
-      # Handle both internal ruby and shell commands
-      require "cmd/help"
-      help_text = Homebrew.help_for_command(cmd)
-      if help_text.nil?
-        # External command, let it handle help by itself
-      elsif help_text.empty?
-        opoo "No help available for '#{cmd}' command."
-        puts ARGV.usage
-        exit 0
-      else
-        puts help_text
-        exit 0
-      end
-    end
+  if empty_argv || help_flag
+    require "cmd/help"
+    Homebrew.help cmd, empty_argv # Never returns, except for external command.
   end
 
   if internal_cmd
-- 
GitLab