summaryrefslogtreecommitdiff
path: root/lib/rubygems/command_manager.rb
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-06-09 21:38:59 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-06-09 21:38:59 +0000
commit31c94ffeb5f09d09ac2c86fc9e6614e38251a43d (patch)
tree10e44506238c7af3d7c9d822111996731726e38d /lib/rubygems/command_manager.rb
parenta6afbaeb3be396c0fdea3b9077d9256c59edcfca (diff)
Update to RubyGems 1.3.4 r2223
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23659 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rubygems/command_manager.rb')
-rw-r--r--lib/rubygems/command_manager.rb260
1 files changed, 144 insertions, 116 deletions
diff --git a/lib/rubygems/command_manager.rb b/lib/rubygems/command_manager.rb
index 5a8dec4..0a19016 100644
--- a/lib/rubygems/command_manager.rb
+++ b/lib/rubygems/command_manager.rb
@@ -8,139 +8,167 @@ require 'timeout'
require 'rubygems/command'
require 'rubygems/user_interaction'
-module Gem
+##
+# The command manager registers and installs all the individual sub-commands
+# supported by the gem command.
+#
+# Extra commands can be provided by writing a rubygems_plugin.rb
+# file in an installed gem. You should register your command against the
+# Gem::CommandManager instance, like this:
+#
+# # file rubygems_plugin.rb
+# require 'rubygems/command_manager'
+#
+# class Gem::Commands::EditCommand < Gem::Command
+# # ...
+# end
+#
+# Gem::CommandManager.instance.register_command :edit
+#
+# See Gem::Command for instructions on writing gem commands.
+
+class Gem::CommandManager
+
+ include Gem::UserInteraction
+
+ ##
+ # Return the authoritative instance of the command manager.
+
+ def self.instance
+ @command_manager ||= new
+ end
- ####################################################################
- # The command manager registers and installs all the individual
- # sub-commands supported by the gem command.
- class CommandManager
- include UserInteraction
+ ##
+ # Register all the subcommands supported by the gem command.
+
+ def initialize
+ @commands = {}
+ register_command :build
+ register_command :cert
+ register_command :check
+ register_command :cleanup
+ register_command :contents
+ register_command :dependency
+ register_command :environment
+ register_command :fetch
+ register_command :generate_index
+ register_command :help
+ register_command :install
+ register_command :list
+ register_command :lock
+ register_command :mirror
+ register_command :outdated
+ register_command :pristine
+ register_command :query
+ register_command :rdoc
+ register_command :search
+ register_command :server
+ register_command :sources
+ register_command :specification
+ register_command :stale
+ register_command :uninstall
+ register_command :unpack
+ register_command :update
+ register_command :which
+ end
- # Return the authoritative instance of the command manager.
- def self.instance
- @command_manager ||= CommandManager.new
- end
+ ##
+ # Register the command object.
- # Register all the subcommands supported by the gem command.
- def initialize
- @commands = {}
- register_command :build
- register_command :cert
- register_command :check
- register_command :cleanup
- register_command :contents
- register_command :dependency
- register_command :environment
- register_command :fetch
- register_command :generate_index
- register_command :help
- register_command :install
- register_command :list
- register_command :lock
- register_command :mirror
- register_command :outdated
- register_command :pristine
- register_command :query
- register_command :rdoc
- register_command :search
- register_command :server
- register_command :sources
- register_command :specification
- register_command :stale
- register_command :uninstall
- register_command :unpack
- register_command :update
- register_command :which
- end
+ def register_command(command_obj)
+ @commands[command_obj] = false
+ end
- # Register the command object.
- def register_command(command_obj)
- @commands[command_obj] = false
- end
+ ##
+ # Return the registered command from the command name.
- # Return the registered command from the command name.
- def [](command_name)
- command_name = command_name.intern
- return nil if @commands[command_name].nil?
- @commands[command_name] ||= load_and_instantiate(command_name)
- end
+ def [](command_name)
+ command_name = command_name.intern
+ return nil if @commands[command_name].nil?
+ @commands[command_name] ||= load_and_instantiate(command_name)
+ end
- # Return a list of all command names (as strings).
- def command_names
- @commands.keys.collect {|key| key.to_s}.sort
- end
+ ##
+ # Return a sorted list of all command names (as strings).
+
+ def command_names
+ @commands.keys.collect {|key| key.to_s}.sort
+ end
- # Run the config specified by +args+.
- def run(args)
- process_args(args)
- rescue StandardError, Timeout::Error => ex
- alert_error "While executing gem ... (#{ex.class})\n #{ex.to_s}"
- ui.errs.puts "\t#{ex.backtrace.join "\n\t"}" if
- Gem.configuration.backtrace
+ ##
+ # Run the config specified by +args+.
+
+ def run(args)
+ process_args(args)
+ rescue StandardError, Timeout::Error => ex
+ alert_error "While executing gem ... (#{ex.class})\n #{ex.to_s}"
+ ui.errs.puts "\t#{ex.backtrace.join "\n\t"}" if
+ Gem.configuration.backtrace
+ terminate_interaction(1)
+ rescue Interrupt
+ alert_error "Interrupted"
+ terminate_interaction(1)
+ end
+
+ def process_args(args)
+ args = args.to_str.split(/\s+/) if args.respond_to?(:to_str)
+ if args.size == 0
+ say Gem::Command::HELP
terminate_interaction(1)
- rescue Interrupt
- alert_error "Interrupted"
+ end
+ case args[0]
+ when '-h', '--help'
+ say Gem::Command::HELP
+ terminate_interaction(0)
+ when '-v', '--version'
+ say Gem::RubyGemsVersion
+ terminate_interaction(0)
+ when /^-/
+ alert_error "Invalid option: #{args[0]}. See 'gem --help'."
terminate_interaction(1)
+ else
+ cmd_name = args.shift.downcase
+ cmd = find_command(cmd_name)
+ cmd.invoke(*args)
end
+ end
- def process_args(args)
- args = args.to_str.split(/\s+/) if args.respond_to?(:to_str)
- if args.size == 0
- say Gem::Command::HELP
- terminate_interaction(1)
- end
- case args[0]
- when '-h', '--help'
- say Gem::Command::HELP
- terminate_interaction(0)
- when '-v', '--version'
- say Gem::RubyGemsVersion
- terminate_interaction(0)
- when /^-/
- alert_error "Invalid option: #{args[0]}. See 'gem --help'."
- terminate_interaction(1)
- else
- cmd_name = args.shift.downcase
- cmd = find_command(cmd_name)
- cmd.invoke(*args)
- end
+ def find_command(cmd_name)
+ possibilities = find_command_possibilities cmd_name
+ if possibilities.size > 1 then
+ raise "Ambiguous command #{cmd_name} matches [#{possibilities.join(', ')}]"
+ elsif possibilities.size < 1 then
+ raise "Unknown command #{cmd_name}"
end
- def find_command(cmd_name)
- possibilities = find_command_possibilities(cmd_name)
- if possibilities.size > 1
- raise "Ambiguous command #{cmd_name} matches [#{possibilities.join(', ')}]"
- end
- if possibilities.size < 1
- raise "Unknown command #{cmd_name}"
- end
+ self[possibilities.first]
+ end
- self[possibilities.first]
- end
+ def find_command_possibilities(cmd_name)
+ len = cmd_name.length
- def find_command_possibilities(cmd_name)
- len = cmd_name.length
- self.command_names.select { |n| cmd_name == n[0,len] }
- end
+ command_names.select { |n| cmd_name == n[0, len] }
+ end
+
+ private
+
+ def load_and_instantiate(command_name)
+ command_name = command_name.to_s
+ retried = false
- private
-
- def load_and_instantiate(command_name)
- command_name = command_name.to_s
- retried = false
-
- begin
- const_name = command_name.capitalize.gsub(/_(.)/) { $1.upcase }
- Gem::Commands.const_get("#{const_name}Command").new
- rescue NameError
- if retried then
- raise
- else
- retried = true
- require "rubygems/commands/#{command_name}_command"
- retry
- end
+ begin
+ const_name = command_name.capitalize.gsub(/_(.)/) { $1.upcase }
+ Gem::Commands.const_get("#{const_name}Command").new
+ rescue NameError
+ if retried then
+ raise
+ else
+ retried = true
+ require "rubygems/commands/#{command_name}_command"
+ retry
end
end
end
+
end
+