summaryrefslogtreecommitdiff
path: root/lib/rubygems
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rubygems')
-rw-r--r--lib/rubygems/commands/owner_command.rb4
-rw-r--r--lib/rubygems/commands/push_command.rb3
-rw-r--r--lib/rubygems/commands/query_command.rb27
-rw-r--r--lib/rubygems/commands/setup_command.rb159
-rw-r--r--lib/rubygems/commands/yank_command.rb3
-rwxr-xr-xlib/rubygems/core_ext/kernel_require.rb12
-rw-r--r--lib/rubygems/exceptions.rb6
-rw-r--r--lib/rubygems/installer.rb5
-rw-r--r--lib/rubygems/request_set.rb23
-rw-r--r--lib/rubygems/resolver.rb25
-rw-r--r--lib/rubygems/source.rb6
-rw-r--r--lib/rubygems/spec_fetcher.rb10
-rw-r--r--lib/rubygems/test_case.rb14
-rw-r--r--lib/rubygems/user_interaction.rb28
-rw-r--r--lib/rubygems/version.rb18
15 files changed, 117 insertions, 226 deletions
diff --git a/lib/rubygems/commands/owner_command.rb b/lib/rubygems/commands/owner_command.rb
index 8e2271657a..4b99434e87 100644
--- a/lib/rubygems/commands/owner_command.rb
+++ b/lib/rubygems/commands/owner_command.rb
@@ -40,9 +40,7 @@ permission to.
options[:remove] << value
end
- add_option '-h', '--host HOST',
- 'Use another gemcutter-compatible host',
- ' (e.g. https://rubygems.org)' do |value, options|
+ add_option '-h', '--host HOST', 'Use another gemcutter-compatible host' do |value, options|
options[:host] = value
end
end
diff --git a/lib/rubygems/commands/push_command.rb b/lib/rubygems/commands/push_command.rb
index d294cbc8df..6adeff6b30 100644
--- a/lib/rubygems/commands/push_command.rb
+++ b/lib/rubygems/commands/push_command.rb
@@ -33,8 +33,7 @@ command. For further discussion see the help for the yank command.
add_key_option
add_option('--host HOST',
- 'Push to another gemcutter-compatible host',
- ' (e.g. https://rubygems.org)') do |value, options|
+ 'Push to another gemcutter-compatible host') do |value, options|
options[:host] = value
end
diff --git a/lib/rubygems/commands/query_command.rb b/lib/rubygems/commands/query_command.rb
index 813154fa23..f25d120b88 100644
--- a/lib/rubygems/commands/query_command.rb
+++ b/lib/rubygems/commands/query_command.rb
@@ -255,21 +255,22 @@ is too hard to use.
name_tuples.map { |n| n.version }.uniq
else
platforms.sort.reverse.map do |version, pls|
- out = version.to_s
-
- if options[:domain] == :local
- default = specs.any? do |s|
- !s.is_a?(Gem::Source) && s.version == version && s.default_gem?
+ if pls == [Gem::Platform::RUBY] then
+ if options[:domain] == :remote || specs.all? { |spec| spec.is_a? Gem::Source }
+ version
+ else
+ spec = specs.select { |s| s.version == version }
+ if spec.first.default_gem?
+ "default: #{version}"
+ else
+ version
+ end
end
- out = "default: #{out}" if default
- end
-
- if pls != [Gem::Platform::RUBY] then
- platform_list = [pls.delete(Gem::Platform::RUBY), *pls.sort].compact
- out = platform_list.unshift(out).join(' ')
+ else
+ ruby = pls.delete Gem::Platform::RUBY
+ platform_list = [ruby, *pls.sort].compact
+ "#{version} #{platform_list.join ' '}"
end
-
- out
end
end
diff --git a/lib/rubygems/commands/setup_command.rb b/lib/rubygems/commands/setup_command.rb
index 1fff2a7dcb..ebb08d24d7 100644
--- a/lib/rubygems/commands/setup_command.rb
+++ b/lib/rubygems/commands/setup_command.rb
@@ -142,8 +142,6 @@ By default, this RubyGems will install gem as:
remove_old_lib_files lib_dir
- install_default_gemspec
-
say "RubyGems #{Gem::VERSION} installed"
uninstall_old_gemcutter
@@ -204,65 +202,59 @@ By default, this RubyGems will install gem as:
end
end
-
def install_executables(bin_dir)
+ say "Installing gem executable" if @verbose
+
@bin_file_names = []
- {
- 'gem' => 'bin',
- 'bundler' => 'bundler/exe',
- }.each do |tool, path|
- say "Installing #{tool} executable" if @verbose
+ Dir.chdir 'bin' do
+ bin_files = Dir['*']
+
+ bin_files.delete 'update_rubygems'
+
+ bin_files.each do |bin_file|
+ bin_file_formatted = if options[:format_executable] then
+ Gem.default_exec_format % bin_file
+ else
+ bin_file
+ end
- Dir.chdir path do
- bin_files = Dir['*']
+ dest_file = File.join bin_dir, bin_file_formatted
+ bin_tmp_file = File.join Dir.tmpdir, "#{bin_file}.#{$$}"
- bin_files -= %w[update_rubygems bundler bundle_ruby]
+ begin
+ bin = File.readlines bin_file
+ bin[0] = "#!#{Gem.ruby}\n"
- bin_files.each do |bin_file|
- bin_file_formatted = if options[:format_executable] then
- Gem.default_exec_format % bin_file
- else
- bin_file
- end
+ File.open bin_tmp_file, 'w' do |fp|
+ fp.puts bin.join
+ end
- dest_file = File.join bin_dir, bin_file_formatted
- bin_tmp_file = File.join Dir.tmpdir, "#{bin_file}.#{$$}"
+ install bin_tmp_file, dest_file, :mode => 0755
+ @bin_file_names << dest_file
+ ensure
+ rm bin_tmp_file
+ end
- begin
- bin = File.readlines bin_file
- bin[0] = "#!#{Gem.ruby}\n"
+ next unless Gem.win_platform?
- File.open bin_tmp_file, 'w' do |fp|
- fp.puts bin.join
- end
+ begin
+ bin_cmd_file = File.join Dir.tmpdir, "#{bin_file}.bat"
- install bin_tmp_file, dest_file, :mode => 0755
- @bin_file_names << dest_file
- ensure
- rm bin_tmp_file
+ File.open bin_cmd_file, 'w' do |file|
+ file.puts <<-TEXT
+@ECHO OFF
+IF NOT "%~f0" == "~f0" GOTO :WinNT
+@"#{File.basename(Gem.ruby).chomp('"')}" "#{dest_file}" %1 %2 %3 %4 %5 %6 %7 %8 %9
+GOTO :EOF
+:WinNT
+@"#{File.basename(Gem.ruby).chomp('"')}" "%~dpn0" %*
+TEXT
end
- next unless Gem.win_platform?
-
- begin
- bin_cmd_file = File.join Dir.tmpdir, "#{bin_file}.bat"
-
- File.open bin_cmd_file, 'w' do |file|
- file.puts <<-TEXT
- @ECHO OFF
- IF NOT "%~f0" == "~f0" GOTO :WinNT
- @"#{File.basename(Gem.ruby).chomp('"')}" "#{dest_file}" %1 %2 %3 %4 %5 %6 %7 %8 %9
- GOTO :EOF
- :WinNT
- @"#{File.basename(Gem.ruby).chomp('"')}" "%~dpn0" %*
- TEXT
- end
-
- install bin_cmd_file, "#{dest_file}.bat", :mode => 0755
- ensure
- rm bin_cmd_file
- end
+ install bin_cmd_file, "#{dest_file}.bat", :mode => 0755
+ ensure
+ rm bin_cmd_file
end
end
end
@@ -277,23 +269,18 @@ By default, this RubyGems will install gem as:
end
def install_lib(lib_dir)
- {
- 'RubyGems' => 'lib',
- 'Bundler' => 'bundler/lib'
- }.each do |tool, path|
- say "Installing #{tool}" if @verbose
-
- lib_files = rb_files_in path
- pem_files = pem_files_in path
-
- Dir.chdir path do
- lib_files.each do |lib_file|
- install_file lib_file, lib_dir
- end
+ say "Installing RubyGems" if @verbose
- pem_files.each do |pem_file|
- install_file pem_file, lib_dir
- end
+ lib_files = rb_files_in 'lib'
+ pem_files = pem_files_in 'lib'
+
+ Dir.chdir 'lib' do
+ lib_files.each do |lib_file|
+ install_file lib_file, lib_dir
+ end
+
+ pem_files.each do |pem_file|
+ install_file pem_file, lib_dir
end
end
end
@@ -339,19 +326,6 @@ By default, this RubyGems will install gem as:
return false
end
- def install_default_gemspec
- Dir.chdir("bundler") do
- bundler_spec = Gem::Specification.load("bundler.gemspec")
- bundler_spec.files = Dir["{*.md,{lib,exe,man}/**/*}"]
- bundler_spec.executables -= %w[bundler bundle_ruby]
- Dir.entries(Gem::Specification.default_specifications_dir).
- select {|gs| gs.start_with?("bundler-") }.
- each {|gs| File.delete(File.join(Gem::Specification.default_specifications_dir, gs)) }
- default_spec_path = File.join(Gem::Specification.default_specifications_dir, "#{bundler_spec.full_name}.gemspec")
- Gem.write_binary(default_spec_path, bundler_spec.to_ruby)
- end
- end
-
def make_destination_dirs(install_destdir)
lib_dir, bin_dir = Gem.default_rubygems_dirs
@@ -442,27 +416,23 @@ abort "#{deprecation_message}"
end
def remove_old_lib_files lib_dir
- {
- File.join(lib_dir, 'rubygems') => 'lib/rubygems',
- File.join(lib_dir, 'bundler') => 'bundler/lib/bundler',
- }.each do |old_lib_dir, new_lib_dir|
- lib_files = rb_files_in(new_lib_dir)
+ rubygems_dir = File.join lib_dir, 'rubygems'
+ lib_files = rb_files_in 'lib/rubygems'
- old_lib_files = rb_files_in(old_lib_dir)
+ old_lib_files = rb_files_in rubygems_dir
- to_remove = old_lib_files - lib_files
+ to_remove = old_lib_files - lib_files
- to_remove.delete_if do |file|
- file.start_with? 'defaults'
- end
+ to_remove.delete_if do |file|
+ file.start_with? 'defaults'
+ end
- Dir.chdir old_lib_dir do
- to_remove.each do |file|
- FileUtils.rm_f file
+ Dir.chdir rubygems_dir do
+ to_remove.each do |file|
+ FileUtils.rm_f file
- warn "unable to remove old file #{file} please remove it by hand" if
- File.exist? file
- end
+ warn "unable to remove old file #{file} please remove it by hand" if
+ File.exist? file
end
end
end
@@ -511,3 +481,4 @@ abort "#{deprecation_message}"
end
end
+
diff --git a/lib/rubygems/commands/yank_command.rb b/lib/rubygems/commands/yank_command.rb
index 36809cbd57..0d6575b272 100644
--- a/lib/rubygems/commands/yank_command.rb
+++ b/lib/rubygems/commands/yank_command.rb
@@ -42,8 +42,7 @@ as the reason for the removal request.
add_platform_option("remove")
add_option('--host HOST',
- 'Yank from another gemcutter-compatible host',
- ' (e.g. https://rubygems.org)') do |value, options|
+ 'Yank from another gemcutter-compatible host') do |value, options|
options[:host] = value
end
diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb
index d23a6fe90a..aa56ab5ec4 100755
--- a/lib/rubygems/core_ext/kernel_require.rb
+++ b/lib/rubygems/core_ext/kernel_require.rb
@@ -41,7 +41,8 @@ module Kernel
path = path.to_path if path.respond_to? :to_path
- if spec = Gem.find_unresolved_default_spec(path)
+ spec = Gem.find_unresolved_default_spec(path)
+ if spec
Gem.remove_unresolved_default_spec(spec)
gem(spec.name)
end
@@ -60,10 +61,12 @@ module Kernel
#--
# TODO request access to the C implementation of this to speed up RubyGems
- if Gem::Specification.find_active_stub_by_path(path)
+ spec = Gem::Specification.find_active_stub_by_path path
+
+ begin
RUBYGEMS_ACTIVATION_MONITOR.exit
return gem_original_require(path)
- end
+ end if spec
# Attempt to find +path+ in any unresolved gems...
@@ -101,7 +104,7 @@ module Kernel
# Ok, now find a gem that has no conflicts, starting
# at the highest version.
- valid = found_specs.find { |s| !s.has_conflicts? }
+ valid = found_specs.reject { |s| s.has_conflicts? }.first
unless valid then
le = Gem::LoadError.new "unable to find a version of '#{names.first}' to activate"
@@ -135,3 +138,4 @@ module Kernel
private :require
end
+
diff --git a/lib/rubygems/exceptions.rb b/lib/rubygems/exceptions.rb
index b7528761fc..9089eae4d5 100644
--- a/lib/rubygems/exceptions.rb
+++ b/lib/rubygems/exceptions.rb
@@ -154,12 +154,6 @@ class Gem::ImpossibleDependenciesError < Gem::Exception
end
class Gem::InstallError < Gem::Exception; end
-class Gem::RuntimeRequirementNotMetError < Gem::InstallError
- attr_accessor :suggestion
- def message
- [suggestion, super].compact.join("\n\t")
- end
-end
##
# Potentially raised when a specification is validated.
diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb
index bd2eed19de..f4d3e728de 100644
--- a/lib/rubygems/installer.rb
+++ b/lib/rubygems/installer.rb
@@ -608,8 +608,7 @@ class Gem::Installer
def ensure_required_ruby_version_met # :nodoc:
if rrv = spec.required_ruby_version then
unless rrv.satisfied_by? Gem.ruby_version then
- raise Gem::RuntimeRequirementNotMetError,
- "#{spec.name} requires Ruby version #{rrv}."
+ raise Gem::InstallError, "#{spec.name} requires Ruby version #{rrv}."
end
end
end
@@ -617,7 +616,7 @@ class Gem::Installer
def ensure_required_rubygems_version_met # :nodoc:
if rrgv = spec.required_rubygems_version then
unless rrgv.satisfied_by? Gem.rubygems_version then
- raise Gem::RuntimeRequirementNotMetError,
+ raise Gem::InstallError,
"#{spec.name} requires RubyGems version #{rrgv}. " +
"Try 'gem update --system' to update RubyGems itself."
end
diff --git a/lib/rubygems/request_set.rb b/lib/rubygems/request_set.rb
index 49e56ae6fb..5541e64b88 100644
--- a/lib/rubygems/request_set.rb
+++ b/lib/rubygems/request_set.rb
@@ -163,26 +163,9 @@ class Gem::RequestSet
end
end
- spec =
- begin
- req.spec.install options do |installer|
- yield req, installer if block_given?
- end
- rescue Gem::RuntimeRequirementNotMetError => e
- recent_match = req.spec.set.find_all(req.request).sort_by(&:version).reverse_each.find do |s|
- s = s.spec
- s.required_ruby_version.satisfied_by?(Gem.ruby_version) && s.required_rubygems_version.satisfied_by?(Gem.rubygems_version)
- end
- if recent_match
- suggestion = "The last version of #{req.request} to support your ruby & rubygems was #{recent_match.version}. Try installing it with `gem install #{recent_match.name} -v #{recent_match.version}`"
- suggestion += " and then running the current command again" unless @always_install.any? { |spec| spec == req.spec.spec }
- else
- suggestion = "There are no versions of #{req.request} compatible with your ruby & rubygems"
- suggestion += ". Maybe try installing an older version of the gem you're looking for?" unless @always_install.any? { |spec| spec == req.spec.spec }
- end
- e.suggestion = suggestion
- raise
- end
+ spec = req.spec.install options do |installer|
+ yield req, installer if block_given?
+ end
requests << spec
end
diff --git a/lib/rubygems/resolver.rb b/lib/rubygems/resolver.rb
index 0a3276daab..50a547e1be 100644
--- a/lib/rubygems/resolver.rb
+++ b/lib/rubygems/resolver.rb
@@ -233,29 +233,8 @@ class Gem::Resolver
exc.errors = @set.errors
raise exc
end
-
- sources = []
-
- groups = Hash.new { |hash, key| hash[key] = [] }
-
- possibles.each do |spec|
- source = spec.source
-
- sources << source unless sources.include? source
-
- groups[source] << spec
- end
-
- activation_requests = []
-
- sources.sort.each do |source|
- groups[source].
- sort_by { |spec| [spec.version, Gem::Platform.local =~ spec.platform ? 1 : 0] }.
- map { |spec| ActivationRequest.new spec, dependency, [] }.
- each { |activation_request| activation_requests << activation_request }
- end
-
- activation_requests
+ possibles.sort_by { |s| [s.source, s.version, Gem::Platform.local =~ s.platform ? 1 : 0] }.
+ map { |s| ActivationRequest.new s, dependency, [] }
end
def dependencies_for(specification)
diff --git a/lib/rubygems/source.rb b/lib/rubygems/source.rb
index 4f07beb1f4..85f5268fa3 100644
--- a/lib/rubygems/source.rb
+++ b/lib/rubygems/source.rb
@@ -67,11 +67,7 @@ class Gem::Source
return -1 if !other.uri
- # Returning 1 here ensures that when sorting a list of sources, the
- # original ordering of sources supplied by the user is preserved.
- return 1 unless @uri.to_s == other.uri.to_s
-
- 0
+ @uri.to_s <=> other.uri.to_s
else
nil
end
diff --git a/lib/rubygems/spec_fetcher.rb b/lib/rubygems/spec_fetcher.rb
index 919276e113..755d4be1eb 100644
--- a/lib/rubygems/spec_fetcher.rb
+++ b/lib/rubygems/spec_fetcher.rb
@@ -184,10 +184,10 @@ class Gem::SpecFetcher
# Suggests gems based on the supplied +gem_name+. Returns an array of
# alternative gem names.
- def suggest_gems_from_name(gem_name, type = :latest)
+ def suggest_gems_from_name gem_name
gem_name = gem_name.downcase.tr('_-', '')
max = gem_name.size / 2
- names = available_specs(type).first.values.flatten(1)
+ names = available_specs(:latest).first.values.flatten(1)
matches = names.map { |n|
next unless n.match_platform?
@@ -201,11 +201,7 @@ class Gem::SpecFetcher
[n.name, distance]
}.compact
- matches = if matches.empty? && type != :prerelease
- suggest_gems_from_name gem_name, :prerelease
- else
- matches.uniq.sort_by { |name, dist| dist }
- end
+ matches = matches.uniq.sort_by { |name, dist| dist }
matches.first(5).map { |name, dist| name }
end
diff --git a/lib/rubygems/test_case.rb b/lib/rubygems/test_case.rb
index 3e1924ac63..f7ae97cd8d 100644
--- a/lib/rubygems/test_case.rb
+++ b/lib/rubygems/test_case.rb
@@ -25,7 +25,6 @@ unless Gem::Dependency.new('rdoc', '>= 3.10').matching_specs.empty?
gem 'json'
end
-require 'bundler'
require 'minitest/autorun'
require 'rubygems/deprecate'
@@ -223,25 +222,17 @@ class Gem::TestCase < MiniTest::Unit::TestCase
@orig_gem_vendor = ENV['GEM_VENDOR']
@orig_gem_spec_cache = ENV['GEM_SPEC_CACHE']
@orig_rubygems_gemdeps = ENV['RUBYGEMS_GEMDEPS']
- @orig_bundle_gemfile = ENV['BUNDLE_GEMFILE']
@orig_rubygems_host = ENV['RUBYGEMS_HOST']
- @orig_bundle_disable_postit = ENV['BUNDLE_DISABLE_POSTIT']
ENV.keys.find_all { |k| k.start_with?('GEM_REQUIREMENT_') }.each do |k|
ENV.delete k
end
@orig_gem_env_requirements = ENV.to_hash
ENV['GEM_VENDOR'] = nil
- ENV['BUNDLE_DISABLE_POSTIT'] = 'true'
@current_dir = Dir.pwd
@fetcher = nil
-
- Bundler.ui = Bundler::UI::Silent.new
- @ui = Gem::MockGemUi.new
- # This needs to be a new instance since we call use_ui(@ui) when we want to
- # capture output
- Gem::DefaultUserInteraction.ui = Gem::MockGemUi.new
+ @ui = Gem::MockGemUi.new
tmpdir = File.expand_path Dir.tmpdir
tmpdir.untaint
@@ -332,7 +323,6 @@ class Gem::TestCase < MiniTest::Unit::TestCase
Gem.loaded_specs.clear
Gem.clear_default_specs
Gem::Specification.unresolved_deps.clear
- Bundler.reset!
Gem.configuration.verbose = true
Gem.configuration.update_sources = true
@@ -404,9 +394,7 @@ class Gem::TestCase < MiniTest::Unit::TestCase
ENV['GEM_VENDOR'] = @orig_gem_vendor
ENV['GEM_SPEC_CACHE'] = @orig_gem_spec_cache
ENV['RUBYGEMS_GEMDEPS'] = @orig_rubygems_gemdeps
- ENV['BUNDLE_GEMFILE'] = @orig_bundle_gemfile
ENV['RUBYGEMS_HOST'] = @orig_rubygems_host
- ENV['BUNDLE_DISABLE_POSTIT'] = @orig_bundle_disable_postit
Gem.ruby = @orig_ruby if @orig_ruby
diff --git a/lib/rubygems/user_interaction.rb b/lib/rubygems/user_interaction.rb
index cacd782e08..390d0f2aea 100644
--- a/lib/rubygems/user_interaction.rb
+++ b/lib/rubygems/user_interaction.rb
@@ -7,6 +7,11 @@
require 'rubygems/util'
+begin
+ require 'io/console'
+rescue LoadError
+end
+
##
# Module that defines the default UserInteraction. Any class including this
# module will have access to the +ui+ method that returns the default UI.
@@ -309,21 +314,12 @@ class Gem::StreamUI
password
end
- def require_io_console
- @require_io_console ||= begin
- begin
- require 'io/console'
- rescue LoadError
- end
- true
- end
- end
-
- def _gets_noecho
- require_io_console
- if IO.method_defined?(:noecho) then
+ if IO.method_defined?(:noecho) then
+ def _gets_noecho
@ins.noecho {@ins.gets}
- elsif Gem.win_platform?
+ end
+ elsif Gem.win_platform?
+ def _gets_noecho
require "Win32API"
password = ''
@@ -336,7 +332,9 @@ class Gem::StreamUI
end
end
password
- else
+ end
+ else
+ def _gets_noecho
system "stty -echo"
begin
@ins.gets
diff --git a/lib/rubygems/version.rb b/lib/rubygems/version.rb
index 6eeaafdcc5..2f6cfae6ed 100644
--- a/lib/rubygems/version.rb
+++ b/lib/rubygems/version.rb
@@ -237,7 +237,7 @@ class Gem::Version
end
def hash # :nodoc:
- canonical_segments.hash
+ @version.hash
end
def init_with coder # :nodoc:
@@ -331,7 +331,7 @@ class Gem::Version
def <=> other
return unless Gem::Version === other
- return 0 if @version == other._version || canonical_segments == other.canonical_segments
+ return 0 if @version == other._version
lhsegments = _segments
rhsegments = other._segments
@@ -356,13 +356,6 @@ class Gem::Version
return 0
end
- def canonical_segments
- @canonical_segments ||=
- _split_segments.map! do |segments|
- segments.reverse_each.drop_while {|s| s == 0 }.reverse
- end.reduce(&:concat)
- end
-
protected
def _version
@@ -378,11 +371,4 @@ class Gem::Version
/^\d+$/ =~ s ? s.to_i : s
end.freeze
end
-
- def _split_segments
- string_start = _segments.index {|s| s.is_a?(String) }
- string_segments = segments
- numeric_segments = string_segments.slice!(0, string_start || string_segments.size)
- return numeric_segments, string_segments
- end
end