From 8f87be4e22e61ca92c856ef977d0f6924974bdcf Mon Sep 17 00:00:00 2001 From: naruse Date: Sat, 1 Feb 2014 08:19:06 +0000 Subject: Revert r44778 #9375 It breaks test-all if all tests are in a single process git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@44786 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/rubygems.rb | 19 +++++++---------- lib/rubygems/basic_specification.rb | 18 ---------------- lib/rubygems/commands/contents_command.rb | 6 +++--- lib/rubygems/commands/install_command.rb | 20 +++++++----------- lib/rubygems/commands/setup_command.rb | 16 +++++++------- lib/rubygems/compatibility.rb | 4 +--- lib/rubygems/defaults.rb | 20 +++++++++--------- lib/rubygems/deprecate.rb | 2 +- lib/rubygems/installer.rb | 4 ++-- lib/rubygems/platform.rb | 2 +- lib/rubygems/rdoc.rb | 2 +- lib/rubygems/request_set/lockfile.rb | 7 +------ lib/rubygems/resolver.rb | 21 +++++++++++++++++++ lib/rubygems/resolver/installer_set.rb | 35 +++++++++++++++++++++++++++++-- lib/rubygems/specification.rb | 2 +- lib/rubygems/test_case.rb | 12 +++++------ lib/rubygems/uninstaller.rb | 2 +- 17 files changed, 106 insertions(+), 86 deletions(-) (limited to 'lib') diff --git a/lib/rubygems.rb b/lib/rubygems.rb index 7afc85bda5..73c4846f82 100644 --- a/lib/rubygems.rb +++ b/lib/rubygems.rb @@ -8,7 +8,7 @@ require 'rbconfig' module Gem - VERSION = '2.2.1' + VERSION = '2.2.0' end # Must be first since it unloads the prelude from 1.9.2 @@ -572,7 +572,7 @@ module Gem # gem's paths are inserted before site lib directory by default. def self.load_path_insert_index - index = $LOAD_PATH.index RbConfig::CONFIG['sitelibdir'] + index = $LOAD_PATH.index ConfigMap[:sitelibdir] index end @@ -743,8 +743,8 @@ module Gem def self.prefix prefix = File.dirname RUBYGEMS_DIR - if prefix != File.expand_path(RbConfig::CONFIG['sitelibdir']) and - prefix != File.expand_path(RbConfig::CONFIG['libdir']) and + if prefix != File.expand_path(ConfigMap[:sitelibdir]) and + prefix != File.expand_path(ConfigMap[:libdir]) and 'lib' == File.basename(RUBYGEMS_DIR) then prefix end @@ -765,10 +765,6 @@ module Gem f.flock(File::LOCK_EX) f.read end - rescue Errno::EACCES - open path, 'rb' do |f| - f.read - end end ## @@ -776,8 +772,8 @@ module Gem def self.ruby if @ruby.nil? then - @ruby = File.join(RbConfig::CONFIG['bindir'], - "#{RbConfig::CONFIG['ruby_install_name']}#{RbConfig::CONFIG['EXEEXT']}") + @ruby = File.join(ConfigMap[:bindir], + "#{ConfigMap[:ruby_install_name]}#{ConfigMap[:EXEEXT]}") @ruby = "\"#{@ruby}\"" if @ruby =~ /\s/ end @@ -789,7 +785,8 @@ module Gem # Returns a String containing the API compatibility version of Ruby def self.ruby_api_version - @ruby_api_version ||= RbConfig::CONFIG['ruby_version'].dup + @ruby_api_version ||= + "#{ConfigMap[:MAJOR]}.#{ConfigMap[:MINOR]}.#{ConfigMap[:TEENY]}" end ## diff --git a/lib/rubygems/basic_specification.rb b/lib/rubygems/basic_specification.rb index 470a6ebc8b..a52377ff22 100644 --- a/lib/rubygems/basic_specification.rb +++ b/lib/rubygems/basic_specification.rb @@ -206,24 +206,6 @@ class Gem::BasicSpecification [relative_extension_dir].concat @require_paths end - ## - # Returns the paths to the source files for use with analysis and - # documentation tools. These paths are relative to full_gem_path. - - def source_paths - paths = raw_require_paths.dup - - if @extensions then - ext_dirs = @extensions.map do |extension| - extension.split(File::SEPARATOR, 2).first - end.uniq - - paths.concat ext_dirs - end - - paths.uniq - end - ## # Return a Gem::Specification from this gem diff --git a/lib/rubygems/commands/contents_command.rb b/lib/rubygems/commands/contents_command.rb index 603f1d072a..97218848ed 100644 --- a/lib/rubygems/commands/contents_command.rb +++ b/lib/rubygems/commands/contents_command.rb @@ -94,11 +94,11 @@ prefix or only the files that are requireable. spec.files.sort.map do |file| case file when /\A#{spec.bindir}\// - [RbConfig::CONFIG['bindir'], $POSTMATCH] + [Gem::ConfigMap[:bindir], $POSTMATCH] when /\.so\z/ - [RbConfig::CONFIG['archdir'], file] + [Gem::ConfigMap[:archdir], file] else - [RbConfig::CONFIG['rubylibdir'], file] + [Gem::ConfigMap[:rubylibdir], file] end end end diff --git a/lib/rubygems/commands/install_command.rb b/lib/rubygems/commands/install_command.rb index 8219eef6ea..4485eb12e8 100644 --- a/lib/rubygems/commands/install_command.rb +++ b/lib/rubygems/commands/install_command.rb @@ -228,18 +228,7 @@ to write the specification by hand. For example: def install_gem_without_dependencies name, req # :nodoc: gem = nil - if local? then - if name =~ /\.gem$/ and File.file? name then - source = Gem::Source::SpecificFile.new name - spec = source.spec - else - source = Gem::Source::Local.new - spec = source.find_gem name, req - end - gem = source.download spec if spec - end - - if remote? and not gem then + if remote? then dependency = Gem::Dependency.new name, req dependency.prerelease = options[:prerelease] @@ -247,6 +236,13 @@ to write the specification by hand. For example: gem = fetcher.download_to_cache dependency end + if local? and not gem then + source = Gem::Source::Local.new + spec = source.find_gem name, req + + gem = source.download spec + end + inst = Gem::Installer.new gem, options inst.install diff --git a/lib/rubygems/commands/setup_command.rb b/lib/rubygems/commands/setup_command.rb index 681db0dc1d..face77fae9 100644 --- a/lib/rubygems/commands/setup_command.rb +++ b/lib/rubygems/commands/setup_command.rb @@ -13,7 +13,7 @@ class Gem::Commands::SetupCommand < Gem::Command super 'setup', 'Install RubyGems', :format_executable => true, :document => %w[ri], - :site_or_vendor => 'sitelibdir', + :site_or_vendor => :sitelibdir, :destdir => '', :prefix => '', :previous_version => '' add_option '--previous-version=VERSION', @@ -36,7 +36,7 @@ class Gem::Commands::SetupCommand < Gem::Command add_option '--[no-]vendor', 'Install into vendorlibdir not sitelibdir' do |vendor, options| - options[:site_or_vendor] = vendor ? 'vendorlibdir' : 'sitelibdir' + options[:site_or_vendor] = vendor ? :vendorlibdir : :sitelibdir end add_option '--[no-]format-executable', @@ -343,19 +343,19 @@ TEXT site_or_vendor = options[:site_or_vendor] if prefix.empty? then - lib_dir = RbConfig::CONFIG[site_or_vendor] - bin_dir = RbConfig::CONFIG['bindir'] + lib_dir = Gem::ConfigMap[site_or_vendor] + bin_dir = Gem::ConfigMap[:bindir] else # Apple installed RubyGems into libdir, and RubyGems <= 1.1.0 gets # confused about installation location, so switch back to # sitelibdir/vendorlibdir. if defined?(APPLE_GEM_HOME) and # just in case Apple and RubyGems don't get this patched up proper. - (prefix == RbConfig::CONFIG['libdir'] or + (prefix == Gem::ConfigMap[:libdir] or # this one is important - prefix == File.join(RbConfig::CONFIG['libdir'], 'ruby')) then - lib_dir = RbConfig::CONFIG[site_or_vendor] - bin_dir = RbConfig::CONFIG['bindir'] + prefix == File.join(Gem::ConfigMap[:libdir], 'ruby')) then + lib_dir = Gem::ConfigMap[site_or_vendor] + bin_dir = Gem::ConfigMap[:bindir] else lib_dir = File.join prefix, 'lib' bin_dir = File.join prefix, 'bin' diff --git a/lib/rubygems/compatibility.rb b/lib/rubygems/compatibility.rb index d06ade1fa6..5e8618fe39 100644 --- a/lib/rubygems/compatibility.rb +++ b/lib/rubygems/compatibility.rb @@ -33,8 +33,6 @@ end module Gem RubyGemsVersion = VERSION - # TODO remove at RubyGems 3 - RbConfigPriorities = %w[ MAJOR MINOR @@ -47,7 +45,7 @@ module Gem unless defined?(ConfigMap) ## # Configuration settings from ::RbConfig - ConfigMap = Hash.new do |cm, key| # TODO remove at RubyGems 3 + ConfigMap = Hash.new do |cm, key| cm[key] = RbConfig::CONFIG[key.to_s] end else diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb index 6924f48e5a..715c0b71b3 100644 --- a/lib/rubygems/defaults.rb +++ b/lib/rubygems/defaults.rb @@ -29,22 +29,22 @@ module Gem def self.default_dir path = if defined? RUBY_FRAMEWORK_VERSION then [ - File.dirname(RbConfig::CONFIG['sitedir']), + File.dirname(ConfigMap[:sitedir]), 'Gems', - RbConfig::CONFIG['ruby_version'] + ConfigMap[:ruby_version] ] - elsif RbConfig::CONFIG['rubylibprefix'] then + elsif ConfigMap[:rubylibprefix] then [ - RbConfig::CONFIG['rubylibprefix'], + ConfigMap[:rubylibprefix], 'gems', - RbConfig::CONFIG['ruby_version'] + ConfigMap[:ruby_version] ] else [ - RbConfig::CONFIG['libdir'], + ConfigMap[:libdir], ruby_engine, 'gems', - RbConfig::CONFIG['ruby_version'] + ConfigMap[:ruby_version] ] end @@ -74,7 +74,7 @@ module Gem def self.user_dir parts = [Gem.user_home, '.gem', ruby_engine] - parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty? + parts << ConfigMap[:ruby_version] unless ConfigMap[:ruby_version].empty? File.join parts end @@ -100,7 +100,7 @@ module Gem # Deduce Ruby's --program-prefix and --program-suffix from its install name def self.default_exec_format - exec_format = RbConfig::CONFIG['ruby_install_name'].sub('ruby', '%s') rescue '%s' + exec_format = ConfigMap[:ruby_install_name].sub('ruby', '%s') rescue '%s' unless exec_format =~ /%s/ then raise Gem::Exception, @@ -117,7 +117,7 @@ module Gem if defined? RUBY_FRAMEWORK_VERSION then # mac framework support '/usr/bin' else # generic install - RbConfig::CONFIG['bindir'] + ConfigMap[:bindir] end end diff --git a/lib/rubygems/deprecate.rb b/lib/rubygems/deprecate.rb index e19360da13..274d6a5c12 100644 --- a/lib/rubygems/deprecate.rb +++ b/lib/rubygems/deprecate.rb @@ -50,7 +50,7 @@ module Gem::Deprecate class_eval { old = "_deprecated_#{name}" alias_method old, name - define_method name do |*args, &block| + define_method name do |*args, &block| # TODO: really works on 1.8.7? klass = self.kind_of? Module target = klass ? "#{self}." : "#{self.class}#" msg = [ "NOTE: #{target}#{name} is deprecated", diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index 33d2f78d46..f8eb2c2145 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb @@ -480,7 +480,7 @@ class Gem::Installer # def shebang(bin_file_name) - ruby_name = RbConfig::CONFIG['ruby_install_name'] if @env_shebang + ruby_name = Gem::ConfigMap[:ruby_install_name] if @env_shebang path = File.join gem_dir, spec.bindir, bin_file_name first_line = File.open(path, "rb") {|file| file.gets} @@ -493,7 +493,7 @@ class Gem::Installer if which = Gem.configuration[:custom_shebang] # replace bin_file_name with "ruby" to avoid endless loops - which = which.gsub(/ #{bin_file_name}$/," #{RbConfig::CONFIG['ruby_install_name']}") + which = which.gsub(/ #{bin_file_name}$/," #{Gem::ConfigMap[:ruby_install_name]}") which = which.gsub(/\$(\w+)/) do case $1 diff --git a/lib/rubygems/platform.rb b/lib/rubygems/platform.rb index 1bcd7549ad..e050959dc6 100644 --- a/lib/rubygems/platform.rb +++ b/lib/rubygems/platform.rb @@ -16,7 +16,7 @@ class Gem::Platform attr_accessor :version def self.local - arch = RbConfig::CONFIG['arch'] + arch = Gem::ConfigMap[:arch] arch = "#{arch}_60" if arch =~ /mswin32$/ @local ||= new(arch) end diff --git a/lib/rubygems/rdoc.rb b/lib/rubygems/rdoc.rb index 633bd893a5..52249dc267 100644 --- a/lib/rubygems/rdoc.rb +++ b/lib/rubygems/rdoc.rb @@ -193,7 +193,7 @@ class Gem::RDoc # :nodoc: all ::RDoc::Parser::C.reset args = @spec.rdoc_options - args.concat @spec.source_paths + args.concat @spec.require_paths args.concat @spec.extra_rdoc_files case config_args = Gem.configuration[:rdoc] diff --git a/lib/rubygems/request_set/lockfile.rb b/lib/rubygems/request_set/lockfile.rb index 0433d2a7fc..522caf1502 100644 --- a/lib/rubygems/request_set/lockfile.rb +++ b/lib/rubygems/request_set/lockfile.rb @@ -303,12 +303,7 @@ class Gem::RequestSet::Lockfile type, data, = get [:text, :requirement] if type == :text and column == 4 then - version, platform = data.split '-', 2 - - platform = - platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY - - last_spec = set.add name, version, platform + last_spec = set.add name, data, Gem::Platform::RUBY else dependency = parse_dependency name, data diff --git a/lib/rubygems/resolver.rb b/lib/rubygems/resolver.rb index 15a96693e9..d455e03c05 100644 --- a/lib/rubygems/resolver.rb +++ b/lib/rubygems/resolver.rb @@ -178,6 +178,27 @@ class Gem::Resolver res.to_a end + ## + # Finds the State in +states+ that matches the +conflict+ so that we can try + # other possible sets. + # + # If no good candidate is found, the first state is tried. + + def find_conflict_state conflict, states # :nodoc: + until states.empty? do + state = states.pop + + explain :consider, state.dep, conflict.failed_dep + + if conflict.for_spec? state.spec + state.conflicts << [state.spec, conflict] + return state + end + end + + nil + end + ## # Extracts the specifications that may be able to fulfill +dependency+ and # returns those that match the local platform and all those that match. diff --git a/lib/rubygems/resolver/installer_set.rb b/lib/rubygems/resolver/installer_set.rb index 27e6455148..e35e0aabec 100644 --- a/lib/rubygems/resolver/installer_set.rb +++ b/lib/rubygems/resolver/installer_set.rb @@ -28,10 +28,11 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set @f = Gem::SpecFetcher.fetcher + @all = Hash.new { |h,k| h[k] = [] } @always_install = [] @ignore_dependencies = false @ignore_installed = false - @remote_set = Gem::Resolver::BestSet.new if consider_remote? + @loaded_remote_specs = [] @specs = {} end @@ -78,7 +79,16 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set end end - res.concat @remote_set.find_all req if consider_remote? + if consider_remote? then + load_remote_specs dep + + @all[name].each do |remote_source, n| + if dep.match? n then + res << Gem::Resolver::IndexSpecification.new( + self, n.name, n.version, remote_source, n.platform) + end + end + end res end @@ -91,6 +101,27 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set ] end + ## + # Loads remote prerelease specs if +dep+ is a prerelease dependency + + def load_remote_specs dep # :nodoc: + types = [:released] + types << :prerelease if dep.prerelease? + + types.each do |type| + next if @loaded_remote_specs.include? type + @loaded_remote_specs << type + + list, = @f.available_specs type + + list.each do |uri, specs| + specs.each do |n| + @all[n.name] << [uri, n] + end + end + end + end + ## # Called from IndexSpecification to get a true Specification # object. diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index e98f3284cd..59d71d378b 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb @@ -327,7 +327,7 @@ class Gem::Specification < Gem::BasicSpecification add_bindir(@executables), @extra_rdoc_files, @extensions, - ].flatten.uniq.compact.sort + ].flatten.sort.uniq.compact end ###################################################################### diff --git a/lib/rubygems/test_case.rb b/lib/rubygems/test_case.rb index ff261f7816..8dc37d6720 100644 --- a/lib/rubygems/test_case.rb +++ b/lib/rubygems/test_case.rb @@ -294,10 +294,10 @@ class Gem::TestCase < MiniTest::Unit::TestCase Gem.searcher = nil Gem::SpecFetcher.fetcher = nil - @orig_BASERUBY = RbConfig::CONFIG['BASERUBY'] - RbConfig::CONFIG['BASERUBY'] = RbConfig::CONFIG['ruby_install_name'] + @orig_BASERUBY = Gem::ConfigMap[:BASERUBY] + Gem::ConfigMap[:BASERUBY] = Gem::ConfigMap[:ruby_install_name] - @orig_arch = RbConfig::CONFIG['arch'] + @orig_arch = Gem::ConfigMap[:arch] if win_platform? util_set_arch 'i386-mswin32' @@ -315,8 +315,8 @@ class Gem::TestCase < MiniTest::Unit::TestCase def teardown $LOAD_PATH.replace @orig_LOAD_PATH if @orig_LOAD_PATH - RbConfig::CONFIG['BASERUBY'] = @orig_BASERUBY - RbConfig::CONFIG['arch'] = @orig_arch + Gem::ConfigMap[:BASERUBY] = @orig_BASERUBY + Gem::ConfigMap[:arch] = @orig_arch if defined? Gem::RemoteFetcher then Gem::RemoteFetcher.fetcher = nil @@ -898,7 +898,7 @@ Also, a list: # Set the platform to +arch+ def util_set_arch(arch) - RbConfig::CONFIG['arch'] = arch + Gem::ConfigMap[:arch] = arch platform = Gem::Platform.new arch Gem.instance_variable_set :@platforms, nil diff --git a/lib/rubygems/uninstaller.rb b/lib/rubygems/uninstaller.rb index fa838333cd..4cb2a1d333 100644 --- a/lib/rubygems/uninstaller.rb +++ b/lib/rubygems/uninstaller.rb @@ -237,7 +237,7 @@ class Gem::Uninstaller unless path_ok?(@gem_home, spec) or (@user_install and path_ok?(Gem.user_dir, spec)) then e = Gem::GemNotInHomeException.new \ - "Gem '#{spec.full_name}' is not installed in directory #{@gem_home}" + "Gem is not installed in directory #{@gem_home}" e.spec = spec raise e -- cgit v1.2.3