From fcbf63e62c627deae76c1b8cb8c0876c536ed811 Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Mon, 16 Mar 2020 18:49:26 +0900 Subject: Fresh start --- jni/ruby/lib/rubygems/commands/fetch_command.rb | 77 +++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 jni/ruby/lib/rubygems/commands/fetch_command.rb (limited to 'jni/ruby/lib/rubygems/commands/fetch_command.rb') diff --git a/jni/ruby/lib/rubygems/commands/fetch_command.rb b/jni/ruby/lib/rubygems/commands/fetch_command.rb new file mode 100644 index 0000000..c57ab00 --- /dev/null +++ b/jni/ruby/lib/rubygems/commands/fetch_command.rb @@ -0,0 +1,77 @@ +require 'rubygems/command' +require 'rubygems/local_remote_options' +require 'rubygems/version_option' + +class Gem::Commands::FetchCommand < Gem::Command + + include Gem::LocalRemoteOptions + include Gem::VersionOption + + def initialize + super 'fetch', 'Download a gem and place it in the current directory' + + add_bulk_threshold_option + add_proxy_option + add_source_option + add_clear_sources_option + + add_version_option + add_platform_option + add_prerelease_option + end + + def arguments # :nodoc: + 'GEMNAME name of gem to download' + end + + def defaults_str # :nodoc: + "--version '#{Gem::Requirement.default}'" + end + + def description # :nodoc: + <<-EOF +The fetch command fetches gem files that can be stored for later use or +unpacked to examine their contents. + +See the build command help for an example of unpacking a gem, modifying it, +then repackaging it. + EOF + end + + def usage # :nodoc: + "#{program_name} GEMNAME [GEMNAME ...]" + end + + def execute + version = options[:version] || Gem::Requirement.default + + platform = Gem.platforms.last + gem_names = get_all_gem_names + + gem_names.each do |gem_name| + dep = Gem::Dependency.new gem_name, version + dep.prerelease = options[:prerelease] + + specs_and_sources, errors = + Gem::SpecFetcher.fetcher.spec_for_dependency dep + + if platform then + filtered = specs_and_sources.select { |s,| s.platform == platform } + specs_and_sources = filtered unless filtered.empty? + end + + spec, source = specs_and_sources.max_by { |s,| s.version } + + if spec.nil? then + show_lookup_failure gem_name, version, errors, options[:domain] + next + end + + source.download spec + + say "Downloaded #{spec.full_name}" + end + end + +end + -- cgit v1.2.3