bundler 1.15.4 → 1.16.0.pre.1
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 +5 -5
- data/CHANGELOG.md +43 -0
- data/README.md +12 -7
- data/exe/bundle +1 -1
- data/exe/bundle_ruby +4 -3
- data/lib/bundler.rb +47 -37
- data/lib/bundler/build_metadata.rb +38 -0
- data/lib/bundler/capistrano.rb +5 -0
- data/lib/bundler/cli.rb +155 -67
- data/lib/bundler/cli/add.rb +0 -1
- data/lib/bundler/cli/binstubs.rb +9 -7
- data/lib/bundler/cli/cache.rb +5 -4
- data/lib/bundler/cli/check.rb +3 -5
- data/lib/bundler/cli/clean.rb +5 -6
- data/lib/bundler/cli/common.rb +11 -2
- data/lib/bundler/cli/config.rb +2 -1
- data/lib/bundler/cli/console.rb +2 -1
- data/lib/bundler/cli/doctor.rb +1 -0
- data/lib/bundler/cli/exec.rb +2 -1
- data/lib/bundler/cli/gem.rb +3 -2
- data/lib/bundler/cli/info.rb +0 -1
- data/lib/bundler/cli/init.rb +17 -6
- data/lib/bundler/cli/inject.rb +1 -0
- data/lib/bundler/cli/install.rb +61 -61
- data/lib/bundler/cli/issue.rb +1 -1
- data/lib/bundler/cli/list.rb +22 -0
- data/lib/bundler/cli/lock.rb +0 -1
- data/lib/bundler/cli/open.rb +2 -2
- data/lib/bundler/cli/outdated.rb +13 -8
- data/lib/bundler/cli/package.rb +9 -6
- data/lib/bundler/cli/platform.rb +1 -0
- data/lib/bundler/cli/plugin.rb +1 -0
- data/lib/bundler/cli/pristine.rb +9 -2
- data/lib/bundler/cli/show.rb +0 -1
- data/lib/bundler/cli/update.rb +31 -5
- data/lib/bundler/cli/viz.rb +1 -0
- data/lib/bundler/compact_index_client.rb +1 -0
- data/lib/bundler/compact_index_client/cache.rb +1 -0
- data/lib/bundler/compact_index_client/updater.rb +3 -2
- data/lib/bundler/compatibility_guard.rb +14 -0
- data/lib/bundler/constants.rb +1 -0
- data/lib/bundler/current_ruby.rb +5 -4
- data/lib/bundler/definition.rb +140 -95
- data/lib/bundler/dep_proxy.rb +2 -0
- data/lib/bundler/dependency.rb +6 -7
- data/lib/bundler/deployment.rb +1 -1
- data/lib/bundler/deprecate.rb +1 -0
- data/lib/bundler/dsl.rb +97 -62
- data/lib/bundler/endpoint_specification.rb +9 -0
- data/lib/bundler/env.rb +63 -27
- data/lib/bundler/environment_preserver.rb +26 -6
- data/lib/bundler/errors.rb +1 -0
- data/lib/bundler/feature_flag.rb +39 -4
- data/lib/bundler/fetcher.rb +15 -8
- data/lib/bundler/fetcher/base.rb +1 -0
- data/lib/bundler/fetcher/compact_index.rb +2 -11
- data/lib/bundler/fetcher/dependency.rb +1 -0
- data/lib/bundler/fetcher/downloader.rb +1 -0
- data/lib/bundler/fetcher/index.rb +1 -0
- data/lib/bundler/friendly_errors.rb +2 -1
- data/lib/bundler/gem_helper.rb +14 -9
- data/lib/bundler/gem_helpers.rb +1 -0
- data/lib/bundler/gem_remote_fetcher.rb +1 -0
- data/lib/bundler/gem_tasks.rb +1 -0
- data/lib/bundler/gem_version_promoter.rb +1 -0
- data/lib/bundler/gemdeps.rb +1 -0
- data/lib/bundler/graph.rb +1 -0
- data/lib/bundler/index.rb +15 -8
- data/lib/bundler/injector.rb +25 -22
- data/lib/bundler/inline.rb +5 -7
- data/lib/bundler/installer.rb +93 -45
- data/lib/bundler/installer/gem_installer.rb +2 -0
- data/lib/bundler/installer/parallel_installer.rb +73 -42
- data/lib/bundler/installer/standalone.rb +1 -0
- data/lib/bundler/lazy_specification.rb +2 -1
- data/lib/bundler/lockfile_generator.rb +95 -0
- data/lib/bundler/lockfile_parser.rb +10 -4
- data/lib/bundler/match_platform.rb +1 -0
- data/lib/bundler/mirror.rb +6 -3
- data/lib/bundler/plugin.rb +1 -0
- data/lib/bundler/plugin/api/source.rb +8 -0
- data/lib/bundler/plugin/installer.rb +7 -6
- data/lib/bundler/plugin/source_list.rb +7 -8
- data/lib/bundler/process_lock.rb +24 -0
- data/lib/bundler/psyched_yaml.rb +1 -0
- data/lib/bundler/remote_specification.rb +1 -0
- data/lib/bundler/resolver.rb +138 -191
- data/lib/bundler/resolver/spec_group.rb +111 -0
- data/lib/bundler/retry.rb +1 -0
- data/lib/bundler/ruby_dsl.rb +1 -0
- data/lib/bundler/ruby_version.rb +1 -0
- data/lib/bundler/rubygems_ext.rb +5 -4
- data/lib/bundler/rubygems_gem_installer.rb +23 -0
- data/lib/bundler/rubygems_integration.rb +56 -27
- data/lib/bundler/runtime.rb +3 -5
- data/lib/bundler/settings.rb +177 -76
- data/lib/bundler/settings/validator.rb +79 -0
- data/lib/bundler/setup.rb +1 -0
- data/lib/bundler/shared_helpers.rb +86 -26
- data/lib/bundler/similarity_detector.rb +1 -0
- data/lib/bundler/source.rb +32 -0
- data/lib/bundler/source/gemspec.rb +1 -0
- data/lib/bundler/source/git.rb +21 -16
- data/lib/bundler/source/git/git_proxy.rb +14 -10
- data/lib/bundler/source/metadata.rb +63 -0
- data/lib/bundler/source/path.rb +8 -8
- data/lib/bundler/source/path/installer.rb +2 -0
- data/lib/bundler/source/rubygems.rb +131 -84
- data/lib/bundler/source/rubygems/remote.rb +3 -0
- data/lib/bundler/source_list.rb +75 -15
- data/lib/bundler/spec_set.rb +2 -1
- data/lib/bundler/ssl_certs/certificate_manager.rb +2 -1
- data/lib/bundler/stub_specification.rb +1 -0
- data/lib/bundler/templates/Executable +4 -0
- data/lib/bundler/templates/Executable.bundler +105 -0
- data/lib/bundler/templates/Gemfile +1 -0
- data/lib/bundler/templates/gems.rb +8 -0
- data/lib/bundler/templates/newgem/README.md.tt +1 -1
- data/lib/bundler/templates/newgem/gitignore.tt +0 -1
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +4 -1
- data/lib/bundler/templates/newgem/rspec.tt +1 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +0 -2
- data/lib/bundler/ui.rb +1 -0
- data/lib/bundler/ui/rg_proxy.rb +1 -0
- data/lib/bundler/ui/shell.rb +15 -4
- data/lib/bundler/ui/silent.rb +1 -0
- data/lib/bundler/uri_credentials_filter.rb +1 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1638 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +2 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +26 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +3 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +3 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +69 -6
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +2 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +3 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +487 -148
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +8 -4
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
- data/lib/bundler/vendored_fileutils.rb +9 -0
- data/lib/bundler/vendored_molinillo.rb +1 -0
- data/lib/bundler/vendored_persistent.rb +34 -0
- data/lib/bundler/vendored_thor.rb +1 -0
- data/lib/bundler/version.rb +6 -2
- data/lib/bundler/version_ranges.rb +1 -0
- data/lib/bundler/vlad.rb +5 -0
- data/lib/bundler/worker.rb +1 -0
- data/lib/bundler/yaml_serializer.rb +3 -3
- data/man/bundle-add.1 +43 -0
- data/man/bundle-add.1.txt +40 -0
- data/man/bundle-binstubs.1 +40 -0
- data/man/bundle-binstubs.1.txt +48 -0
- data/man/bundle-binstubs.ronn +14 -0
- data/man/bundle-check.1 +31 -0
- data/man/bundle-check.1.txt +32 -0
- data/man/bundle-clean.1 +24 -0
- data/man/bundle-clean.1.txt +26 -0
- data/man/bundle-config.1 +455 -0
- data/man/bundle-config.1.txt +491 -0
- data/man/bundle-config.ronn +133 -79
- data/man/bundle-exec.1 +165 -0
- data/man/bundle-exec.1.txt +178 -0
- data/man/bundle-exec.ronn +7 -0
- data/man/bundle-gem.1 +80 -0
- data/man/bundle-gem.1.txt +91 -0
- data/man/bundle-gem.ronn +2 -1
- data/man/bundle-info.1 +20 -0
- data/man/bundle-info.1.txt +21 -0
- data/man/bundle-init.1 +20 -0
- data/man/bundle-init.1.txt +24 -0
- data/man/bundle-inject.1 +33 -0
- data/man/bundle-inject.1.txt +32 -0
- data/man/bundle-install.1 +305 -0
- data/man/bundle-install.1.txt +385 -0
- data/man/bundle-install.ronn +32 -32
- data/man/bundle-list.1 +20 -0
- data/man/bundle-list.1.txt +21 -0
- data/man/bundle-list.ronn +15 -0
- data/man/bundle-lock.1 +84 -0
- data/man/bundle-lock.1.txt +93 -0
- data/man/bundle-open.1 +32 -0
- data/man/bundle-open.1.txt +29 -0
- data/man/bundle-outdated.1 +151 -0
- data/man/bundle-outdated.1.txt +127 -0
- data/man/bundle-outdated.ronn +1 -1
- data/man/bundle-package.1 +55 -0
- data/man/bundle-package.1.txt +79 -0
- data/man/bundle-package.ronn +5 -0
- data/man/bundle-platform.1 +61 -0
- data/man/bundle-platform.1.txt +57 -0
- data/man/bundle-pristine.1 +34 -0
- data/man/bundle-pristine.1.txt +44 -0
- data/man/bundle-pristine.ronn +24 -3
- data/man/bundle-show.1 +23 -0
- data/man/bundle-show.1.txt +25 -0
- data/man/bundle-update.1 +390 -0
- data/man/bundle-update.1.txt +386 -0
- data/man/bundle-update.ronn +2 -2
- data/man/bundle-viz.1 +39 -0
- data/man/bundle-viz.1.txt +38 -0
- data/man/bundle-viz.ronn +5 -5
- data/man/bundle.1 +132 -0
- data/man/bundle.1.txt +113 -0
- data/man/bundle.ronn +5 -2
- data/man/gemfile.5 +679 -0
- data/man/gemfile.5.ronn +31 -0
- data/man/gemfile.5.txt +636 -0
- data/man/index.txt +23 -0
- metadata +21 -36
- data/.codeclimate.yml +0 -25
- data/.gitignore +0 -18
- data/.rspec +0 -3
- data/.rubocop.yml +0 -131
- data/.rubocop_todo.yml +0 -418
- data/.travis.yml +0 -122
- data/CODE_OF_CONDUCT.md +0 -42
- data/CONTRIBUTING.md +0 -17
- data/Rakefile +0 -338
- data/bin/rake +0 -19
- data/bin/rspec +0 -15
- data/bin/rubocop +0 -17
- data/bin/with_rubygems +0 -39
- data/bundler.gemspec +0 -48
- data/doc/README.md +0 -30
- data/doc/TROUBLESHOOTING.md +0 -64
- data/doc/contributing/BUG_TRIAGE.md +0 -36
- data/doc/contributing/COMMUNITY.md +0 -13
- data/doc/contributing/GETTING_HELP.md +0 -11
- data/doc/contributing/HOW_YOU_CAN_HELP.md +0 -27
- data/doc/contributing/ISSUES.md +0 -51
- data/doc/contributing/README.md +0 -38
- data/doc/development/NEW_FEATURES.md +0 -10
- data/doc/development/PULL_REQUESTS.md +0 -40
- data/doc/development/README.md +0 -19
- data/doc/development/RELEASING.md +0 -9
- data/doc/development/SETUP.md +0 -27
- data/doc/documentation/README.md +0 -29
- data/doc/documentation/VISION.md +0 -26
- data/doc/documentation/WRITING.md +0 -54
- data/task/release.rake +0 -116
@@ -0,0 +1,111 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class Resolver
|
5
|
+
class SpecGroup
|
6
|
+
include GemHelpers
|
7
|
+
|
8
|
+
attr_accessor :name, :version, :source
|
9
|
+
attr_accessor :ignores_bundler_dependencies
|
10
|
+
|
11
|
+
def initialize(all_specs)
|
12
|
+
raise ArgumentError, "cannot initialize with an empty value" unless exemplary_spec = all_specs.first
|
13
|
+
@name = exemplary_spec.name
|
14
|
+
@version = exemplary_spec.version
|
15
|
+
@source = exemplary_spec.source
|
16
|
+
|
17
|
+
@required_by = []
|
18
|
+
@activated_platforms = []
|
19
|
+
@dependencies = nil
|
20
|
+
@specs = Hash.new do |specs, platform|
|
21
|
+
specs[platform] = select_best_platform_match(all_specs, platform)
|
22
|
+
end
|
23
|
+
@ignores_bundler_dependencies = true
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_specs
|
27
|
+
@activated_platforms.map do |p|
|
28
|
+
next unless s = @specs[p]
|
29
|
+
lazy_spec = LazySpecification.new(name, version, s.platform, source)
|
30
|
+
lazy_spec.dependencies.replace s.dependencies
|
31
|
+
lazy_spec
|
32
|
+
end.compact
|
33
|
+
end
|
34
|
+
|
35
|
+
def activate_platform!(platform)
|
36
|
+
return unless for?(platform)
|
37
|
+
return if @activated_platforms.include?(platform)
|
38
|
+
@activated_platforms << platform
|
39
|
+
end
|
40
|
+
|
41
|
+
def for?(platform)
|
42
|
+
spec = @specs[platform]
|
43
|
+
!spec.nil?
|
44
|
+
end
|
45
|
+
|
46
|
+
def to_s
|
47
|
+
@to_s ||= "#{name} (#{version})"
|
48
|
+
end
|
49
|
+
|
50
|
+
def dependencies_for_activated_platforms
|
51
|
+
dependencies = @activated_platforms.map {|p| __dependencies[p] }
|
52
|
+
metadata_dependencies = @activated_platforms.map do |platform|
|
53
|
+
metadata_dependencies(@specs[platform], platform)
|
54
|
+
end
|
55
|
+
dependencies.concat(metadata_dependencies).flatten
|
56
|
+
end
|
57
|
+
|
58
|
+
def platforms_for_dependency_named(dependency)
|
59
|
+
__dependencies.select {|_, deps| deps.map(&:name).include? dependency }.keys
|
60
|
+
end
|
61
|
+
|
62
|
+
def ==(other)
|
63
|
+
return unless other.is_a?(SpecGroup)
|
64
|
+
name == other.name &&
|
65
|
+
version == other.version &&
|
66
|
+
source == other.source
|
67
|
+
end
|
68
|
+
|
69
|
+
def eql?(other)
|
70
|
+
name.eql?(other.name) &&
|
71
|
+
version.eql?(other.version) &&
|
72
|
+
source.eql?(other.source)
|
73
|
+
end
|
74
|
+
|
75
|
+
def hash
|
76
|
+
to_s.hash ^ source.hash
|
77
|
+
end
|
78
|
+
|
79
|
+
private
|
80
|
+
|
81
|
+
def __dependencies
|
82
|
+
@dependencies = Hash.new do |dependencies, platform|
|
83
|
+
dependencies[platform] = []
|
84
|
+
if spec = @specs[platform]
|
85
|
+
spec.dependencies.each do |dep|
|
86
|
+
next if dep.type == :development
|
87
|
+
next if @ignores_bundler_dependencies && dep.name == "bundler".freeze
|
88
|
+
dependencies[platform] << DepProxy.new(dep, platform)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
dependencies[platform]
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def metadata_dependencies(spec, platform)
|
96
|
+
return [] unless spec
|
97
|
+
# Only allow endpoint specifications since they won't hit the network to
|
98
|
+
# fetch the full gemspec when calling required_ruby_version
|
99
|
+
return [] if !spec.is_a?(EndpointSpecification) && !spec.is_a?(Gem::Specification)
|
100
|
+
dependencies = []
|
101
|
+
if !spec.required_ruby_version.nil? && !spec.required_ruby_version.none?
|
102
|
+
dependencies << DepProxy.new(Gem::Dependency.new("ruby\0", spec.required_ruby_version), platform)
|
103
|
+
end
|
104
|
+
if !spec.required_rubygems_version.nil? && !spec.required_rubygems_version.none?
|
105
|
+
dependencies << DepProxy.new(Gem::Dependency.new("rubygems\0", spec.required_rubygems_version), platform)
|
106
|
+
end
|
107
|
+
dependencies
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
data/lib/bundler/retry.rb
CHANGED
data/lib/bundler/ruby_dsl.rb
CHANGED
data/lib/bundler/ruby_version.rb
CHANGED
data/lib/bundler/rubygems_ext.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "pathname"
|
3
4
|
|
4
5
|
if defined?(Gem::QuickLoader)
|
@@ -14,7 +15,7 @@ begin
|
|
14
15
|
# shouldn't be deferred.
|
15
16
|
require "rubygems/source"
|
16
17
|
rescue LoadError
|
17
|
-
# Not available before
|
18
|
+
# Not available before RubyGems 2.0.0, ignore
|
18
19
|
nil
|
19
20
|
end
|
20
21
|
|
@@ -135,7 +136,7 @@ module Gem
|
|
135
136
|
end
|
136
137
|
|
137
138
|
class Dependency
|
138
|
-
attr_accessor :source, :groups
|
139
|
+
attr_accessor :source, :groups, :all_sources
|
139
140
|
|
140
141
|
alias_method :eql?, :==
|
141
142
|
|
@@ -146,7 +147,7 @@ module Gem
|
|
146
147
|
end
|
147
148
|
|
148
149
|
def to_yaml_properties
|
149
|
-
instance_variables.reject {|p| ["@source", "@groups"].include?(p.to_s) }
|
150
|
+
instance_variables.reject {|p| ["@source", "@groups", "@all_sources"].include?(p.to_s) }
|
150
151
|
end
|
151
152
|
|
152
153
|
def to_lock
|
@@ -158,7 +159,7 @@ module Gem
|
|
158
159
|
out
|
159
160
|
end
|
160
161
|
|
161
|
-
# Backport of performance enhancement added to
|
162
|
+
# Backport of performance enhancement added to RubyGems 1.4
|
162
163
|
def matches_spec?(spec)
|
163
164
|
# name can be a Regexp, so use ===
|
164
165
|
return false unless name === spec.name
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "rubygems/installer"
|
3
4
|
|
4
5
|
module Bundler
|
@@ -17,6 +18,28 @@ module Bundler
|
|
17
18
|
super && validate_bundler_checksum(options[:bundler_expected_checksum])
|
18
19
|
end
|
19
20
|
|
21
|
+
def build_extensions
|
22
|
+
extension_cache_path = options[:bundler_extension_cache_path]
|
23
|
+
return super unless extension_cache_path && extension_dir = Bundler.rubygems.spec_extension_dir(spec)
|
24
|
+
|
25
|
+
extension_dir = Pathname.new(extension_dir)
|
26
|
+
build_complete = SharedHelpers.filesystem_access(extension_cache_path.join("gem.build_complete"), :read, &:file?)
|
27
|
+
if build_complete && !options[:force]
|
28
|
+
SharedHelpers.filesystem_access(extension_dir.parent, &:mkpath)
|
29
|
+
SharedHelpers.filesystem_access(extension_cache_path) do
|
30
|
+
FileUtils.cp_r extension_cache_path, spec.extension_dir
|
31
|
+
end
|
32
|
+
else
|
33
|
+
super
|
34
|
+
if extension_dir.directory? # not made for gems without extensions
|
35
|
+
SharedHelpers.filesystem_access(extension_cache_path.parent, &:mkpath)
|
36
|
+
SharedHelpers.filesystem_access(extension_cache_path) do
|
37
|
+
FileUtils.cp_r extension_dir, extension_cache_path
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
20
43
|
private
|
21
44
|
|
22
45
|
def validate_bundler_checksum(checksum)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "monitor"
|
3
4
|
require "rubygems"
|
4
5
|
require "rubygems/config_file"
|
@@ -84,6 +85,19 @@ module Bundler
|
|
84
85
|
spec.respond_to?(:default_gem?) && spec.default_gem?
|
85
86
|
end
|
86
87
|
|
88
|
+
def spec_matches_for_glob(spec, glob)
|
89
|
+
return spec.matches_for_glob(glob) if spec.respond_to?(:matches_for_glob)
|
90
|
+
|
91
|
+
spec.load_paths.map do |lp|
|
92
|
+
Dir["#{lp}/#{glob}#{suffix_pattern}"]
|
93
|
+
end.flatten(1)
|
94
|
+
end
|
95
|
+
|
96
|
+
def spec_extension_dir(spec)
|
97
|
+
return unless spec.respond_to?(:extension_dir)
|
98
|
+
spec.extension_dir
|
99
|
+
end
|
100
|
+
|
87
101
|
def stub_set_spec(stub, spec)
|
88
102
|
stub.instance_variable_set(:@spec, spec)
|
89
103
|
end
|
@@ -158,6 +172,10 @@ module Bundler
|
|
158
172
|
Gem.post_reset_hooks
|
159
173
|
end
|
160
174
|
|
175
|
+
def suffix_pattern
|
176
|
+
Gem.suffix_pattern
|
177
|
+
end
|
178
|
+
|
161
179
|
def gem_cache
|
162
180
|
gem_path.map {|p| File.expand_path("cache", p) }
|
163
181
|
end
|
@@ -165,7 +183,7 @@ module Bundler
|
|
165
183
|
def spec_cache_dirs
|
166
184
|
@spec_cache_dirs ||= begin
|
167
185
|
dirs = gem_path.map {|dir| File.join(dir, "specifications") }
|
168
|
-
dirs << Gem.spec_cache_dir if Gem.respond_to?(:spec_cache_dir) # Not in
|
186
|
+
dirs << Gem.spec_cache_dir if Gem.respond_to?(:spec_cache_dir) # Not in RubyGems 2.0.3 or earlier
|
169
187
|
dirs.uniq.select {|dir| File.directory? dir }
|
170
188
|
end
|
171
189
|
end
|
@@ -179,7 +197,7 @@ module Bundler
|
|
179
197
|
end
|
180
198
|
|
181
199
|
def repository_subdirectories
|
182
|
-
%w
|
200
|
+
%w[cache doc gems specifications]
|
183
201
|
end
|
184
202
|
|
185
203
|
def clear_paths
|
@@ -190,8 +208,12 @@ module Bundler
|
|
190
208
|
Gem.bin_path(gem, bin, ver)
|
191
209
|
end
|
192
210
|
|
211
|
+
def path_separator
|
212
|
+
File::PATH_SEPARATOR
|
213
|
+
end
|
214
|
+
|
193
215
|
def preserve_paths
|
194
|
-
# this is a no-op outside of
|
216
|
+
# this is a no-op outside of RubyGems 1.8
|
195
217
|
yield
|
196
218
|
end
|
197
219
|
|
@@ -212,6 +234,10 @@ module Bundler
|
|
212
234
|
Gem.load_plugins if Gem.respond_to?(:load_plugins)
|
213
235
|
end
|
214
236
|
|
237
|
+
def load_plugin_files(files)
|
238
|
+
Gem.load_plugin_files(files) if Gem.respond_to?(:load_plugin_files)
|
239
|
+
end
|
240
|
+
|
215
241
|
def ui=(obj)
|
216
242
|
Gem::DefaultUserInteraction.ui = obj
|
217
243
|
end
|
@@ -233,9 +259,9 @@ module Bundler
|
|
233
259
|
{} # if we can't download them, there aren't any
|
234
260
|
end
|
235
261
|
|
236
|
-
# TODO: This is for older versions of
|
262
|
+
# TODO: This is for older versions of RubyGems... should we support the
|
237
263
|
# X-Gemfile-Source header on these old versions?
|
238
|
-
# Maybe the newer implementation will work on older
|
264
|
+
# Maybe the newer implementation will work on older RubyGems?
|
239
265
|
# It seems difficult to keep this implementation and still send the header.
|
240
266
|
def fetch_all_remote_specs(remote)
|
241
267
|
old_sources = Bundler.rubygems.sources
|
@@ -306,7 +332,7 @@ module Bundler
|
|
306
332
|
end
|
307
333
|
|
308
334
|
def security_policy_keys
|
309
|
-
%w
|
335
|
+
%w[High Medium Low AlmostNo No].map {|level| "#{level}Security" }
|
310
336
|
end
|
311
337
|
|
312
338
|
def security_policies
|
@@ -377,9 +403,8 @@ module Bundler
|
|
377
403
|
raise e
|
378
404
|
end
|
379
405
|
|
380
|
-
#
|
381
|
-
|
382
|
-
kernel_class.send(:public, :gem)
|
406
|
+
# backwards compatibility shim, see https://github.com/bundler/bundler/issues/5102
|
407
|
+
kernel_class.send(:public, :gem) if Bundler.feature_flag.setup_makes_kernel_gem_public?
|
383
408
|
end
|
384
409
|
end
|
385
410
|
|
@@ -434,9 +459,9 @@ module Bundler
|
|
434
459
|
|
435
460
|
raise Gem::Exception, "no default executable for #{spec.full_name}" unless exec_name ||= spec.default_executable
|
436
461
|
|
437
|
-
unless spec.name ==
|
438
|
-
Bundler::SharedHelpers.major_deprecation
|
439
|
-
"Bundler is using a binstub that was created for a different gem.\n" \
|
462
|
+
unless spec.name == gem_name
|
463
|
+
Bundler::SharedHelpers.major_deprecation 2,
|
464
|
+
"Bundler is using a binstub that was created for a different gem (#{spec.name}).\n" \
|
440
465
|
"You should run `bundle binstub #{gem_name}` " \
|
441
466
|
"to work around a system/bundle conflict."
|
442
467
|
end
|
@@ -476,7 +501,7 @@ module Bundler
|
|
476
501
|
redefine_method(gem_class, :refresh) {}
|
477
502
|
end
|
478
503
|
|
479
|
-
# Replace or hook into
|
504
|
+
# Replace or hook into RubyGems to provide a bundlerized view
|
480
505
|
# of the world.
|
481
506
|
def replace_entrypoints(specs)
|
482
507
|
specs_by_name = specs.reduce({}) do |h, s|
|
@@ -492,8 +517,8 @@ module Bundler
|
|
492
517
|
Gem.clear_paths
|
493
518
|
end
|
494
519
|
|
495
|
-
# This backports the correct segment generation code from
|
496
|
-
# by monkeypatching it into the method in
|
520
|
+
# This backports the correct segment generation code from RubyGems 1.4+
|
521
|
+
# by monkeypatching it into the method in RubyGems 1.3.6 and 1.3.7.
|
497
522
|
def backport_segment_generation
|
498
523
|
redefine_method(Gem::Version, :segments) do
|
499
524
|
@segments ||= @version.scan(/[0-9]+|[a-z]+/i).map do |s|
|
@@ -512,7 +537,7 @@ module Bundler
|
|
512
537
|
end
|
513
538
|
|
514
539
|
# This backports base_dir which replaces installation path
|
515
|
-
#
|
540
|
+
# RubyGems 1.8+
|
516
541
|
def backport_base_dir
|
517
542
|
redefine_method(Gem::Specification, :base_dir) do
|
518
543
|
return Gem.dir unless loaded_from
|
@@ -581,7 +606,7 @@ module Bundler
|
|
581
606
|
end
|
582
607
|
end
|
583
608
|
|
584
|
-
#
|
609
|
+
# RubyGems 1.4 through 1.6
|
585
610
|
class Legacy < RubygemsIntegration
|
586
611
|
def initialize
|
587
612
|
super
|
@@ -592,7 +617,7 @@ module Bundler
|
|
592
617
|
end
|
593
618
|
|
594
619
|
def stub_rubygems(specs)
|
595
|
-
#
|
620
|
+
# RubyGems versions lower than 1.7 use SourceIndex#from_gems_in
|
596
621
|
source_index_class = (class << Gem::SourceIndex; self; end)
|
597
622
|
redefine_method(source_index_class, :from_gems_in) do |*args|
|
598
623
|
Gem::SourceIndex.new.tap do |source_index|
|
@@ -624,7 +649,7 @@ module Bundler
|
|
624
649
|
end
|
625
650
|
end
|
626
651
|
|
627
|
-
#
|
652
|
+
# RubyGems versions 1.3.6 and 1.3.7
|
628
653
|
class Ancient < Legacy
|
629
654
|
def initialize
|
630
655
|
super
|
@@ -632,7 +657,7 @@ module Bundler
|
|
632
657
|
end
|
633
658
|
end
|
634
659
|
|
635
|
-
#
|
660
|
+
# RubyGems 1.7
|
636
661
|
class Transitional < Legacy
|
637
662
|
def stub_rubygems(specs)
|
638
663
|
stub_source_index(specs)
|
@@ -646,7 +671,7 @@ module Bundler
|
|
646
671
|
end
|
647
672
|
end
|
648
673
|
|
649
|
-
#
|
674
|
+
# RubyGems 1.8.5-1.8.19
|
650
675
|
class Modern < RubygemsIntegration
|
651
676
|
def stub_rubygems(specs)
|
652
677
|
Gem::Specification.all = specs
|
@@ -667,9 +692,9 @@ module Bundler
|
|
667
692
|
end
|
668
693
|
end
|
669
694
|
|
670
|
-
#
|
695
|
+
# RubyGems 1.8.0 to 1.8.4
|
671
696
|
class AlmostModern < Modern
|
672
|
-
#
|
697
|
+
# RubyGems [>= 1.8.0, < 1.8.5] has a bug that changes Gem.dir whenever
|
673
698
|
# you call Gem::Installer#install with an :install_dir set. We have to
|
674
699
|
# change it back for our sudo mode to work.
|
675
700
|
def preserve_paths
|
@@ -680,9 +705,9 @@ module Bundler
|
|
680
705
|
end
|
681
706
|
end
|
682
707
|
|
683
|
-
#
|
708
|
+
# RubyGems 1.8.20+
|
684
709
|
class MoreModern < Modern
|
685
|
-
#
|
710
|
+
# RubyGems 1.8.20 and adds the skip_validation parameter, so that's
|
686
711
|
# when we start passing it through.
|
687
712
|
def build(spec, skip_validation = false)
|
688
713
|
require "rubygems/builder"
|
@@ -690,7 +715,7 @@ module Bundler
|
|
690
715
|
end
|
691
716
|
end
|
692
717
|
|
693
|
-
#
|
718
|
+
# RubyGems 2.0
|
694
719
|
class Future < RubygemsIntegration
|
695
720
|
def stub_rubygems(specs)
|
696
721
|
Gem::Specification.all = specs
|
@@ -767,6 +792,10 @@ module Bundler
|
|
767
792
|
def install_with_build_args(args)
|
768
793
|
yield
|
769
794
|
end
|
795
|
+
|
796
|
+
def path_separator
|
797
|
+
Gem.path_separator
|
798
|
+
end
|
770
799
|
end
|
771
800
|
|
772
801
|
# RubyGems 2.1.0
|
@@ -855,7 +884,7 @@ module Bundler
|
|
855
884
|
RubygemsIntegration::Transitional.new
|
856
885
|
elsif RubygemsIntegration.provides?(">= 1.4.0")
|
857
886
|
RubygemsIntegration::Legacy.new
|
858
|
-
else #
|
887
|
+
else # RubyGems 1.3.6 and 1.3.7
|
859
888
|
RubygemsIntegration::Ancient.new
|
860
889
|
end
|
861
890
|
end
|