summaryrefslogtreecommitdiff
path: root/lib/rubygems
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rubygems')
-rw-r--r--lib/rubygems/basic_specification.rb18
-rw-r--r--lib/rubygems/commands/contents_command.rb6
-rw-r--r--lib/rubygems/commands/install_command.rb20
-rw-r--r--lib/rubygems/commands/setup_command.rb16
-rw-r--r--lib/rubygems/compatibility.rb4
-rw-r--r--lib/rubygems/defaults.rb20
-rw-r--r--lib/rubygems/deprecate.rb2
-rw-r--r--lib/rubygems/installer.rb4
-rw-r--r--lib/rubygems/platform.rb2
-rw-r--r--lib/rubygems/rdoc.rb2
-rw-r--r--lib/rubygems/request_set/lockfile.rb7
-rw-r--r--lib/rubygems/resolver.rb21
-rw-r--r--lib/rubygems/resolver/installer_set.rb35
-rw-r--r--lib/rubygems/specification.rb2
-rw-r--r--lib/rubygems/test_case.rb12
-rw-r--r--lib/rubygems/uninstaller.rb2
16 files changed, 75 insertions, 98 deletions
diff --git a/lib/rubygems/basic_specification.rb b/lib/rubygems/basic_specification.rb
index a52377ff22..470a6ebc8b 100644
--- a/lib/rubygems/basic_specification.rb
+++ b/lib/rubygems/basic_specification.rb
@@ -207,6 +207,24 @@ class Gem::BasicSpecification
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
def to_spec
diff --git a/lib/rubygems/commands/contents_command.rb b/lib/rubygems/commands/contents_command.rb
index 97218848ed..603f1d072a 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}\//
- [Gem::ConfigMap[:bindir], $POSTMATCH]
+ [RbConfig::CONFIG['bindir'], $POSTMATCH]
when /\.so\z/
- [Gem::ConfigMap[:archdir], file]
+ [RbConfig::CONFIG['archdir'], file]
else
- [Gem::ConfigMap[:rubylibdir], file]
+ [RbConfig::CONFIG['rubylibdir'], file]
end
end
end
diff --git a/lib/rubygems/commands/install_command.rb b/lib/rubygems/commands/install_command.rb
index 4485eb12e8..8219eef6ea 100644
--- a/lib/rubygems/commands/install_command.rb
+++ b/lib/rubygems/commands/install_command.rb
@@ -228,7 +228,18 @@ to write the specification by hand. For example:
def install_gem_without_dependencies name, req # :nodoc:
gem = nil
- if remote? then
+ 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
dependency = Gem::Dependency.new name, req
dependency.prerelease = options[:prerelease]
@@ -236,13 +247,6 @@ 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 face77fae9..681db0dc1d 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 = Gem::ConfigMap[site_or_vendor]
- bin_dir = Gem::ConfigMap[:bindir]
+ lib_dir = RbConfig::CONFIG[site_or_vendor]
+ bin_dir = RbConfig::CONFIG['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 == Gem::ConfigMap[:libdir] or
+ (prefix == RbConfig::CONFIG['libdir'] or
# this one is important
- prefix == File.join(Gem::ConfigMap[:libdir], 'ruby')) then
- lib_dir = Gem::ConfigMap[site_or_vendor]
- bin_dir = Gem::ConfigMap[:bindir]
+ prefix == File.join(RbConfig::CONFIG['libdir'], 'ruby')) then
+ lib_dir = RbConfig::CONFIG[site_or_vendor]
+ bin_dir = RbConfig::CONFIG['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 5e8618fe39..d06ade1fa6 100644
--- a/lib/rubygems/compatibility.rb
+++ b/lib/rubygems/compatibility.rb
@@ -33,6 +33,8 @@ end
module Gem
RubyGemsVersion = VERSION
+ # TODO remove at RubyGems 3
+
RbConfigPriorities = %w[
MAJOR
MINOR
@@ -45,7 +47,7 @@ module Gem
unless defined?(ConfigMap)
##
# Configuration settings from ::RbConfig
- ConfigMap = Hash.new do |cm, key|
+ ConfigMap = Hash.new do |cm, key| # TODO remove at RubyGems 3
cm[key] = RbConfig::CONFIG[key.to_s]
end
else
diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb
index 715c0b71b3..6924f48e5a 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(ConfigMap[:sitedir]),
+ File.dirname(RbConfig::CONFIG['sitedir']),
'Gems',
- ConfigMap[:ruby_version]
+ RbConfig::CONFIG['ruby_version']
]
- elsif ConfigMap[:rubylibprefix] then
+ elsif RbConfig::CONFIG['rubylibprefix'] then
[
- ConfigMap[:rubylibprefix],
+ RbConfig::CONFIG['rubylibprefix'],
'gems',
- ConfigMap[:ruby_version]
+ RbConfig::CONFIG['ruby_version']
]
else
[
- ConfigMap[:libdir],
+ RbConfig::CONFIG['libdir'],
ruby_engine,
'gems',
- ConfigMap[:ruby_version]
+ RbConfig::CONFIG['ruby_version']
]
end
@@ -74,7 +74,7 @@ module Gem
def self.user_dir
parts = [Gem.user_home, '.gem', ruby_engine]
- parts << ConfigMap[:ruby_version] unless ConfigMap[:ruby_version].empty?
+ parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['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 = ConfigMap[:ruby_install_name].sub('ruby', '%s') rescue '%s'
+ exec_format = RbConfig::CONFIG['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
- ConfigMap[:bindir]
+ RbConfig::CONFIG['bindir']
end
end
diff --git a/lib/rubygems/deprecate.rb b/lib/rubygems/deprecate.rb
index 274d6a5c12..e19360da13 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| # TODO: really works on 1.8.7?
+ define_method name do |*args, &block|
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 f8eb2c2145..33d2f78d46 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 = Gem::ConfigMap[:ruby_install_name] if @env_shebang
+ ruby_name = RbConfig::CONFIG['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}$/," #{Gem::ConfigMap[:ruby_install_name]}")
+ which = which.gsub(/ #{bin_file_name}$/," #{RbConfig::CONFIG['ruby_install_name']}")
which = which.gsub(/\$(\w+)/) do
case $1
diff --git a/lib/rubygems/platform.rb b/lib/rubygems/platform.rb
index e050959dc6..1bcd7549ad 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 = Gem::ConfigMap[:arch]
+ arch = RbConfig::CONFIG['arch']
arch = "#{arch}_60" if arch =~ /mswin32$/
@local ||= new(arch)
end
diff --git a/lib/rubygems/rdoc.rb b/lib/rubygems/rdoc.rb
index 52249dc267..633bd893a5 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.require_paths
+ args.concat @spec.source_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 522caf1502..0433d2a7fc 100644
--- a/lib/rubygems/request_set/lockfile.rb
+++ b/lib/rubygems/request_set/lockfile.rb
@@ -303,7 +303,12 @@ class Gem::RequestSet::Lockfile
type, data, = get [:text, :requirement]
if type == :text and column == 4 then
- last_spec = set.add name, data, Gem::Platform::RUBY
+ version, platform = data.split '-', 2
+
+ platform =
+ platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY
+
+ last_spec = set.add name, version, platform
else
dependency = parse_dependency name, data
diff --git a/lib/rubygems/resolver.rb b/lib/rubygems/resolver.rb
index d455e03c05..15a96693e9 100644
--- a/lib/rubygems/resolver.rb
+++ b/lib/rubygems/resolver.rb
@@ -179,27 +179,6 @@ class Gem::Resolver
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 e35e0aabec..27e6455148 100644
--- a/lib/rubygems/resolver/installer_set.rb
+++ b/lib/rubygems/resolver/installer_set.rb
@@ -28,11 +28,10 @@ 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
- @loaded_remote_specs = []
+ @remote_set = Gem::Resolver::BestSet.new if consider_remote?
@specs = {}
end
@@ -79,16 +78,7 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
end
end
- 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.concat @remote_set.find_all req if consider_remote?
res
end
@@ -102,27 +92,6 @@ 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 59d71d378b..e98f3284cd 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.sort.uniq.compact
+ ].flatten.uniq.compact.sort
end
######################################################################
diff --git a/lib/rubygems/test_case.rb b/lib/rubygems/test_case.rb
index 8dc37d6720..ff261f7816 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 = Gem::ConfigMap[:BASERUBY]
- Gem::ConfigMap[:BASERUBY] = Gem::ConfigMap[:ruby_install_name]
+ @orig_BASERUBY = RbConfig::CONFIG['BASERUBY']
+ RbConfig::CONFIG['BASERUBY'] = RbConfig::CONFIG['ruby_install_name']
- @orig_arch = Gem::ConfigMap[:arch]
+ @orig_arch = RbConfig::CONFIG['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
- Gem::ConfigMap[:BASERUBY] = @orig_BASERUBY
- Gem::ConfigMap[:arch] = @orig_arch
+ RbConfig::CONFIG['BASERUBY'] = @orig_BASERUBY
+ RbConfig::CONFIG['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)
- Gem::ConfigMap[:arch] = arch
+ RbConfig::CONFIG['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 4cb2a1d333..fa838333cd 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 is not installed in directory #{@gem_home}"
+ "Gem '#{spec.full_name}' is not installed in directory #{@gem_home}"
e.spec = spec
raise e