diff options
Diffstat (limited to 'ruby_1_9_3/lib/rubygems/commands/check_command.rb')
-rw-r--r-- | ruby_1_9_3/lib/rubygems/commands/check_command.rb | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/ruby_1_9_3/lib/rubygems/commands/check_command.rb b/ruby_1_9_3/lib/rubygems/commands/check_command.rb new file mode 100644 index 0000000000..5a1bfd4f12 --- /dev/null +++ b/ruby_1_9_3/lib/rubygems/commands/check_command.rb @@ -0,0 +1,65 @@ +require 'rubygems/command' +require 'rubygems/version_option' +require 'rubygems/validator' + +class Gem::Commands::CheckCommand < Gem::Command + + include Gem::VersionOption + + def initialize + super 'check', 'Check installed gems', + :verify => false, :alien => false + + add_option( '--verify FILE', + 'Verify gem file against its internal', + 'checksum') do |value, options| + options[:verify] = value + end + + add_option('-a', '--alien', "Report 'unmanaged' or rogue files in the", + "gem repository") do |value, options| + options[:alien] = true + end + + add_version_option 'check' + end + + def execute + if options[:alien] + say "Performing the 'alien' operation" + say + gems = get_all_gem_names rescue [] + Gem::Validator.new.alien(gems).sort.each do |key, val| + unless val.empty? then + say "#{key} has #{val.size} problems" + val.each do |error_entry| + say " #{error_entry.path}:" + say " #{error_entry.problem}" + end + else + say "#{key} is error-free" if Gem.configuration.verbose + end + say + end + end + + if options[:verify] + gem_name = options[:verify] + unless gem_name + alert_error "Must specify a .gem file with --verify NAME" + return + end + unless File.exist?(gem_name) + alert_error "Unknown file: #{gem_name}." + return + end + say "Verifying gem: '#{gem_name}'" + begin + Gem::Validator.new.verify_gem_file(gem_name) + rescue Exception + alert_error "#{gem_name} is invalid." + end + end + end + +end |