bundler 1.17.0.pre.2 → 2.1.0.pre.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of bundler might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +769 -570
- data/LICENSE.md +18 -19
- data/README.md +9 -8
- data/bundler.gemspec +12 -23
- data/exe/bundle +19 -3
- data/lib/bundler.rb +121 -68
- data/lib/bundler/build_metadata.rb +14 -7
- data/lib/bundler/capistrano.rb +4 -4
- data/lib/bundler/cli.rb +129 -121
- data/lib/bundler/cli/add.rb +27 -16
- data/lib/bundler/cli/common.rb +11 -12
- data/lib/bundler/cli/config.rb +161 -86
- data/lib/bundler/cli/console.rb +1 -1
- data/lib/bundler/cli/doctor.rb +4 -4
- data/lib/bundler/cli/exec.rb +4 -9
- data/lib/bundler/cli/gem.rb +5 -5
- data/lib/bundler/cli/info.rb +17 -5
- data/lib/bundler/cli/init.rb +1 -1
- data/lib/bundler/cli/install.rb +11 -10
- data/lib/bundler/cli/issue.rb +3 -3
- data/lib/bundler/cli/open.rb +10 -6
- data/lib/bundler/cli/outdated.rb +85 -81
- data/lib/bundler/cli/package.rb +8 -9
- data/lib/bundler/cli/plugin.rb +9 -2
- data/lib/bundler/cli/pristine.rb +1 -1
- data/lib/bundler/cli/show.rb +1 -1
- data/lib/bundler/cli/update.rb +31 -11
- data/lib/bundler/compact_index_client.rb +25 -9
- data/lib/bundler/compact_index_client/updater.rb +2 -6
- data/lib/bundler/current_ruby.rb +9 -7
- data/lib/bundler/definition.rb +35 -26
- data/lib/bundler/dependency.rb +16 -4
- data/lib/bundler/deployment.rb +1 -1
- data/lib/bundler/dsl.rb +15 -39
- data/lib/bundler/env.rb +8 -13
- data/lib/bundler/environment_preserver.rb +0 -1
- data/lib/bundler/feature_flag.rb +23 -32
- data/lib/bundler/fetcher.rb +14 -11
- data/lib/bundler/fetcher/compact_index.rb +26 -12
- data/lib/bundler/fetcher/dependency.rb +1 -1
- data/lib/bundler/fetcher/downloader.rb +4 -1
- data/lib/bundler/fetcher/index.rb +4 -2
- data/lib/bundler/friendly_errors.rb +4 -5
- data/lib/bundler/gem_helper.rb +39 -24
- data/lib/bundler/gem_helpers.rb +2 -4
- data/lib/bundler/gem_tasks.rb +1 -1
- data/lib/bundler/gem_version_promoter.rb +3 -3
- data/lib/bundler/graph.rb +2 -2
- data/lib/bundler/injector.rb +10 -8
- data/lib/bundler/inline.rb +19 -18
- data/lib/bundler/installer.rb +7 -14
- data/lib/bundler/installer/gem_installer.rb +5 -1
- data/lib/bundler/installer/parallel_installer.rb +4 -8
- data/lib/bundler/installer/standalone.rb +1 -2
- data/lib/bundler/lazy_specification.rb +2 -2
- data/lib/bundler/lockfile_parser.rb +13 -21
- data/lib/bundler/match_platform.rb +1 -1
- data/lib/bundler/plugin.rb +42 -29
- data/lib/bundler/plugin/api.rb +1 -1
- data/lib/bundler/plugin/api/source.rb +2 -2
- data/lib/bundler/plugin/index.rb +14 -3
- data/lib/bundler/plugin/installer.rb +28 -15
- data/lib/bundler/psyched_yaml.rb +1 -1
- data/lib/bundler/resolver.rb +72 -24
- data/lib/bundler/resolver/spec_group.rb +3 -2
- data/lib/bundler/retry.rb +2 -2
- data/lib/bundler/ruby_version.rb +4 -19
- data/lib/bundler/rubygems_ext.rb +10 -66
- data/lib/bundler/rubygems_gem_installer.rb +1 -1
- data/lib/bundler/rubygems_integration.rb +144 -395
- data/lib/bundler/runtime.rb +2 -9
- data/lib/bundler/settings.rb +15 -47
- data/lib/bundler/setup.rb +6 -5
- data/lib/bundler/shared_helpers.rb +64 -67
- data/lib/bundler/similarity_detector.rb +2 -2
- data/lib/bundler/source.rb +5 -5
- data/lib/bundler/source/git.rb +19 -12
- data/lib/bundler/source/git/git_proxy.rb +35 -39
- data/lib/bundler/source/metadata.rb +9 -5
- data/lib/bundler/source/path.rb +13 -8
- data/lib/bundler/source/rubygems.rb +11 -5
- data/lib/bundler/source/rubygems/remote.rb +1 -2
- data/lib/bundler/source_list.rb +9 -12
- data/lib/bundler/spec_set.rb +23 -12
- data/lib/bundler/stub_specification.rb +18 -30
- data/lib/bundler/templates/Executable.bundler +23 -14
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +3 -3
- data/lib/bundler/templates/newgem/Gemfile.tt +8 -2
- data/lib/bundler/templates/newgem/README.md.tt +4 -3
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +6 -27
- data/lib/bundler/templates/newgem/test/test_helper.rb.tt +1 -1
- data/lib/bundler/templates/newgem/travis.yml.tt +0 -1
- data/lib/bundler/ui.rb +3 -3
- data/lib/bundler/ui/rg_proxy.rb +1 -1
- data/lib/bundler/ui/shell.rb +4 -8
- data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +161 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +66 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +176 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +151 -48
- data/lib/bundler/vendor/fileutils/lib/fileutils/version.rb +5 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +6 -6
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +2 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +6 -6
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +30 -8
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +4 -4
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +2 -2
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +248 -279
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
- data/lib/bundler/vendor/thor/lib/thor.rb +7 -2
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +21 -11
- data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +11 -2
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/base.rb +16 -17
- data/lib/bundler/vendor/thor/lib/thor/error.rb +82 -0
- data/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
- data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
- data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +7 -2
- data/lib/bundler/vendor/thor/lib/thor/runner.rb +6 -6
- data/lib/bundler/vendor/thor/lib/thor/shell.rb +4 -4
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +52 -7
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendored_fileutils.rb +1 -6
- data/lib/bundler/vendored_molinillo.rb +1 -1
- data/lib/bundler/vendored_persistent.rb +7 -5
- data/lib/bundler/vendored_thor.rb +2 -2
- data/lib/bundler/version.rb +1 -20
- data/lib/bundler/version_ranges.rb +51 -5
- data/lib/bundler/vlad.rb +2 -2
- data/lib/bundler/worker.rb +1 -3
- data/lib/bundler/yaml_serializer.rb +2 -3
- data/man/bundle-add.1 +10 -2
- data/man/bundle-add.1.txt +11 -5
- data/man/bundle-add.ronn +7 -1
- data/man/bundle-binstubs.1 +2 -2
- data/man/bundle-binstubs.1.txt +2 -2
- data/man/bundle-binstubs.ronn +1 -1
- data/man/bundle-check.1 +1 -1
- data/man/bundle-check.1.txt +6 -6
- data/man/bundle-clean.1 +1 -1
- data/man/bundle-clean.1.txt +1 -1
- data/man/bundle-config.1 +52 -36
- data/man/bundle-config.1.txt +82 -67
- data/man/bundle-config.ronn +56 -40
- data/man/bundle-doctor.1 +1 -1
- data/man/bundle-doctor.1.txt +1 -1
- data/man/bundle-exec.1 +2 -2
- data/man/bundle-exec.1.txt +2 -2
- data/man/bundle-exec.ronn +1 -1
- data/man/bundle-gem.1 +1 -1
- data/man/bundle-gem.1.txt +3 -3
- data/man/bundle-info.1 +1 -1
- data/man/bundle-info.1.txt +1 -1
- data/man/bundle-init.1 +2 -2
- data/man/bundle-init.1.txt +2 -2
- data/man/bundle-init.ronn +1 -1
- data/man/bundle-inject.1 +1 -1
- data/man/bundle-inject.1.txt +1 -1
- data/man/bundle-install.1 +8 -5
- data/man/bundle-install.1.txt +56 -51
- data/man/bundle-install.ronn +9 -4
- data/man/bundle-list.1 +1 -1
- data/man/bundle-list.1.txt +1 -1
- data/man/bundle-lock.1 +1 -1
- data/man/bundle-lock.1.txt +16 -16
- data/man/bundle-open.1 +1 -1
- data/man/bundle-open.1.txt +1 -1
- data/man/bundle-outdated.1 +1 -1
- data/man/bundle-outdated.1.txt +1 -1
- data/man/bundle-package.1 +1 -1
- data/man/bundle-package.1.txt +1 -1
- data/man/bundle-platform.1 +1 -1
- data/man/bundle-platform.1.txt +1 -1
- data/man/bundle-pristine.1 +1 -1
- data/man/bundle-pristine.1.txt +1 -1
- data/man/bundle-remove.1 +1 -1
- data/man/bundle-remove.1.txt +1 -1
- data/man/bundle-show.1 +1 -1
- data/man/bundle-show.1.txt +1 -1
- data/man/bundle-update.1 +4 -4
- data/man/bundle-update.1.txt +64 -65
- data/man/bundle-update.ronn +3 -3
- data/man/bundle-viz.1 +1 -1
- data/man/bundle-viz.1.txt +1 -1
- data/man/bundle.1 +7 -3
- data/man/bundle.1.txt +11 -8
- data/man/bundle.ronn +5 -2
- data/man/gemfile.5 +17 -20
- data/man/gemfile.5.ronn +14 -18
- data/man/gemfile.5.txt +108 -112
- metadata +17 -104
- data/exe/bundle_ruby +0 -60
- data/lib/bundler/cli/cache.rb +0 -36
- data/lib/bundler/compatibility_guard.rb +0 -14
- data/lib/bundler/ssl_certs/.document +0 -1
- data/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
- data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
- data/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
@@ -62,6 +62,7 @@ module Bundler
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def eql?(other)
|
65
|
+
return unless other.is_a?(SpecGroup)
|
65
66
|
name.eql?(other.name) &&
|
66
67
|
version.eql?(other.version) &&
|
67
68
|
source.eql?(other.source)
|
@@ -94,10 +95,10 @@ module Bundler
|
|
94
95
|
return [] if !spec.is_a?(EndpointSpecification) && !spec.is_a?(Gem::Specification)
|
95
96
|
dependencies = []
|
96
97
|
if !spec.required_ruby_version.nil? && !spec.required_ruby_version.none?
|
97
|
-
dependencies << DepProxy.new(Gem::Dependency.new("
|
98
|
+
dependencies << DepProxy.new(Gem::Dependency.new("Ruby\0", spec.required_ruby_version), platform)
|
98
99
|
end
|
99
100
|
if !spec.required_rubygems_version.nil? && !spec.required_rubygems_version.none?
|
100
|
-
dependencies << DepProxy.new(Gem::Dependency.new("
|
101
|
+
dependencies << DepProxy.new(Gem::Dependency.new("RubyGems\0", spec.required_rubygems_version), platform)
|
101
102
|
end
|
102
103
|
dependencies
|
103
104
|
end
|
data/lib/bundler/retry.rb
CHANGED
data/lib/bundler/ruby_version.rb
CHANGED
@@ -49,7 +49,7 @@ module Bundler
|
|
49
49
|
([\d.]+) # ruby version
|
50
50
|
(?:p(-?\d+))? # optional patchlevel
|
51
51
|
(?:\s\((\S+)\s(.+)\))? # optional engine info
|
52
|
-
/xo
|
52
|
+
/xo.freeze
|
53
53
|
|
54
54
|
# Returns a RubyVersion from the given string.
|
55
55
|
# @param [String] the version string to match.
|
@@ -74,7 +74,7 @@ module Bundler
|
|
74
74
|
@host ||= [
|
75
75
|
RbConfig::CONFIG["host_cpu"],
|
76
76
|
RbConfig::CONFIG["host_vendor"],
|
77
|
-
RbConfig::CONFIG["host_os"]
|
77
|
+
RbConfig::CONFIG["host_os"],
|
78
78
|
].join("-")
|
79
79
|
end
|
80
80
|
|
@@ -102,24 +102,9 @@ module Bundler
|
|
102
102
|
end
|
103
103
|
|
104
104
|
def self.system
|
105
|
-
ruby_engine =
|
106
|
-
RUBY_ENGINE.dup
|
107
|
-
else
|
108
|
-
# not defined in ruby 1.8.7
|
109
|
-
"ruby"
|
110
|
-
end
|
111
|
-
# :sob: mocking RUBY_VERSION breaks stuff on 1.8.7
|
105
|
+
ruby_engine = RUBY_ENGINE.dup
|
112
106
|
ruby_version = ENV.fetch("BUNDLER_SPEC_RUBY_VERSION") { RUBY_VERSION }.dup
|
113
|
-
ruby_engine_version =
|
114
|
-
when "ruby"
|
115
|
-
ruby_version
|
116
|
-
when "rbx"
|
117
|
-
Rubinius::VERSION.dup
|
118
|
-
when "jruby"
|
119
|
-
JRUBY_VERSION.dup
|
120
|
-
else
|
121
|
-
RUBY_ENGINE_VERSION.dup
|
122
|
-
end
|
107
|
+
ruby_engine_version = RUBY_ENGINE_VERSION.dup
|
123
108
|
patchlevel = RUBY_PATCHLEVEL.to_s
|
124
109
|
|
125
110
|
@ruby_version ||= RubyVersion.new(ruby_version, patchlevel, ruby_engine, ruby_engine_version)
|
data/lib/bundler/rubygems_ext.rb
CHANGED
@@ -2,46 +2,27 @@
|
|
2
2
|
|
3
3
|
require "pathname"
|
4
4
|
|
5
|
-
if defined?(Gem::QuickLoader)
|
6
|
-
# Gem Prelude makes me a sad panda :'(
|
7
|
-
Gem::QuickLoader.load_full_rubygems_library
|
8
|
-
end
|
9
|
-
|
10
|
-
require "rubygems"
|
11
5
|
require "rubygems/specification"
|
12
6
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
require "rubygems/source"
|
17
|
-
rescue LoadError
|
18
|
-
# Not available before RubyGems 2.0.0, ignore
|
19
|
-
nil
|
20
|
-
end
|
7
|
+
# Possible use in Gem::Specification#source below and require
|
8
|
+
# shouldn't be deferred.
|
9
|
+
require "rubygems/source"
|
21
10
|
|
22
|
-
|
11
|
+
require_relative "match_platform"
|
23
12
|
|
24
13
|
module Gem
|
25
|
-
@loaded_stacks = Hash.new {|h, k| h[k] = [] }
|
26
|
-
|
27
14
|
class Specification
|
28
15
|
attr_accessor :remote, :location, :relative_loaded_from
|
29
16
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
(defined?(@source) && @source) || Gem::Source::Installed.new
|
35
|
-
end
|
36
|
-
else
|
37
|
-
attr_accessor :source
|
17
|
+
remove_method :source
|
18
|
+
attr_writer :source
|
19
|
+
def source
|
20
|
+
(defined?(@source) && @source) || Gem::Source::Installed.new
|
38
21
|
end
|
39
22
|
|
40
23
|
alias_method :rg_full_gem_path, :full_gem_path
|
41
24
|
alias_method :rg_loaded_from, :loaded_from
|
42
25
|
|
43
|
-
attr_writer :full_gem_path unless instance_methods.include?(:full_gem_path=)
|
44
|
-
|
45
26
|
def full_gem_path
|
46
27
|
# this cannot check source.is_a?(Bundler::Plugin::API::Source)
|
47
28
|
# because that _could_ trip the autoload, and if there are unresolved
|
@@ -63,15 +44,7 @@ module Gem
|
|
63
44
|
end
|
64
45
|
|
65
46
|
def load_paths
|
66
|
-
|
67
|
-
|
68
|
-
require_paths.map do |require_path|
|
69
|
-
if require_path.include?(full_gem_path)
|
70
|
-
require_path
|
71
|
-
else
|
72
|
-
File.join(full_gem_path, require_path)
|
73
|
-
end
|
74
|
-
end
|
47
|
+
full_require_paths
|
75
48
|
end
|
76
49
|
|
77
50
|
if method_defined?(:extension_dir)
|
@@ -85,10 +58,7 @@ module Gem
|
|
85
58
|
end
|
86
59
|
end
|
87
60
|
|
88
|
-
|
89
|
-
methods = instance_methods(false)
|
90
|
-
gem_dir = methods.first.is_a?(String) ? "gem_dir" : :gem_dir
|
91
|
-
remove_method :gem_dir if methods.include?(gem_dir)
|
61
|
+
remove_method :gem_dir if instance_methods(false).include?(:gem_dir)
|
92
62
|
def gem_dir
|
93
63
|
full_gem_path
|
94
64
|
end
|
@@ -158,32 +128,6 @@ module Gem
|
|
158
128
|
end
|
159
129
|
out
|
160
130
|
end
|
161
|
-
|
162
|
-
# Backport of performance enhancement added to RubyGems 1.4
|
163
|
-
def matches_spec?(spec)
|
164
|
-
# name can be a Regexp, so use ===
|
165
|
-
return false unless name === spec.name
|
166
|
-
return true if requirement.none?
|
167
|
-
|
168
|
-
requirement.satisfied_by?(spec.version)
|
169
|
-
end unless allocate.respond_to?(:matches_spec?)
|
170
|
-
end
|
171
|
-
|
172
|
-
class Requirement
|
173
|
-
# Backport of performance enhancement added to RubyGems 1.4
|
174
|
-
def none?
|
175
|
-
# note that it might be tempting to replace with with RubyGems 2.0's
|
176
|
-
# improved implementation. Don't. It requires `DefaultRequirement` to be
|
177
|
-
# defined, and more importantantly, these overrides are not used when the
|
178
|
-
# running RubyGems defines these methods
|
179
|
-
to_s == ">= 0"
|
180
|
-
end unless allocate.respond_to?(:none?)
|
181
|
-
|
182
|
-
# Backport of performance enhancement added to RubyGems 2.2
|
183
|
-
def exact?
|
184
|
-
return false unless @requirements.size == 1
|
185
|
-
@requirements[0][0] == "="
|
186
|
-
end unless allocate.respond_to?(:exact?)
|
187
131
|
end
|
188
132
|
|
189
133
|
class Platform
|
@@ -66,7 +66,7 @@ module Bundler
|
|
66
66
|
|
67
67
|
If you wish to continue installing the downloaded gem, and are certain it does not pose a \
|
68
68
|
security issue despite the mismatching checksum, do the following:
|
69
|
-
1. run `bundle config disable_checksum_validation true` to turn off checksum verification
|
69
|
+
1. run `bundle config set disable_checksum_validation true` to turn off checksum verification
|
70
70
|
2. run `bundle install`
|
71
71
|
|
72
72
|
(More info: The expected SHA256 checksum was #{checksum.inspect}, but the \
|
@@ -1,14 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "monitor"
|
4
|
-
require "rubygems"
|
5
|
-
require "rubygems/config_file"
|
6
|
-
|
7
3
|
module Bundler
|
8
4
|
class RubygemsIntegration
|
9
5
|
if defined?(Gem::Ext::Builder::CHDIR_MONITOR)
|
10
6
|
EXT_LOCK = Gem::Ext::Builder::CHDIR_MONITOR
|
11
7
|
else
|
8
|
+
require "monitor"
|
9
|
+
|
12
10
|
EXT_LOCK = Monitor.new
|
13
11
|
end
|
14
12
|
|
@@ -22,6 +20,7 @@ module Bundler
|
|
22
20
|
|
23
21
|
def initialize
|
24
22
|
@replaced_methods = {}
|
23
|
+
backport_ext_builder_monitor
|
25
24
|
end
|
26
25
|
|
27
26
|
def version
|
@@ -40,14 +39,22 @@ module Bundler
|
|
40
39
|
Gem::Command.build_args = args
|
41
40
|
end
|
42
41
|
|
43
|
-
def load_path_insert_index
|
44
|
-
Gem.load_path_insert_index
|
45
|
-
end
|
46
|
-
|
47
42
|
def loaded_specs(name)
|
48
43
|
Gem.loaded_specs[name]
|
49
44
|
end
|
50
45
|
|
46
|
+
def add_to_load_path(paths)
|
47
|
+
return Gem.add_to_load_path(*paths) if Gem.respond_to?(:add_to_load_path)
|
48
|
+
|
49
|
+
if insert_index = Gem.load_path_insert_index
|
50
|
+
# Gem directories must come after -I and ENV['RUBYLIB']
|
51
|
+
$LOAD_PATH.insert(insert_index, *paths)
|
52
|
+
else
|
53
|
+
# We are probably testing in core, -I and RUBYLIB don't apply
|
54
|
+
$LOAD_PATH.unshift(*paths)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
51
58
|
def mark_loaded(spec)
|
52
59
|
if spec.respond_to?(:activated=)
|
53
60
|
current = Gem.loaded_specs[spec.name]
|
@@ -112,7 +119,7 @@ module Bundler
|
|
112
119
|
end
|
113
120
|
|
114
121
|
def configuration
|
115
|
-
|
122
|
+
require_relative "psyched_yaml"
|
116
123
|
Gem.configuration
|
117
124
|
rescue Gem::SystemExitException, LoadError => e
|
118
125
|
Bundler.ui.error "#{e.class}: #{e.message}"
|
@@ -132,10 +139,20 @@ module Bundler
|
|
132
139
|
end
|
133
140
|
|
134
141
|
def inflate(obj)
|
135
|
-
|
136
|
-
|
142
|
+
require "rubygems/util"
|
143
|
+
|
144
|
+
Gem::Util.inflate(obj)
|
145
|
+
end
|
146
|
+
|
147
|
+
def correct_for_windows_path(path)
|
148
|
+
require "rubygems/util"
|
149
|
+
|
150
|
+
if Gem::Util.respond_to?(:correct_for_windows_path)
|
151
|
+
Gem::Util.correct_for_windows_path(path)
|
152
|
+
elsif path[0].chr == "/" && path[1].chr =~ /[a-z]/i && path[2].chr == ":"
|
153
|
+
path[1..-1]
|
137
154
|
else
|
138
|
-
|
155
|
+
path
|
139
156
|
end
|
140
157
|
end
|
141
158
|
|
@@ -196,14 +213,6 @@ module Bundler
|
|
196
213
|
Gem::MARSHAL_SPEC_DIR
|
197
214
|
end
|
198
215
|
|
199
|
-
def config_map
|
200
|
-
Gem::ConfigMap
|
201
|
-
end
|
202
|
-
|
203
|
-
def repository_subdirectories
|
204
|
-
%w[cache doc gems specifications]
|
205
|
-
end
|
206
|
-
|
207
216
|
def clear_paths
|
208
217
|
Gem.clear_paths
|
209
218
|
end
|
@@ -212,26 +221,14 @@ module Bundler
|
|
212
221
|
Gem.bin_path(gem, bin, ver)
|
213
222
|
end
|
214
223
|
|
215
|
-
def path_separator
|
216
|
-
File::PATH_SEPARATOR
|
217
|
-
end
|
218
|
-
|
219
224
|
def preserve_paths
|
220
225
|
# this is a no-op outside of RubyGems 1.8
|
221
226
|
yield
|
222
227
|
end
|
223
228
|
|
224
229
|
def loaded_gem_paths
|
225
|
-
|
226
|
-
|
227
|
-
if Gem::Specification.method_defined? :full_require_paths
|
228
|
-
loaded_gem_paths = Gem.loaded_specs.map {|_, s| s.full_require_paths }
|
229
|
-
loaded_gem_paths.flatten
|
230
|
-
else
|
231
|
-
$LOAD_PATH.select do |p|
|
232
|
-
Bundler.rubygems.gem_path.any? {|gp| p =~ /^#{Regexp.escape(gp)}/ }
|
233
|
-
end
|
234
|
-
end
|
230
|
+
loaded_gem_paths = Gem.loaded_specs.map {|_, s| s.full_require_paths }
|
231
|
+
loaded_gem_paths.flatten
|
235
232
|
end
|
236
233
|
|
237
234
|
def load_plugins
|
@@ -250,36 +247,12 @@ module Bundler
|
|
250
247
|
EXT_LOCK
|
251
248
|
end
|
252
249
|
|
253
|
-
def fetch_specs(all, pre, &blk)
|
254
|
-
require "rubygems/spec_fetcher"
|
255
|
-
specs = Gem::SpecFetcher.new.list(all, pre)
|
256
|
-
specs.each { yield } if block_given?
|
257
|
-
specs
|
258
|
-
end
|
259
|
-
|
260
250
|
def fetch_prerelease_specs
|
261
251
|
fetch_specs(false, true)
|
262
252
|
rescue Gem::RemoteFetcher::FetchError
|
263
253
|
{} # if we can't download them, there aren't any
|
264
254
|
end
|
265
255
|
|
266
|
-
# TODO: This is for older versions of RubyGems... should we support the
|
267
|
-
# X-Gemfile-Source header on these old versions?
|
268
|
-
# Maybe the newer implementation will work on older RubyGems?
|
269
|
-
# It seems difficult to keep this implementation and still send the header.
|
270
|
-
def fetch_all_remote_specs(remote)
|
271
|
-
old_sources = Bundler.rubygems.sources
|
272
|
-
Bundler.rubygems.sources = [remote.uri.to_s]
|
273
|
-
# Fetch all specs, minus prerelease specs
|
274
|
-
spec_list = fetch_specs(true, false)
|
275
|
-
# Then fetch the prerelease specs
|
276
|
-
fetch_prerelease_specs.each {|k, v| spec_list[k].concat(v) }
|
277
|
-
|
278
|
-
spec_list.values.first
|
279
|
-
ensure
|
280
|
-
Bundler.rubygems.sources = old_sources
|
281
|
-
end
|
282
|
-
|
283
256
|
def with_build_args(args)
|
284
257
|
ext_lock.synchronize do
|
285
258
|
old_args = build_args
|
@@ -292,22 +265,13 @@ module Bundler
|
|
292
265
|
end
|
293
266
|
end
|
294
267
|
|
295
|
-
def install_with_build_args(args)
|
296
|
-
with_build_args(args) { yield }
|
297
|
-
end
|
298
|
-
|
299
|
-
def gem_from_path(path, policy = nil)
|
300
|
-
require "rubygems/format"
|
301
|
-
Gem::Format.from_file_by_path(path, policy)
|
302
|
-
end
|
303
|
-
|
304
268
|
def spec_from_gem(path, policy = nil)
|
305
269
|
require "rubygems/security"
|
306
|
-
|
270
|
+
require_relative "psyched_yaml"
|
307
271
|
gem_from_path(path, security_policies[policy]).spec
|
308
272
|
rescue Gem::Package::FormatError
|
309
273
|
raise GemspecError, "Could not read gem at #{path}. It may be corrupted."
|
310
|
-
rescue Exception, Gem::Exception, Gem::Security::Exception => e
|
274
|
+
rescue Exception, Gem::Exception, Gem::Security::Exception => e # rubocop:disable Lint/RescueException
|
311
275
|
if e.is_a?(Gem::Security::Exception) ||
|
312
276
|
e.message =~ /unknown trust policy|unsigned gem/i ||
|
313
277
|
e.message =~ /couldn't verify (meta)?data signature/i
|
@@ -319,23 +283,10 @@ module Bundler
|
|
319
283
|
end
|
320
284
|
end
|
321
285
|
|
322
|
-
def build(spec, skip_validation = false)
|
323
|
-
require "rubygems/builder"
|
324
|
-
Gem::Builder.new(spec).build
|
325
|
-
end
|
326
|
-
|
327
286
|
def build_gem(gem_dir, spec)
|
328
287
|
build(spec)
|
329
288
|
end
|
330
289
|
|
331
|
-
def download_gem(spec, uri, path)
|
332
|
-
uri = Bundler.settings.mirror_for(uri)
|
333
|
-
fetcher = Gem::RemoteFetcher.new(configuration[:http_proxy])
|
334
|
-
Bundler::Retry.new("download gem from #{uri}").attempts do
|
335
|
-
fetcher.download(spec, uri, path)
|
336
|
-
end
|
337
|
-
end
|
338
|
-
|
339
290
|
def security_policy_keys
|
340
291
|
%w[High Medium Low AlmostNo No].map {|level| "#{level}Security" }
|
341
292
|
end
|
@@ -359,14 +310,6 @@ module Bundler
|
|
359
310
|
end
|
360
311
|
end
|
361
312
|
|
362
|
-
def binstubs_call_gem?
|
363
|
-
true
|
364
|
-
end
|
365
|
-
|
366
|
-
def stubs_provide_full_functionality?
|
367
|
-
false
|
368
|
-
end
|
369
|
-
|
370
313
|
def replace_gem(specs, specs_by_name)
|
371
314
|
reverse_rubygems_kernel_mixin
|
372
315
|
|
@@ -375,7 +318,6 @@ module Bundler
|
|
375
318
|
kernel = (class << ::Kernel; self; end)
|
376
319
|
[kernel, ::Kernel].each do |kernel_class|
|
377
320
|
redefine_method(kernel_class, :gem) do |dep, *reqs|
|
378
|
-
executables ||= specs.map(&:executables).flatten if ::Bundler.rubygems.binstubs_call_gem?
|
379
321
|
if executables && executables.include?(File.basename(caller.first.split(":").first))
|
380
322
|
break
|
381
323
|
end
|
@@ -413,63 +355,45 @@ module Bundler
|
|
413
355
|
end
|
414
356
|
end
|
415
357
|
|
416
|
-
def stub_source_index(specs)
|
417
|
-
Gem::SourceIndex.send(:alias_method, :old_initialize, :initialize)
|
418
|
-
redefine_method(Gem::SourceIndex, :initialize) do |*args|
|
419
|
-
@gems = {}
|
420
|
-
# You're looking at this thinking: Oh! This is how I make those
|
421
|
-
# rubygems deprecations go away!
|
422
|
-
#
|
423
|
-
# You'd be correct BUT using of this method in production code
|
424
|
-
# must be approved by the rubygems team itself!
|
425
|
-
#
|
426
|
-
# This is your warning. If you use this and don't have approval
|
427
|
-
# we can't protect you.
|
428
|
-
#
|
429
|
-
Deprecate.skip_during do
|
430
|
-
self.spec_dirs = *args
|
431
|
-
add_specs(*specs)
|
432
|
-
end
|
433
|
-
end
|
434
|
-
end
|
435
|
-
|
436
358
|
# Used to make bin stubs that are not created by bundler work
|
437
359
|
# under bundler. The new Gem.bin_path only considers gems in
|
438
360
|
# +specs+
|
439
|
-
def replace_bin_path(
|
361
|
+
def replace_bin_path(specs_by_name)
|
440
362
|
gem_class = (class << Gem; self; end)
|
441
363
|
|
442
364
|
redefine_method(gem_class, :find_spec_for_exe) do |gem_name, *args|
|
443
365
|
exec_name = args.first
|
366
|
+
raise ArgumentError, "you must supply exec_name" unless exec_name
|
444
367
|
|
445
368
|
spec_with_name = specs_by_name[gem_name]
|
446
|
-
|
447
|
-
|
448
|
-
spec_with_name
|
449
|
-
else
|
450
|
-
specs.find {|s| s.executables.include?(exec_name) }
|
451
|
-
end
|
452
|
-
else
|
453
|
-
spec_with_name
|
454
|
-
end
|
369
|
+
matching_specs_by_exec_name = specs_by_name.values.select {|s| s.executables.include?(exec_name) }
|
370
|
+
spec = matching_specs_by_exec_name.delete(spec_with_name)
|
455
371
|
|
456
|
-
unless spec
|
372
|
+
unless spec || !matching_specs_by_exec_name.empty?
|
457
373
|
message = "can't find executable #{exec_name} for gem #{gem_name}"
|
458
|
-
if
|
374
|
+
if spec_with_name.nil?
|
459
375
|
message += ". #{gem_name} is not currently included in the bundle, " \
|
460
376
|
"perhaps you meant to add it to your #{Bundler.default_gemfile.basename}?"
|
461
377
|
end
|
462
378
|
raise Gem::Exception, message
|
463
379
|
end
|
464
380
|
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
Bundler::SharedHelpers.major_deprecation 2,
|
381
|
+
unless spec
|
382
|
+
spec = matching_specs_by_exec_name.shift
|
383
|
+
warn \
|
469
384
|
"Bundler is using a binstub that was created for a different gem (#{spec.name}).\n" \
|
470
385
|
"You should run `bundle binstub #{gem_name}` " \
|
471
386
|
"to work around a system/bundle conflict."
|
472
387
|
end
|
388
|
+
|
389
|
+
unless matching_specs_by_exec_name.empty?
|
390
|
+
conflicting_names = matching_specs_by_exec_name.map(&:name).join(", ")
|
391
|
+
warn \
|
392
|
+
"The `#{exec_name}` executable in the `#{spec.name}` gem is being loaded, but it's also present in other gems (#{conflicting_names}).\n" \
|
393
|
+
"If you meant to run the executable for another gem, make sure you use a project specific binstub (`bundle binstub <gem_name>`).\n" \
|
394
|
+
"If you plan to use multiple conflicting executables, generate binstubs for them and disambiguate their names."
|
395
|
+
end
|
396
|
+
|
473
397
|
spec
|
474
398
|
end
|
475
399
|
|
@@ -499,13 +423,6 @@ module Bundler
|
|
499
423
|
end
|
500
424
|
end
|
501
425
|
|
502
|
-
# Because Bundler has a static view of what specs are available,
|
503
|
-
# we don't #refresh, so stub it out.
|
504
|
-
def replace_refresh
|
505
|
-
gem_class = (class << Gem; self; end)
|
506
|
-
redefine_method(gem_class, :refresh) {}
|
507
|
-
end
|
508
|
-
|
509
426
|
# Replace or hook into RubyGems to provide a bundlerized view
|
510
427
|
# of the world.
|
511
428
|
def replace_entrypoints(specs)
|
@@ -514,33 +431,22 @@ module Bundler
|
|
514
431
|
h
|
515
432
|
end
|
516
433
|
|
434
|
+
Bundler.rubygems.default_stubs.each do |stub|
|
435
|
+
default_spec = stub.to_spec
|
436
|
+
default_spec_name = default_spec.name
|
437
|
+
next if specs_by_name.key?(default_spec_name)
|
438
|
+
|
439
|
+
specs << default_spec
|
440
|
+
specs_by_name[default_spec_name] = default_spec
|
441
|
+
end
|
442
|
+
|
517
443
|
replace_gem(specs, specs_by_name)
|
518
444
|
stub_rubygems(specs)
|
519
|
-
replace_bin_path(
|
520
|
-
replace_refresh
|
445
|
+
replace_bin_path(specs_by_name)
|
521
446
|
|
522
447
|
Gem.clear_paths
|
523
448
|
end
|
524
449
|
|
525
|
-
# This backports the correct segment generation code from RubyGems 1.4+
|
526
|
-
# by monkeypatching it into the method in RubyGems 1.3.6 and 1.3.7.
|
527
|
-
def backport_segment_generation
|
528
|
-
redefine_method(Gem::Version, :segments) do
|
529
|
-
@segments ||= @version.scan(/[0-9]+|[a-z]+/i).map do |s|
|
530
|
-
/^\d+$/ =~ s ? s.to_i : s
|
531
|
-
end
|
532
|
-
end
|
533
|
-
end
|
534
|
-
|
535
|
-
# This backport fixes the marshaling of @segments.
|
536
|
-
def backport_yaml_initialize
|
537
|
-
redefine_method(Gem::Version, :yaml_initialize) do |_, map|
|
538
|
-
@version = map["version"]
|
539
|
-
@segments = nil
|
540
|
-
@hash = nil
|
541
|
-
end
|
542
|
-
end
|
543
|
-
|
544
450
|
# This backports base_dir which replaces installation path
|
545
451
|
# RubyGems 1.8+
|
546
452
|
def backport_base_dir
|
@@ -613,286 +519,129 @@ module Bundler
|
|
613
519
|
end
|
614
520
|
end
|
615
521
|
|
616
|
-
|
617
|
-
|
618
|
-
def initialize
|
619
|
-
super
|
620
|
-
backport_base_dir
|
621
|
-
backport_cache_file
|
622
|
-
backport_spec_file
|
623
|
-
backport_yaml_initialize
|
624
|
-
end
|
522
|
+
def stub_rubygems(specs)
|
523
|
+
Gem::Specification.all = specs
|
625
524
|
|
626
|
-
|
627
|
-
|
628
|
-
source_index_class = (class << Gem::SourceIndex; self; end)
|
629
|
-
redefine_method(source_index_class, :from_gems_in) do |*args|
|
630
|
-
Gem::SourceIndex.new.tap do |source_index|
|
631
|
-
source_index.spec_dirs = *args
|
632
|
-
source_index.add_specs(*specs)
|
633
|
-
end
|
634
|
-
end
|
525
|
+
Gem.post_reset do
|
526
|
+
Gem::Specification.all = specs
|
635
527
|
end
|
636
528
|
|
637
|
-
|
638
|
-
|
529
|
+
redefine_method((class << Gem; self; end), :finish_resolve) do |*|
|
530
|
+
[]
|
639
531
|
end
|
532
|
+
end
|
640
533
|
|
641
|
-
|
642
|
-
|
643
|
-
|
534
|
+
def fetch_specs(source, remote, name)
|
535
|
+
path = source + "#{name}.#{Gem.marshal_version}.gz"
|
536
|
+
fetcher = gem_remote_fetcher
|
537
|
+
fetcher.headers = { "X-Gemfile-Source" => remote.original_uri.to_s } if remote.original_uri
|
538
|
+
string = fetcher.fetch_path(path)
|
539
|
+
Bundler.load_marshal(string)
|
540
|
+
rescue Gem::RemoteFetcher::FetchError => e
|
541
|
+
# it's okay for prerelease to fail
|
542
|
+
raise e unless name == "prerelease_specs"
|
543
|
+
end
|
644
544
|
|
645
|
-
|
646
|
-
|
647
|
-
# which is too strict for the kinds of checks we care about. As a
|
648
|
-
# result, validation is disabled on versions of RubyGems below 1.7.
|
649
|
-
end
|
545
|
+
def fetch_all_remote_specs(remote)
|
546
|
+
source = remote.uri.is_a?(URI) ? remote.uri : URI.parse(source.to_s)
|
650
547
|
|
651
|
-
|
652
|
-
|
653
|
-
end
|
548
|
+
specs = fetch_specs(source, remote, "specs")
|
549
|
+
pres = fetch_specs(source, remote, "prerelease_specs") || []
|
654
550
|
|
655
|
-
|
656
|
-
end
|
551
|
+
specs.concat(pres)
|
657
552
|
end
|
658
553
|
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
554
|
+
def download_gem(spec, uri, path)
|
555
|
+
uri = Bundler.settings.mirror_for(uri)
|
556
|
+
fetcher = gem_remote_fetcher
|
557
|
+
fetcher.headers = { "X-Gemfile-Source" => spec.remote.original_uri.to_s } if spec.remote.original_uri
|
558
|
+
Bundler::Retry.new("download gem from #{uri}").attempts do
|
559
|
+
fetcher.download(spec, uri, path)
|
664
560
|
end
|
665
561
|
end
|
666
562
|
|
667
|
-
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
def validate(spec)
|
674
|
-
# Missing summary is downgraded to a warning in later versions,
|
675
|
-
# so we set it to an empty string to prevent an exception here.
|
676
|
-
spec.summary ||= ""
|
677
|
-
RubygemsIntegration.instance_method(:validate).bind(self).call(spec)
|
678
|
-
end
|
563
|
+
def gem_remote_fetcher
|
564
|
+
require "resolv"
|
565
|
+
proxy = configuration[:http_proxy]
|
566
|
+
dns = Resolv::DNS.new
|
567
|
+
Bundler::GemRemoteFetcher.new(proxy, dns)
|
679
568
|
end
|
680
569
|
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
Gem::Specification.all = specs
|
688
|
-
end
|
570
|
+
def gem_from_path(path, policy = nil)
|
571
|
+
require "rubygems/package"
|
572
|
+
p = Gem::Package.new(path)
|
573
|
+
p.security_policy = policy if policy
|
574
|
+
p
|
575
|
+
end
|
689
576
|
|
690
|
-
|
691
|
-
|
577
|
+
def build(spec, skip_validation = false)
|
578
|
+
require "rubygems/package"
|
579
|
+
Gem::Package.build(spec, skip_validation)
|
580
|
+
end
|
692
581
|
|
693
|
-
|
694
|
-
|
695
|
-
|
582
|
+
def repository_subdirectories
|
583
|
+
Gem::REPOSITORY_SUBDIRECTORIES
|
584
|
+
end
|
696
585
|
|
697
|
-
|
698
|
-
|
699
|
-
end
|
586
|
+
def install_with_build_args(args)
|
587
|
+
yield
|
700
588
|
end
|
701
589
|
|
702
|
-
|
703
|
-
|
704
|
-
# RubyGems [>= 1.8.0, < 1.8.5] has a bug that changes Gem.dir whenever
|
705
|
-
# you call Gem::Installer#install with an :install_dir set. We have to
|
706
|
-
# change it back for our sudo mode to work.
|
707
|
-
def preserve_paths
|
708
|
-
old_dir = gem_dir
|
709
|
-
old_path = gem_path
|
710
|
-
yield
|
711
|
-
Gem.use_paths(old_dir, old_path)
|
712
|
-
end
|
590
|
+
def path_separator
|
591
|
+
Gem.path_separator
|
713
592
|
end
|
714
593
|
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
def build(spec, skip_validation = false)
|
720
|
-
require "rubygems/builder"
|
721
|
-
Gem::Builder.new(spec).build(skip_validation)
|
594
|
+
def all_specs
|
595
|
+
require_relative "remote_specification"
|
596
|
+
Gem::Specification.stubs.map do |stub|
|
597
|
+
StubSpecification.from_stub(stub)
|
722
598
|
end
|
723
599
|
end
|
724
600
|
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
Gem.post_reset do
|
731
|
-
Gem::Specification.all = specs
|
732
|
-
end
|
733
|
-
|
734
|
-
redefine_method((class << Gem; self; end), :finish_resolve) do |*|
|
735
|
-
[]
|
601
|
+
def backport_ext_builder_monitor
|
602
|
+
# So we can avoid requiring "rubygems/ext" in its entirety
|
603
|
+
Gem.module_eval <<-RB, __FILE__, __LINE__ + 1
|
604
|
+
module Ext
|
736
605
|
end
|
737
|
-
|
738
|
-
|
739
|
-
def all_specs
|
740
|
-
Gem::Specification.to_a
|
741
|
-
end
|
742
|
-
|
743
|
-
def find_name(name)
|
744
|
-
Gem::Specification.find_all_by_name name
|
745
|
-
end
|
606
|
+
RB
|
746
607
|
|
747
|
-
|
748
|
-
path = source + "#{name}.#{Gem.marshal_version}.gz"
|
749
|
-
fetcher = gem_remote_fetcher
|
750
|
-
fetcher.headers = { "X-Gemfile-Source" => remote.original_uri.to_s } if remote.original_uri
|
751
|
-
string = fetcher.fetch_path(path)
|
752
|
-
Bundler.load_marshal(string)
|
753
|
-
rescue Gem::RemoteFetcher::FetchError => e
|
754
|
-
# it's okay for prerelease to fail
|
755
|
-
raise e unless name == "prerelease_specs"
|
756
|
-
end
|
757
|
-
|
758
|
-
def fetch_all_remote_specs(remote)
|
759
|
-
source = remote.uri.is_a?(URI) ? remote.uri : URI.parse(source.to_s)
|
760
|
-
|
761
|
-
specs = fetch_specs(source, remote, "specs")
|
762
|
-
pres = fetch_specs(source, remote, "prerelease_specs") || []
|
763
|
-
|
764
|
-
specs.concat(pres)
|
765
|
-
end
|
608
|
+
require "rubygems/ext/builder"
|
766
609
|
|
767
|
-
|
768
|
-
|
769
|
-
|
770
|
-
fetcher.headers = { "X-Gemfile-Source" => spec.remote.original_uri.to_s } if spec.remote.original_uri
|
771
|
-
Bundler::Retry.new("download gem from #{uri}").attempts do
|
772
|
-
fetcher.download(spec, uri, path)
|
610
|
+
Gem::Ext::Builder.class_eval do
|
611
|
+
unless const_defined?(:CHDIR_MONITOR)
|
612
|
+
const_set(:CHDIR_MONITOR, EXT_LOCK)
|
773
613
|
end
|
774
|
-
end
|
775
|
-
|
776
|
-
def gem_remote_fetcher
|
777
|
-
require "resolv"
|
778
|
-
proxy = configuration[:http_proxy]
|
779
|
-
dns = Resolv::DNS.new
|
780
|
-
Bundler::GemRemoteFetcher.new(proxy, dns)
|
781
|
-
end
|
782
|
-
|
783
|
-
def gem_from_path(path, policy = nil)
|
784
|
-
require "rubygems/package"
|
785
|
-
p = Gem::Package.new(path)
|
786
|
-
p.security_policy = policy if policy
|
787
|
-
p
|
788
|
-
end
|
789
614
|
|
790
|
-
|
791
|
-
|
792
|
-
Gem::Package.build(spec, skip_validation)
|
793
|
-
end
|
794
|
-
|
795
|
-
def repository_subdirectories
|
796
|
-
Gem::REPOSITORY_SUBDIRECTORIES
|
797
|
-
end
|
798
|
-
|
799
|
-
def install_with_build_args(args)
|
800
|
-
yield
|
801
|
-
end
|
802
|
-
|
803
|
-
def path_separator
|
804
|
-
Gem.path_separator
|
615
|
+
remove_const(:CHDIR_MUTEX) if const_defined?(:CHDIR_MUTEX)
|
616
|
+
const_set(:CHDIR_MUTEX, const_get(:CHDIR_MONITOR))
|
805
617
|
end
|
806
618
|
end
|
807
619
|
|
808
|
-
|
809
|
-
|
810
|
-
|
811
|
-
super
|
812
|
-
backport_ext_builder_monitor
|
813
|
-
end
|
814
|
-
|
815
|
-
def all_specs
|
816
|
-
require "bundler/remote_specification"
|
817
|
-
Gem::Specification.stubs.map do |stub|
|
818
|
-
StubSpecification.from_stub(stub)
|
819
|
-
end
|
820
|
-
end
|
821
|
-
|
822
|
-
def backport_ext_builder_monitor
|
823
|
-
# So we can avoid requiring "rubygems/ext" in its entirety
|
824
|
-
Gem.module_eval <<-RB, __FILE__, __LINE__ + 1
|
825
|
-
module Ext
|
826
|
-
end
|
827
|
-
RB
|
828
|
-
|
829
|
-
require "rubygems/ext/builder"
|
830
|
-
|
831
|
-
Gem::Ext::Builder.class_eval do
|
832
|
-
unless const_defined?(:CHDIR_MONITOR)
|
833
|
-
const_set(:CHDIR_MONITOR, EXT_LOCK)
|
834
|
-
end
|
835
|
-
|
836
|
-
remove_const(:CHDIR_MUTEX) if const_defined?(:CHDIR_MUTEX)
|
837
|
-
const_set(:CHDIR_MUTEX, const_get(:CHDIR_MONITOR))
|
838
|
-
end
|
839
|
-
end
|
620
|
+
def find_name(name)
|
621
|
+
Gem::Specification.stubs_for(name).map(&:to_spec)
|
622
|
+
end
|
840
623
|
|
841
|
-
|
842
|
-
|
843
|
-
|
844
|
-
end
|
845
|
-
else
|
846
|
-
def find_name(name)
|
847
|
-
Gem::Specification.stubs.find_all do |spec|
|
848
|
-
spec.name == name
|
849
|
-
end.map(&:to_spec)
|
850
|
-
end
|
624
|
+
if Gem::Specification.respond_to?(:default_stubs)
|
625
|
+
def default_stubs
|
626
|
+
Gem::Specification.default_stubs("*.gemspec")
|
851
627
|
end
|
852
|
-
|
853
|
-
def
|
854
|
-
|
855
|
-
require "bundler/gemdeps"
|
856
|
-
runtime = Bundler.setup
|
857
|
-
Bundler.ui = nil
|
858
|
-
activated_spec_names = runtime.requested_specs.map(&:to_spec).sort_by(&:name)
|
859
|
-
[Gemdeps.new(runtime), activated_spec_names]
|
628
|
+
else
|
629
|
+
def default_stubs
|
630
|
+
Gem::Specification.send(:default_stubs, "*.gemspec")
|
860
631
|
end
|
632
|
+
end
|
861
633
|
|
862
|
-
|
863
|
-
|
864
|
-
|
865
|
-
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
# is a performance optimization _only_,
|
870
|
-
# we'll restrict ourselves to the most
|
871
|
-
# recent RG versions instead of all versions that have stubs
|
872
|
-
def stubs_provide_full_functionality?
|
873
|
-
true
|
874
|
-
end
|
875
|
-
end
|
634
|
+
def use_gemdeps(gemfile)
|
635
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path(gemfile)
|
636
|
+
require_relative "gemdeps"
|
637
|
+
runtime = Bundler.setup
|
638
|
+
Bundler.ui = nil
|
639
|
+
activated_spec_names = runtime.requested_specs.map(&:to_spec).sort_by(&:name)
|
640
|
+
[Gemdeps.new(runtime), activated_spec_names]
|
876
641
|
end
|
877
642
|
end
|
878
643
|
|
879
644
|
def self.rubygems
|
880
|
-
@rubygems ||=
|
881
|
-
RubygemsIntegration::MoreFuture.new
|
882
|
-
elsif RubygemsIntegration.provides?(">= 1.99.99")
|
883
|
-
RubygemsIntegration::Future.new
|
884
|
-
elsif RubygemsIntegration.provides?(">= 1.8.20")
|
885
|
-
RubygemsIntegration::MoreModern.new
|
886
|
-
elsif RubygemsIntegration.provides?(">= 1.8.5")
|
887
|
-
RubygemsIntegration::Modern.new
|
888
|
-
elsif RubygemsIntegration.provides?(">= 1.8.0")
|
889
|
-
RubygemsIntegration::AlmostModern.new
|
890
|
-
elsif RubygemsIntegration.provides?(">= 1.7.0")
|
891
|
-
RubygemsIntegration::Transitional.new
|
892
|
-
elsif RubygemsIntegration.provides?(">= 1.4.0")
|
893
|
-
RubygemsIntegration::Legacy.new
|
894
|
-
else # RubyGems 1.3.6 and 1.3.7
|
895
|
-
RubygemsIntegration::Ancient.new
|
896
|
-
end
|
645
|
+
@rubygems ||= RubygemsIntegration.new
|
897
646
|
end
|
898
647
|
end
|