bundler 2.1.3 → 2.2.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 +4 -4
- data/CHANGELOG.md +1575 -1423
- data/README.md +6 -8
- data/bundler.gemspec +3 -3
- data/exe/bundle +3 -0
- data/lib/bundler.rb +35 -7
- data/lib/bundler/build_metadata.rb +3 -11
- data/lib/bundler/cli.rb +58 -21
- data/lib/bundler/cli/add.rb +1 -1
- data/lib/bundler/cli/binstubs.rb +6 -2
- data/lib/bundler/cli/cache.rb +1 -7
- data/lib/bundler/cli/clean.rb +1 -1
- data/lib/bundler/cli/common.rb +14 -0
- data/lib/bundler/cli/console.rb +1 -1
- data/lib/bundler/cli/doctor.rb +1 -1
- data/lib/bundler/cli/exec.rb +4 -4
- data/lib/bundler/cli/fund.rb +36 -0
- data/lib/bundler/cli/gem.rb +84 -11
- data/lib/bundler/cli/info.rb +15 -4
- data/lib/bundler/cli/init.rb +2 -2
- data/lib/bundler/cli/inject.rb +1 -1
- data/lib/bundler/cli/install.rb +9 -16
- data/lib/bundler/cli/issue.rb +2 -2
- data/lib/bundler/cli/list.rb +12 -10
- data/lib/bundler/cli/outdated.rb +87 -66
- data/lib/bundler/cli/plugin.rb +10 -0
- data/lib/bundler/cli/pristine.rb +5 -0
- data/lib/bundler/cli/show.rb +1 -1
- data/lib/bundler/cli/update.rb +2 -0
- data/lib/bundler/compact_index_client.rb +1 -1
- data/lib/bundler/compact_index_client/cache.rb +1 -1
- data/lib/bundler/compact_index_client/updater.rb +5 -5
- data/lib/bundler/definition.rb +49 -72
- data/lib/bundler/dep_proxy.rb +1 -1
- data/lib/bundler/dependency.rb +3 -10
- data/lib/bundler/dsl.rb +5 -9
- data/lib/bundler/endpoint_specification.rb +1 -1
- data/lib/bundler/env.rb +1 -1
- data/lib/bundler/environment_preserver.rb +26 -2
- data/lib/bundler/errors.rb +1 -0
- data/lib/bundler/feature_flag.rb +0 -3
- data/lib/bundler/fetcher.rb +4 -3
- data/lib/bundler/fetcher/base.rb +1 -1
- data/lib/bundler/fetcher/compact_index.rb +1 -1
- data/lib/bundler/fetcher/downloader.rb +1 -1
- data/lib/bundler/fetcher/index.rb +3 -4
- data/lib/bundler/friendly_errors.rb +22 -13
- data/lib/bundler/gem_helper.rb +32 -17
- data/lib/bundler/gem_helpers.rb +6 -1
- data/lib/bundler/gem_version_promoter.rb +2 -2
- data/lib/bundler/graph.rb +1 -1
- data/lib/bundler/index.rb +6 -2
- data/lib/bundler/injector.rb +22 -4
- data/lib/bundler/inline.rb +2 -2
- data/lib/bundler/installer.rb +35 -32
- data/lib/bundler/installer/gem_installer.rb +3 -3
- data/lib/bundler/installer/parallel_installer.rb +10 -10
- data/lib/bundler/installer/standalone.rb +2 -2
- data/lib/bundler/lazy_specification.rb +34 -9
- data/lib/bundler/lockfile_generator.rb +1 -1
- data/lib/bundler/lockfile_parser.rb +1 -1
- data/lib/bundler/man/.document +1 -0
- data/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +0 -0
- data/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
- data/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +0 -0
- data/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
- data/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
- data/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +19 -30
- data/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
- data/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +0 -0
- data/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
- data/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
- data/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
- data/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
- data/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +25 -3
- data/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
- data/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
- data/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
- data/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
- data/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
- data/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
- data/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
- data/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
- data/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +0 -0
- data/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
- data/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +0 -0
- data/{man → lib/bundler/man}/gemfile.5.ronn +4 -4
- data/lib/bundler/mirror.rb +2 -2
- data/lib/bundler/plugin.rb +30 -5
- data/lib/bundler/plugin/api/source.rb +1 -1
- data/lib/bundler/plugin/dsl.rb +1 -1
- data/lib/bundler/plugin/index.rb +10 -1
- data/lib/bundler/plugin/installer.rb +1 -1
- data/lib/bundler/plugin/installer/rubygems.rb +1 -1
- data/lib/bundler/plugin/source_list.rb +1 -1
- data/lib/bundler/psyched_yaml.rb +0 -15
- data/lib/bundler/remote_specification.rb +5 -2
- data/lib/bundler/resolver.rb +35 -18
- data/lib/bundler/resolver/spec_group.rb +28 -11
- data/lib/bundler/retry.rb +1 -1
- data/lib/bundler/ruby_version.rb +1 -1
- data/lib/bundler/rubygems_ext.rb +53 -9
- data/lib/bundler/rubygems_gem_installer.rb +3 -9
- data/lib/bundler/rubygems_integration.rb +25 -55
- data/lib/bundler/runtime.rb +4 -14
- data/lib/bundler/settings.rb +49 -46
- data/lib/bundler/shared_helpers.rb +2 -2
- data/lib/bundler/similarity_detector.rb +1 -1
- data/lib/bundler/source.rb +1 -1
- data/lib/bundler/source/git.rb +5 -5
- data/lib/bundler/source/git/git_proxy.rb +57 -60
- data/lib/bundler/source/path.rb +7 -3
- data/lib/bundler/source/path/installer.rb +8 -10
- data/lib/bundler/source/rubygems.rb +13 -16
- data/lib/bundler/source/rubygems/remote.rb +1 -1
- data/lib/bundler/source_list.rb +2 -2
- data/lib/bundler/spec_set.rb +2 -1
- data/lib/bundler/stub_specification.rb +17 -7
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
- data/lib/bundler/templates/newgem/Gemfile.tt +9 -1
- data/lib/bundler/templates/newgem/README.md.tt +1 -2
- data/lib/bundler/templates/newgem/Rakefile.tt +19 -5
- data/lib/bundler/templates/newgem/bin/console.tt +1 -0
- data/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
- data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
- data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
- data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
- data/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +14 -6
- data/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
- data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
- data/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
- data/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
- data/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
- data/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
- data/lib/bundler/ui/shell.rb +5 -5
- data/lib/bundler/uri_credentials_filter.rb +3 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +38 -40
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +79 -208
- data/lib/bundler/vendor/thor/lib/thor.rb +0 -7
- data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
- data/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
- data/lib/bundler/vendored_persistent.rb +0 -7
- data/lib/bundler/vendored_tmpdir.rb +4 -0
- data/lib/bundler/version.rb +1 -1
- data/lib/bundler/worker.rb +1 -1
- data/lib/bundler/yaml_serializer.rb +1 -1
- data/man/bundle-add.1 +1 -1
- data/man/bundle-binstubs.1 +5 -3
- data/man/bundle-cache.1 +1 -1
- data/man/bundle-check.1 +1 -1
- data/man/bundle-clean.1 +1 -1
- data/man/bundle-config.1 +16 -25
- data/man/bundle-doctor.1 +1 -1
- data/man/bundle-exec.1 +1 -1
- data/man/bundle-gem.1 +25 -3
- data/man/bundle-info.1 +1 -1
- data/man/bundle-init.1 +1 -1
- data/man/bundle-inject.1 +1 -1
- data/man/bundle-install.1 +30 -3
- data/man/bundle-list.1 +7 -7
- data/man/bundle-lock.1 +1 -1
- data/man/bundle-open.1 +1 -1
- data/man/bundle-outdated.1 +1 -1
- data/man/bundle-platform.1 +1 -1
- data/man/bundle-pristine.1 +1 -1
- data/man/bundle-remove.1 +1 -1
- data/man/bundle-show.1 +1 -1
- data/man/bundle-update.1 +1 -1
- data/man/bundle-viz.1 +1 -1
- data/man/bundle.1 +1 -1
- data/man/gemfile.5 +4 -4
- metadata +43 -59
- data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
- data/man/bundle-add.1.txt +0 -58
- data/man/bundle-binstubs.1.txt +0 -48
- data/man/bundle-cache.1.txt +0 -78
- data/man/bundle-check.1.txt +0 -33
- data/man/bundle-clean.1.txt +0 -26
- data/man/bundle-config.1.txt +0 -528
- data/man/bundle-doctor.1.txt +0 -44
- data/man/bundle-exec.1.txt +0 -178
- data/man/bundle-gem.1.txt +0 -91
- data/man/bundle-info.1.txt +0 -21
- data/man/bundle-init.1.txt +0 -34
- data/man/bundle-inject.1.txt +0 -32
- data/man/bundle-install.1.txt +0 -401
- data/man/bundle-list.1.txt +0 -43
- data/man/bundle-lock.1.txt +0 -93
- data/man/bundle-open.1.txt +0 -29
- data/man/bundle-outdated.1.txt +0 -131
- data/man/bundle-platform.1.txt +0 -57
- data/man/bundle-pristine.1.txt +0 -44
- data/man/bundle-remove.1.txt +0 -34
- data/man/bundle-show.1.txt +0 -27
- data/man/bundle-update.1.txt +0 -390
- data/man/bundle-viz.1.txt +0 -39
- data/man/bundle.1.txt +0 -116
- data/man/gemfile.5.txt +0 -649
@@ -6,9 +6,10 @@ module Bundler
|
|
6
6
|
include GemHelpers
|
7
7
|
|
8
8
|
attr_accessor :name, :version, :source
|
9
|
-
attr_accessor :ignores_bundler_dependencies
|
9
|
+
attr_accessor :ignores_bundler_dependencies, :activated_platforms
|
10
10
|
|
11
11
|
def initialize(all_specs)
|
12
|
+
@all_specs = all_specs
|
12
13
|
raise ArgumentError, "cannot initialize with an empty value" unless exemplary_spec = all_specs.first
|
13
14
|
@name = exemplary_spec.name
|
14
15
|
@version = exemplary_spec.version
|
@@ -28,22 +29,30 @@ module Bundler
|
|
28
29
|
lazy_spec = LazySpecification.new(name, version, s.platform, source)
|
29
30
|
lazy_spec.dependencies.replace s.dependencies
|
30
31
|
lazy_spec
|
31
|
-
end.compact
|
32
|
+
end.compact.uniq
|
32
33
|
end
|
33
34
|
|
34
|
-
def
|
35
|
-
|
36
|
-
return
|
37
|
-
|
35
|
+
def copy_for(platforms)
|
36
|
+
platforms.select! {|p| for?(p) }
|
37
|
+
return unless platforms.any?
|
38
|
+
|
39
|
+
copied_sg = self.class.new(@all_specs)
|
40
|
+
copied_sg.ignores_bundler_dependencies = @ignores_bundler_dependencies
|
41
|
+
copied_sg.activated_platforms = platforms
|
42
|
+
copied_sg
|
43
|
+
end
|
44
|
+
|
45
|
+
def spec_for(platform)
|
46
|
+
@specs[platform]
|
38
47
|
end
|
39
48
|
|
40
49
|
def for?(platform)
|
41
|
-
|
42
|
-
!spec.nil?
|
50
|
+
!spec_for(platform).nil?
|
43
51
|
end
|
44
52
|
|
45
53
|
def to_s
|
46
|
-
|
54
|
+
activated_platforms_string = sorted_activated_platforms.join(", ")
|
55
|
+
"#{name} (#{version}) (#{activated_platforms_string})"
|
47
56
|
end
|
48
57
|
|
49
58
|
def dependencies_for_activated_platforms
|
@@ -58,6 +67,7 @@ module Bundler
|
|
58
67
|
return unless other.is_a?(SpecGroup)
|
59
68
|
name == other.name &&
|
60
69
|
version == other.version &&
|
70
|
+
sorted_activated_platforms == other.sorted_activated_platforms &&
|
61
71
|
source == other.source
|
62
72
|
end
|
63
73
|
|
@@ -65,14 +75,21 @@ module Bundler
|
|
65
75
|
return unless other.is_a?(SpecGroup)
|
66
76
|
name.eql?(other.name) &&
|
67
77
|
version.eql?(other.version) &&
|
78
|
+
sorted_activated_platforms.eql?(other.sorted_activated_platforms) &&
|
68
79
|
source.eql?(other.source)
|
69
80
|
end
|
70
81
|
|
71
82
|
def hash
|
72
|
-
|
83
|
+
name.hash ^ version.hash ^ sorted_activated_platforms.hash ^ source.hash
|
84
|
+
end
|
85
|
+
|
86
|
+
protected
|
87
|
+
|
88
|
+
def sorted_activated_platforms
|
89
|
+
@activated_platforms.sort_by(&:to_s)
|
73
90
|
end
|
74
91
|
|
75
|
-
|
92
|
+
private
|
76
93
|
|
77
94
|
def __dependencies
|
78
95
|
@dependencies = Hash.new do |dependencies, platform|
|
data/lib/bundler/retry.rb
CHANGED
data/lib/bundler/ruby_version.rb
CHANGED
data/lib/bundler/rubygems_ext.rb
CHANGED
@@ -47,14 +47,13 @@ module Gem
|
|
47
47
|
full_require_paths
|
48
48
|
end
|
49
49
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
end
|
50
|
+
alias_method :rg_extension_dir, :extension_dir
|
51
|
+
def extension_dir
|
52
|
+
@bundler_extension_dir ||= if source.respond_to?(:extension_dir_name)
|
53
|
+
unique_extension_dir = [source.extension_dir_name, File.basename(full_gem_path)].uniq.join("-")
|
54
|
+
File.expand_path(File.join(extensions_dir, unique_extension_dir))
|
55
|
+
else
|
56
|
+
rg_extension_dir
|
58
57
|
end
|
59
58
|
end
|
60
59
|
|
@@ -86,7 +85,7 @@ module Gem
|
|
86
85
|
dependencies - development_dependencies
|
87
86
|
end
|
88
87
|
|
89
|
-
|
88
|
+
private
|
90
89
|
|
91
90
|
def dependencies_to_gemfile(dependencies, group = nil)
|
92
91
|
gemfile = String.new
|
@@ -130,6 +129,35 @@ module Gem
|
|
130
129
|
end
|
131
130
|
end
|
132
131
|
|
132
|
+
# comparison is done order independently since rubygems 3.2.0.rc.2
|
133
|
+
unless Gem::Requirement.new("> 1", "< 2") == Gem::Requirement.new("< 2", "> 1")
|
134
|
+
class Requirement
|
135
|
+
module OrderIndependentComparison
|
136
|
+
def ==(other)
|
137
|
+
if _requirements_sorted? && other._requirements_sorted?
|
138
|
+
super
|
139
|
+
else
|
140
|
+
_with_sorted_requirements == other._with_sorted_requirements
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
protected
|
145
|
+
|
146
|
+
def _requirements_sorted?
|
147
|
+
return @_are_requirements_sorted if defined?(@_are_requirements_sorted)
|
148
|
+
strings = as_list
|
149
|
+
@_are_requirements_sorted = strings == strings.sort
|
150
|
+
end
|
151
|
+
|
152
|
+
def _with_sorted_requirements
|
153
|
+
@_with_sorted_requirements ||= _requirements_sorted? ? self : self.class.new(as_list.sort)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
prepend OrderIndependentComparison
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
133
161
|
class Platform
|
134
162
|
JAVA = Gem::Platform.new("java") unless defined?(JAVA)
|
135
163
|
MSWIN = Gem::Platform.new("mswin32") unless defined?(MSWIN)
|
@@ -145,6 +173,22 @@ module Gem
|
|
145
173
|
undef_method :eql? if method_defined? :eql?
|
146
174
|
alias_method :eql?, :==
|
147
175
|
end
|
176
|
+
|
177
|
+
require "rubygems/util"
|
178
|
+
|
179
|
+
Util.singleton_class.module_eval do
|
180
|
+
if Util.singleton_methods.include?(:glob_files_in_dir) # since 3.0.0.beta.2
|
181
|
+
remove_method :glob_files_in_dir
|
182
|
+
end
|
183
|
+
|
184
|
+
def glob_files_in_dir(glob, base_path)
|
185
|
+
if RUBY_VERSION >= "2.5"
|
186
|
+
Dir.glob(glob, :base => base_path).map! {|f| File.expand_path(f, base_path) }
|
187
|
+
else
|
188
|
+
Dir.glob(File.join(base_path.to_s.gsub(/[\[\]]/, '\\\\\\&'), glob)).map! {|f| File.expand_path(f) }
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
148
192
|
end
|
149
193
|
|
150
194
|
module Gem
|
@@ -4,12 +4,6 @@ require "rubygems/installer"
|
|
4
4
|
|
5
5
|
module Bundler
|
6
6
|
class RubyGemsGemInstaller < Gem::Installer
|
7
|
-
unless respond_to?(:at)
|
8
|
-
def self.at(*args)
|
9
|
-
new(*args)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
7
|
def check_executable_overwrite(filename)
|
14
8
|
# Bundler needs to install gems regardless of binstub overwriting
|
15
9
|
end
|
@@ -20,7 +14,7 @@ module Bundler
|
|
20
14
|
|
21
15
|
def build_extensions
|
22
16
|
extension_cache_path = options[:bundler_extension_cache_path]
|
23
|
-
return super unless extension_cache_path && extension_dir =
|
17
|
+
return super unless extension_cache_path && extension_dir = spec.extension_dir
|
24
18
|
|
25
19
|
extension_dir = Pathname.new(extension_dir)
|
26
20
|
build_complete = SharedHelpers.filesystem_access(extension_cache_path.join("gem.build_complete"), :read, &:file?)
|
@@ -40,7 +34,7 @@ module Bundler
|
|
40
34
|
end
|
41
35
|
end
|
42
36
|
|
43
|
-
|
37
|
+
private
|
44
38
|
|
45
39
|
def validate_bundler_checksum(checksum)
|
46
40
|
return true if Bundler.settings[:disable_checksum_validation]
|
@@ -66,7 +60,7 @@ module Bundler
|
|
66
60
|
|
67
61
|
If you wish to continue installing the downloaded gem, and are certain it does not pose a \
|
68
62
|
security issue despite the mismatching checksum, do the following:
|
69
|
-
1. run `bundle config set disable_checksum_validation true` to turn off checksum verification
|
63
|
+
1. run `bundle config set --local disable_checksum_validation true` to turn off checksum verification
|
70
64
|
2. run `bundle install`
|
71
65
|
|
72
66
|
(More info: The expected SHA256 checksum was #{checksum.inspect}, but the \
|
@@ -102,11 +102,6 @@ module Bundler
|
|
102
102
|
end.flatten(1)
|
103
103
|
end
|
104
104
|
|
105
|
-
def spec_extension_dir(spec)
|
106
|
-
return unless spec.respond_to?(:extension_dir)
|
107
|
-
spec.extension_dir
|
108
|
-
end
|
109
|
-
|
110
105
|
def stub_set_spec(stub, spec)
|
111
106
|
stub.instance_variable_set(:@spec, spec)
|
112
107
|
end
|
@@ -141,14 +136,10 @@ module Bundler
|
|
141
136
|
end
|
142
137
|
|
143
138
|
def inflate(obj)
|
144
|
-
require "rubygems/util"
|
145
|
-
|
146
139
|
Gem::Util.inflate(obj)
|
147
140
|
end
|
148
141
|
|
149
142
|
def correct_for_windows_path(path)
|
150
|
-
require "rubygems/util"
|
151
|
-
|
152
143
|
if Gem::Util.respond_to?(:correct_for_windows_path)
|
153
144
|
Gem::Util.correct_for_windows_path(path)
|
154
145
|
elsif path[0].chr == "/" && path[1].chr =~ /[a-z]/i && path[2].chr == ":"
|
@@ -223,11 +214,6 @@ module Bundler
|
|
223
214
|
Gem.bin_path(gem, bin, ver)
|
224
215
|
end
|
225
216
|
|
226
|
-
def preserve_paths
|
227
|
-
# this is a no-op outside of RubyGems 1.8
|
228
|
-
yield
|
229
|
-
end
|
230
|
-
|
231
217
|
def loaded_gem_paths
|
232
218
|
loaded_gem_paths = Gem.loaded_specs.map {|_, s| s.full_require_paths }
|
233
219
|
loaded_gem_paths.flatten
|
@@ -241,6 +227,10 @@ module Bundler
|
|
241
227
|
Gem.load_plugin_files(files) if Gem.respond_to?(:load_plugin_files)
|
242
228
|
end
|
243
229
|
|
230
|
+
def load_env_plugins
|
231
|
+
Gem.load_env_plugins if Gem.respond_to?(:load_env_plugins)
|
232
|
+
end
|
233
|
+
|
244
234
|
def ui=(obj)
|
245
235
|
Gem::DefaultUserInteraction.ui = obj
|
246
236
|
end
|
@@ -265,8 +255,6 @@ module Bundler
|
|
265
255
|
require "rubygems/security"
|
266
256
|
require_relative "psyched_yaml"
|
267
257
|
gem_from_path(path, security_policies[policy]).spec
|
268
|
-
rescue Gem::Package::FormatError
|
269
|
-
raise GemspecError, "Could not read gem at #{path}. It may be corrupted."
|
270
258
|
rescue Exception, Gem::Exception, Gem::Security::Exception => e # rubocop:disable Lint/RescueException
|
271
259
|
if e.is_a?(Gem::Security::Exception) ||
|
272
260
|
e.message =~ /unknown trust policy|unsigned gem/i ||
|
@@ -329,8 +317,13 @@ module Bundler
|
|
329
317
|
end
|
330
318
|
|
331
319
|
message = if spec.nil?
|
320
|
+
target_file = begin
|
321
|
+
Bundler.default_gemfile.basename
|
322
|
+
rescue GemfileNotFound
|
323
|
+
"inline Gemfile"
|
324
|
+
end
|
332
325
|
"#{dep.name} is not part of the bundle." \
|
333
|
-
" Add it to your #{
|
326
|
+
" Add it to your #{target_file}."
|
334
327
|
else
|
335
328
|
"can't activate #{dep}, already activated #{spec.full_name}. " \
|
336
329
|
"Make sure all dependencies are added to Gemfile."
|
@@ -346,7 +339,7 @@ module Bundler
|
|
346
339
|
raise e
|
347
340
|
end
|
348
341
|
|
349
|
-
# backwards compatibility shim, see https://github.com/
|
342
|
+
# backwards compatibility shim, see https://github.com/rubygems/bundler/issues/5102
|
350
343
|
kernel_class.send(:public, :gem) if Bundler.feature_flag.setup_makes_kernel_gem_public?
|
351
344
|
end
|
352
345
|
end
|
@@ -422,6 +415,17 @@ module Bundler
|
|
422
415
|
# Replace or hook into RubyGems to provide a bundlerized view
|
423
416
|
# of the world.
|
424
417
|
def replace_entrypoints(specs)
|
418
|
+
specs_by_name = add_default_gems_to(specs)
|
419
|
+
|
420
|
+
replace_gem(specs, specs_by_name)
|
421
|
+
stub_rubygems(specs)
|
422
|
+
replace_bin_path(specs_by_name)
|
423
|
+
|
424
|
+
Gem.clear_paths
|
425
|
+
end
|
426
|
+
|
427
|
+
# Add default gems not already present in specs, and return them as a hash.
|
428
|
+
def add_default_gems_to(specs)
|
425
429
|
specs_by_name = specs.reduce({}) do |h, s|
|
426
430
|
h[s.name] = s
|
427
431
|
h
|
@@ -436,40 +440,7 @@ module Bundler
|
|
436
440
|
specs_by_name[default_spec_name] = default_spec
|
437
441
|
end
|
438
442
|
|
439
|
-
|
440
|
-
stub_rubygems(specs)
|
441
|
-
replace_bin_path(specs_by_name)
|
442
|
-
|
443
|
-
Gem.clear_paths
|
444
|
-
end
|
445
|
-
|
446
|
-
# This backports base_dir which replaces installation path
|
447
|
-
# RubyGems 1.8+
|
448
|
-
def backport_base_dir
|
449
|
-
redefine_method(Gem::Specification, :base_dir) do
|
450
|
-
return Gem.dir unless loaded_from
|
451
|
-
File.dirname File.dirname loaded_from
|
452
|
-
end
|
453
|
-
end
|
454
|
-
|
455
|
-
def backport_cache_file
|
456
|
-
redefine_method(Gem::Specification, :cache_dir) do
|
457
|
-
@cache_dir ||= File.join base_dir, "cache"
|
458
|
-
end
|
459
|
-
|
460
|
-
redefine_method(Gem::Specification, :cache_file) do
|
461
|
-
@cache_file ||= File.join cache_dir, "#{full_name}.gem"
|
462
|
-
end
|
463
|
-
end
|
464
|
-
|
465
|
-
def backport_spec_file
|
466
|
-
redefine_method(Gem::Specification, :spec_dir) do
|
467
|
-
@spec_dir ||= File.join base_dir, "specifications"
|
468
|
-
end
|
469
|
-
|
470
|
-
redefine_method(Gem::Specification, :spec_file) do
|
471
|
-
@spec_file ||= File.join spec_dir, "#{full_name}.gemspec"
|
472
|
-
end
|
443
|
+
specs_by_name
|
473
444
|
end
|
474
445
|
|
475
446
|
def undo_replacements
|
@@ -594,7 +565,6 @@ module Bundler
|
|
594
565
|
end
|
595
566
|
|
596
567
|
def all_specs
|
597
|
-
require_relative "remote_specification"
|
598
568
|
Gem::Specification.stubs.map do |stub|
|
599
569
|
StubSpecification.from_stub(stub)
|
600
570
|
end
|
@@ -602,10 +572,10 @@ module Bundler
|
|
602
572
|
|
603
573
|
def backport_ext_builder_monitor
|
604
574
|
# So we can avoid requiring "rubygems/ext" in its entirety
|
605
|
-
Gem.module_eval <<-
|
575
|
+
Gem.module_eval <<-RUBY, __FILE__, __LINE__ + 1
|
606
576
|
module Ext
|
607
577
|
end
|
608
|
-
|
578
|
+
RUBY
|
609
579
|
|
610
580
|
require "rubygems/ext/builder"
|
611
581
|
|
data/lib/bundler/runtime.rb
CHANGED
@@ -43,14 +43,6 @@ module Bundler
|
|
43
43
|
self
|
44
44
|
end
|
45
45
|
|
46
|
-
REQUIRE_ERRORS = [
|
47
|
-
/^no such file to load -- (.+)$/i,
|
48
|
-
/^Missing \w+ (?:file\s*)?([^\s]+.rb)$/i,
|
49
|
-
/^Missing API definition file in (.+)$/i,
|
50
|
-
/^cannot load such file -- (.+)$/i,
|
51
|
-
/^dlopen\([^)]*\): Library not loaded: (.+)$/i,
|
52
|
-
].freeze
|
53
|
-
|
54
46
|
def require(*groups)
|
55
47
|
groups.map!(&:to_sym)
|
56
48
|
groups = [:default] if groups.empty?
|
@@ -79,16 +71,14 @@ module Bundler
|
|
79
71
|
end
|
80
72
|
end
|
81
73
|
rescue LoadError => e
|
82
|
-
|
83
|
-
raise if dep.autorequire || $1 != required_file
|
74
|
+
raise if dep.autorequire || e.path != required_file
|
84
75
|
|
85
76
|
if dep.autorequire.nil? && dep.name.include?("-")
|
86
77
|
begin
|
87
78
|
namespaced_file = dep.name.tr("-", "/")
|
88
79
|
Kernel.require namespaced_file
|
89
80
|
rescue LoadError => e
|
90
|
-
|
91
|
-
raise if $1 != namespaced_file
|
81
|
+
raise if e.path != namespaced_file
|
92
82
|
end
|
93
83
|
end
|
94
84
|
end
|
@@ -165,7 +155,7 @@ module Bundler
|
|
165
155
|
spec_cache_paths = []
|
166
156
|
spec_gemspec_paths = []
|
167
157
|
spec_extension_paths = []
|
168
|
-
specs.each do |spec|
|
158
|
+
Bundler.rubygems.add_default_gems_to(specs).values.each do |spec|
|
169
159
|
spec_gem_paths << spec.full_gem_path
|
170
160
|
# need to check here in case gems are nested like for the rails git repo
|
171
161
|
md = %r{(.+bundler/gems/.+-[a-f0-9]{7,12})}.match(spec.full_gem_path)
|
@@ -213,7 +203,7 @@ module Bundler
|
|
213
203
|
output
|
214
204
|
end
|
215
205
|
|
216
|
-
|
206
|
+
private
|
217
207
|
|
218
208
|
def prune_gem_cache(resolve, cache_path)
|
219
209
|
cached = Dir["#{cache_path}/*.gem"]
|
data/lib/bundler/settings.rb
CHANGED
@@ -12,7 +12,6 @@ module Bundler
|
|
12
12
|
allow_offline_install
|
13
13
|
auto_clean_without_path
|
14
14
|
auto_install
|
15
|
-
auto_config_jobs
|
16
15
|
cache_all
|
17
16
|
cache_all_platforms
|
18
17
|
default_install_uses_path
|
@@ -22,7 +21,6 @@ module Bundler
|
|
22
21
|
disable_exec_load
|
23
22
|
disable_local_branch_check
|
24
23
|
disable_multisource
|
25
|
-
disable_platform_warnings
|
26
24
|
disable_shared_gems
|
27
25
|
disable_version_check
|
28
26
|
force_ruby_platform
|
@@ -44,8 +42,6 @@ module Bundler
|
|
44
42
|
setup_makes_kernel_gem_public
|
45
43
|
silence_deprecations
|
46
44
|
silence_root_warning
|
47
|
-
skip_default_git_sources
|
48
|
-
specific_platform
|
49
45
|
suppress_install_using_messages
|
50
46
|
unlock_source_unlocks_spec
|
51
47
|
update_requires_all_flag
|
@@ -66,30 +62,25 @@ module Bundler
|
|
66
62
|
].freeze
|
67
63
|
|
68
64
|
DEFAULT_CONFIG = {
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
65
|
+
"BUNDLE_SILENCE_DEPRECATIONS" => false,
|
66
|
+
"BUNDLE_DISABLE_VERSION_CHECK" => true,
|
67
|
+
"BUNDLE_PREFER_PATCH" => false,
|
68
|
+
"BUNDLE_REDIRECT" => 5,
|
69
|
+
"BUNDLE_RETRY" => 3,
|
70
|
+
"BUNDLE_TIMEOUT" => 10,
|
75
71
|
}.freeze
|
76
72
|
|
77
73
|
def initialize(root = nil)
|
78
74
|
@root = root
|
79
75
|
@local_config = load_config(local_config_file)
|
76
|
+
@env_config = ENV.to_h.select {|key, _value| key =~ /\ABUNDLE_.+/ }
|
80
77
|
@global_config = load_config(global_config_file)
|
81
78
|
@temporary = {}
|
82
79
|
end
|
83
80
|
|
84
81
|
def [](name)
|
85
82
|
key = key_for(name)
|
86
|
-
value =
|
87
|
-
@local_config.fetch(key) do
|
88
|
-
ENV.fetch(key) do
|
89
|
-
@global_config.fetch(key) do
|
90
|
-
DEFAULT_CONFIG.fetch(name) do
|
91
|
-
nil
|
92
|
-
end end end end end
|
83
|
+
value = configs.values.map {|config| config[key] }.compact.first
|
93
84
|
|
94
85
|
converted_value(value, name)
|
95
86
|
end
|
@@ -132,9 +123,7 @@ module Bundler
|
|
132
123
|
end
|
133
124
|
|
134
125
|
def all
|
135
|
-
|
136
|
-
|
137
|
-
keys = @temporary.keys | @global_config.keys | @local_config.keys | env_keys
|
126
|
+
keys = @temporary.keys | @global_config.keys | @local_config.keys | @env_config.keys
|
138
127
|
|
139
128
|
keys.map do |key|
|
140
129
|
key.sub(/^BUNDLE_/, "").gsub(/__/, ".").downcase
|
@@ -171,13 +160,11 @@ module Bundler
|
|
171
160
|
|
172
161
|
def locations(key)
|
173
162
|
key = key_for(key)
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
locations[:default] = DEFAULT_CONFIG[key] if DEFAULT_CONFIG.key?(key)
|
180
|
-
locations
|
163
|
+
configs.keys.inject({}) do |partial_locations, level|
|
164
|
+
value_on_level = configs[level][key]
|
165
|
+
partial_locations[level] = value_on_level unless value_on_level.nil?
|
166
|
+
partial_locations
|
167
|
+
end
|
181
168
|
end
|
182
169
|
|
183
170
|
def pretty_values_for(exposed_key)
|
@@ -185,20 +172,20 @@ module Bundler
|
|
185
172
|
|
186
173
|
locations = []
|
187
174
|
|
188
|
-
if @temporary
|
189
|
-
locations << "Set for the current command: #{converted_value(
|
175
|
+
if value = @temporary[key]
|
176
|
+
locations << "Set for the current command: #{converted_value(value, exposed_key).inspect}"
|
190
177
|
end
|
191
178
|
|
192
|
-
if @local_config
|
193
|
-
locations << "Set for your local app (#{local_config_file}): #{converted_value(
|
179
|
+
if value = @local_config[key]
|
180
|
+
locations << "Set for your local app (#{local_config_file}): #{converted_value(value, exposed_key).inspect}"
|
194
181
|
end
|
195
182
|
|
196
|
-
if value =
|
183
|
+
if value = @env_config[key]
|
197
184
|
locations << "Set via #{key}: #{converted_value(value, exposed_key).inspect}"
|
198
185
|
end
|
199
186
|
|
200
|
-
if @global_config
|
201
|
-
locations << "Set for the current user (#{global_config_file}): #{converted_value(
|
187
|
+
if value = @global_config[key]
|
188
|
+
locations << "Set for the current user (#{global_config_file}): #{converted_value(value, exposed_key).inspect}"
|
202
189
|
end
|
203
190
|
|
204
191
|
return ["You have not configured a value for `#{exposed_key}`"] if locations.empty?
|
@@ -207,17 +194,19 @@ module Bundler
|
|
207
194
|
|
208
195
|
# for legacy reasons, in Bundler 2, we do not respect :disable_shared_gems
|
209
196
|
def path
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
197
|
+
configs.each do |_level, settings|
|
198
|
+
path = value_for("path", settings)
|
199
|
+
path_system = value_for("path.system", settings)
|
200
|
+
disabled_shared_gems = value_for("disable_shared_gems", settings)
|
201
|
+
next if path.nil? && path_system.nil? && disabled_shared_gems.nil?
|
202
|
+
system_path = path_system || (disabled_shared_gems == false)
|
203
|
+
return Path.new(path, system_path)
|
214
204
|
end
|
215
205
|
|
216
|
-
|
217
|
-
Path.new(self[:path], system_path, Bundler.feature_flag.default_install_uses_path?)
|
206
|
+
Path.new(nil, false)
|
218
207
|
end
|
219
208
|
|
220
|
-
Path = Struct.new(:explicit_path, :system_path
|
209
|
+
Path = Struct.new(:explicit_path, :system_path) do
|
221
210
|
def path
|
222
211
|
path = base_path
|
223
212
|
path = File.join(path, Bundler.ruby_scope) unless use_system_gems?
|
@@ -227,7 +216,7 @@ module Bundler
|
|
227
216
|
def use_system_gems?
|
228
217
|
return true if system_path
|
229
218
|
return false if explicit_path
|
230
|
-
!default_install_uses_path
|
219
|
+
!Bundler.feature_flag.default_install_uses_path?
|
231
220
|
end
|
232
221
|
|
233
222
|
def base_path
|
@@ -280,9 +269,9 @@ module Bundler
|
|
280
269
|
|
281
270
|
def validate!
|
282
271
|
all.each do |raw_key|
|
283
|
-
[@local_config,
|
284
|
-
value =
|
285
|
-
Validator.validate!(raw_key, value, settings.
|
272
|
+
[@local_config, @env_config, @global_config].each do |settings|
|
273
|
+
value = value_for(raw_key, settings)
|
274
|
+
Validator.validate!(raw_key, value, settings.dup)
|
286
275
|
end
|
287
276
|
end
|
288
277
|
end
|
@@ -293,7 +282,21 @@ module Bundler
|
|
293
282
|
"BUNDLE_#{key}"
|
294
283
|
end
|
295
284
|
|
296
|
-
|
285
|
+
private
|
286
|
+
|
287
|
+
def configs
|
288
|
+
{
|
289
|
+
:temporary => @temporary,
|
290
|
+
:local => @local_config,
|
291
|
+
:env => @env_config,
|
292
|
+
:global => @global_config,
|
293
|
+
:default => DEFAULT_CONFIG,
|
294
|
+
}
|
295
|
+
end
|
296
|
+
|
297
|
+
def value_for(name, config)
|
298
|
+
converted_value(config[key_for(name)], name)
|
299
|
+
end
|
297
300
|
|
298
301
|
def parent_setting_for(name)
|
299
302
|
split_specific_setting_for(name)[0]
|