diff options
Diffstat (limited to 'lib/rubygems/commands/help_command.rb')
-rw-r--r-- | lib/rubygems/commands/help_command.rb | 140 |
1 files changed, 55 insertions, 85 deletions
diff --git a/lib/rubygems/commands/help_command.rb b/lib/rubygems/commands/help_command.rb index ed7be903ac..7f1fb486e0 100644 --- a/lib/rubygems/commands/help_command.rb +++ b/lib/rubygems/commands/help_command.rb @@ -46,10 +46,6 @@ Some examples of 'gem' usage. * Update all gems on your system: gem update - -* Update your local version of RubyGems - - gem update --system EOF PLATFORMS = <<-'EOF' @@ -59,9 +55,8 @@ your current platform by running `gem environment`. RubyGems matches platforms as follows: - * The CPU must match exactly unless one of the platforms has - "universal" as the CPU or the local CPU starts with "arm" and the gem's - CPU is exactly "arm" (for gems that support generic ARM architecture). + * The CPU must match exactly, unless one of the platforms has + "universal" as the CPU. * The OS must match exactly. * The versions must match exactly unless one of the versions is nil. @@ -71,20 +66,11 @@ you pass must match "#{cpu}-#{os}" or "#{cpu}-#{os}-#{version}". On mswin platforms, the version is the compiler version, not the OS version. (Ruby compiled with VC6 uses "60" as the compiler version, VC8 uses "80".) -For the ARM architecture, gems with a platform of "arm-linux" should run on a -reasonable set of ARM CPUs and not depend on instructions present on a limited -subset of the architecture. For example, the binary should run on platforms -armv5, armv6hf, armv6l, armv7, etc. If you use the "arm-linux" platform -please test your gem on a variety of ARM hardware before release to ensure it -functions correctly. - Example platforms: x86-freebsd # Any FreeBSD version on an x86 CPU universal-darwin-8 # Darwin 8 only gems that run on any CPU x86-mswin32-80 # Windows gems compiled with VC8 - armv7-linux # Gem complied for an ARMv7 CPU running linux - arm-linux # Gem compiled for any ARM CPU running linux When building platform gems, set the platform in the gem specification to Gem::Platform::CURRENT. This will correctly mark the gem with your ruby's @@ -94,8 +80,6 @@ platform. def initialize super 'help', "Provide help on the 'gem' command" - - @command_manager = Gem::CommandManager.instance end def arguments # :nodoc: @@ -112,92 +96,78 @@ platform. end def execute + command_manager = Gem::CommandManager.instance arg = options[:args][0] if begins? "commands", arg then - show_commands - - elsif begins? "options", arg then - say Gem::Command::HELP + out = [] + out << "GEM commands are:" + out << nil - elsif begins? "examples", arg then - say EXAMPLES + margin_width = 4 - elsif begins? "platforms", arg then - say PLATFORMS + desc_width = command_manager.command_names.map { |n| n.size }.max + 4 - elsif options[:help] then - show_help + summary_width = 80 - margin_width - desc_width + wrap_indent = ' ' * (margin_width + desc_width) + format = "#{' ' * margin_width}%-#{desc_width}s%s" - elsif arg then - show_command_help arg + command_manager.command_names.each do |cmd_name| + command = command_manager[cmd_name] - else - say Gem::Command::HELP - end - end + summary = + if command then + command.summary + else + "[No command found for #{cmd_name}, bug?]" + end - def show_commands # :nodoc: - out = [] - out << "GEM commands are:" - out << nil + summary = wrap(summary, summary_width).split "\n" + out << sprintf(format, cmd_name, summary.shift) + until summary.empty? do + out << "#{wrap_indent}#{summary.shift}" + end + end - margin_width = 4 + out << nil + out << "For help on a particular command, use 'gem help COMMAND'." + out << nil + out << "Commands may be abbreviated, so long as they are unambiguous." + out << "e.g. 'gem i rake' is short for 'gem install rake'." - desc_width = @command_manager.command_names.map { |n| n.size }.max + 4 + say out.join("\n") - summary_width = 80 - margin_width - desc_width - wrap_indent = ' ' * (margin_width + desc_width) - format = "#{' ' * margin_width}%-#{desc_width}s%s" + elsif begins? "options", arg then + say Gem::Command::HELP - @command_manager.command_names.each do |cmd_name| - command = @command_manager[cmd_name] + elsif begins? "examples", arg then + say EXAMPLES - summary = - if command then - command.summary - else - "[No command found for #{cmd_name}]" - end + elsif begins? "platforms", arg then + say PLATFORMS - summary = wrap(summary, summary_width).split "\n" - out << sprintf(format, cmd_name, summary.shift) - until summary.empty? do - out << "#{wrap_indent}#{summary.shift}" + elsif options[:help] then + command = command_manager[options[:help]] + if command + # help with provided command + command.invoke("--help") + else + alert_error "Unknown command #{options[:help]}. Try 'gem help commands'" end - end - out << nil - out << "For help on a particular command, use 'gem help COMMAND'." - out << nil - out << "Commands may be abbreviated, so long as they are unambiguous." - out << "e.g. 'gem i rake' is short for 'gem install rake'." - - say out.join("\n") - end - - def show_command_help command_name # :nodoc: - command_name = command_name.downcase - - possibilities = @command_manager.find_command_possibilities command_name - - if possibilities.size == 1 then - command = @command_manager[possibilities.first] - command.invoke("--help") - elsif possibilities.size > 1 then - alert_warning "Ambiguous command #{command_name} (#{possibilities.join(', ')})" - else - alert_warning "Unknown command #{command_name}. Try: gem help commands" - end - end + elsif arg then + possibilities = command_manager.find_command_possibilities(arg.downcase) + if possibilities.size == 1 + command = command_manager[possibilities.first] + command.invoke("--help") + elsif possibilities.size > 1 + alert_warning "Ambiguous command #{arg} (#{possibilities.join(', ')})" + else + alert_warning "Unknown command #{arg}. Try gem help commands" + end - def show_help # :nodoc: - command = @command_manager[options[:help]] - if command then - # help with provided command - command.invoke("--help") else - alert_error "Unknown command #{options[:help]}. Try 'gem help commands'" + say Gem::Command::HELP end end |