lib/bundler/rubygems_integration.rb in bundler-1.2.5 vs lib/bundler/rubygems_integration.rb in bundler-1.3.0.pre
- old
+ new
@@ -1,12 +1,9 @@
+require 'rubygems'
+
module Bundler
class RubygemsIntegration
- def initialize
- # Work around a RubyGems bug
- configuration
- end
-
def loaded_specs(name)
Gem.loaded_specs[name]
end
def mark_loaded(spec)
@@ -88,10 +85,26 @@
def fetch_specs(all, pre, &blk)
Gem::SpecFetcher.new.list(all, pre).each(&blk)
end
+ def fetch_all_remote_specs
+ spec_list = Hash.new { |h,k| h[k] = [] }
+ begin
+ # Fetch all specs, minus prerelease specs
+ spec_list = Gem::SpecFetcher.new.list(true, false)
+ # Then fetch the prerelease specs
+ begin
+ Gem::SpecFetcher.new.list(false, true).each {|k, v| spec_list[k] += v }
+ rescue Gem::RemoteFetcher::FetchError => e
+ # ignore if we can't fetch the prerelease specs
+ end
+ end
+
+ return spec_list
+ end
+
def with_build_args(args)
old_args = Gem::Command.build_args
begin
Gem::Command.build_args = args
yield
@@ -99,13 +112,25 @@
Gem::Command.build_args = old_args
end
end
def spec_from_gem(path)
+ require 'rubygems/format'
Gem::Format.from_file_by_path(path).spec
+ rescue Gem::Package::FormatError
+ raise Bundler::GemspecError, "Could not read gem at #{path}. It may be corrupted."
end
+ def build(spec)
+ require 'rubygems/builder'
+ Gem::Builder.new(spec).build
+ end
+
+ def build_gem(gem_dir, spec)
+ Dir.chdir(gem_dir) { build(spec) }
+ end
+
def download_gem(spec, uri, path)
Gem::RemoteFetcher.fetcher.download(spec, uri, path)
end
def reverse_rubygems_kernel_mixin
@@ -159,20 +184,10 @@
true
end
end
- if defined? ::Deprecate
- Deprecate = ::Deprecate
- elsif defined? Gem::Deprecate
- Deprecate = Gem::Deprecate
- else
- class Deprecate
- def skip_during; yield; end
- end
- end
-
def stub_source_index137(specs)
# Rubygems versions lower than 1.7 use SourceIndex#from_gems_in
source_index_class = (class << Gem::SourceIndex ; self ; end)
source_index_class.send(:remove_method, :from_gems_in)
source_index_class.send(:define_method, :from_gems_in) do |*args|
@@ -339,11 +354,11 @@
def stub_rubygems(specs)
stub_source_index170(specs)
end
end
- # Rubygems 1.8.5
+ # Rubygems ~> 1.8.5
class Modern < RubygemsIntegration
def stub_rubygems(specs)
Gem::Specification.all = specs
Gem.post_reset {
@@ -372,12 +387,63 @@
yield
Gem.use_paths(old_dir, old_path)
end
end
+ # Rubygems 2.0
+ class Future < RubygemsIntegration
+ require 'rubygems/package'
+
+ def stub_rubygems(specs)
+ Gem::Specification.all = specs
+
+ Gem.post_reset {
+ Gem::Specification.all = specs
+ }
+ end
+
+ def all_specs
+ Gem::Specification.to_a
+ end
+
+ def find_name(name)
+ Gem::Specification.find_all_by_name name
+ end
+
+ def fetch_all_remote_specs
+ tuples, errors = Gem::SpecFetcher.new.available_specs(:complete)
+ # only raise if we don't get any specs back.
+ # this means we still work if prerelease_specs.4.8.gz
+ # don't exist but specs.4.8.gz do
+ if tuples.empty? && error = errors.detect {|e| e.is_a?(Gem::SourceFetchProblem) }
+ raise Gem::RemoteFetcher::FetchError.new(error.error, error.source)
+ end
+
+ hash = {}
+ tuples.each do |source,tuples|
+ hash[source.uri] = tuples.map { |tuple| tuple.to_a }
+ end
+
+ hash
+ end
+
+ def spec_from_gem(path)
+ Gem::Package.new(path).spec
+ rescue Gem::Package::FormatError
+ raise Bundler::GemspecError, "Could not read gem at #{path}. It may be corrupted."
+ end
+
+ def build(spec)
+ Gem::Package.build(spec)
+ end
+
+ end
+
end
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.8.5')
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.99.99')
+ @rubygems = RubygemsIntegration::Future.new
+ elsif Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.8.5')
@rubygems = RubygemsIntegration::Modern.new
elsif Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.8.0')
@rubygems = RubygemsIntegration::AlmostModern.new
elsif Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.7.0')
@rubygems = RubygemsIntegration::Transitional.new