bundler 2.1.4 → 2.2.17
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 +1774 -1430
- data/README.md +6 -8
- data/bundler.gemspec +4 -4
- data/exe/bundle +3 -0
- data/lib/bundler.rb +33 -9
- data/lib/bundler/build_metadata.rb +3 -11
- data/lib/bundler/cli.rb +59 -23
- data/lib/bundler/cli/add.rb +1 -1
- data/lib/bundler/cli/binstubs.rb +6 -2
- data/lib/bundler/cli/cache.rb +2 -7
- data/lib/bundler/cli/clean.rb +1 -1
- data/lib/bundler/cli/common.rb +29 -2
- 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 +129 -28
- 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 +13 -11
- data/lib/bundler/cli/issue.rb +2 -2
- data/lib/bundler/cli/list.rb +12 -10
- data/lib/bundler/cli/outdated.rb +88 -67
- 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 +3 -1
- data/lib/bundler/compact_index_client.rb +1 -1
- data/lib/bundler/compact_index_client/cache.rb +6 -14
- data/lib/bundler/compact_index_client/gem_parser.rb +28 -0
- data/lib/bundler/compact_index_client/updater.rb +13 -17
- data/lib/bundler/current_ruby.rb +1 -0
- data/lib/bundler/definition.rb +121 -131
- data/lib/bundler/dep_proxy.rb +16 -9
- data/lib/bundler/dependency.rb +3 -10
- data/lib/bundler/dsl.rb +40 -33
- 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 -5
- data/lib/bundler/fetcher.rb +5 -4
- data/lib/bundler/fetcher/base.rb +1 -1
- data/lib/bundler/fetcher/compact_index.rb +1 -1
- data/lib/bundler/fetcher/downloader.rb +9 -5
- data/lib/bundler/fetcher/index.rb +3 -4
- data/lib/bundler/friendly_errors.rb +22 -13
- data/lib/bundler/gem_helper.rb +51 -18
- data/lib/bundler/gem_helpers.rb +36 -25
- data/lib/bundler/gem_version_promoter.rb +4 -4
- data/lib/bundler/graph.rb +1 -1
- data/lib/bundler/index.rb +12 -7
- data/lib/bundler/injector.rb +23 -5
- data/lib/bundler/inline.rb +3 -2
- data/lib/bundler/installer.rb +37 -49
- data/lib/bundler/installer/gem_installer.rb +3 -3
- data/lib/bundler/installer/parallel_installer.rb +46 -25
- data/lib/bundler/installer/standalone.rb +17 -2
- data/lib/bundler/lazy_specification.rb +45 -25
- data/lib/bundler/lockfile_generator.rb +1 -1
- data/lib/bundler/lockfile_parser.rb +4 -14
- data/lib/bundler/man/.document +1 -0
- data/{man → lib/bundler/man}/bundle-add.1 +1 -1
- data/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-binstubs.1 +5 -3
- data/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
- data/{man → lib/bundler/man}/bundle-cache.1 +1 -1
- data/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-check.1 +1 -1
- data/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-clean.1 +1 -1
- data/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-config.1 +42 -34
- data/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +51 -43
- data/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
- data/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-exec.1 +1 -1
- data/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-gem.1 +25 -3
- data/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
- data/{man → lib/bundler/man}/bundle-info.1 +1 -1
- data/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-init.1 +1 -1
- data/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-inject.1 +1 -1
- data/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-install.1 +30 -3
- data/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +25 -3
- data/{man → lib/bundler/man}/bundle-list.1 +7 -7
- data/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
- data/{man → lib/bundler/man}/bundle-lock.1 +1 -1
- data/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-open.1 +1 -1
- data/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-outdated.1 +1 -1
- data/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-platform.1 +1 -1
- data/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
- data/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-remove.1 +1 -1
- data/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-show.1 +1 -1
- data/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-update.1 +1 -1
- data/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-viz.1 +1 -1
- data/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle.1 +1 -1
- data/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +0 -0
- data/{man → lib/bundler/man}/gemfile.5 +4 -4
- data/{man → lib/bundler/man}/gemfile.5.ronn +4 -4
- data/{man → lib/bundler/man}/index.txt +0 -0
- data/lib/bundler/mirror.rb +2 -2
- data/lib/bundler/plugin.rb +33 -7
- data/lib/bundler/plugin/api/source.rb +8 -1
- data/lib/bundler/plugin/dsl.rb +1 -1
- data/lib/bundler/plugin/index.rb +10 -1
- data/lib/bundler/plugin/installer.rb +9 -11
- data/lib/bundler/plugin/installer/rubygems.rb +1 -1
- data/lib/bundler/plugin/source_list.rb +5 -1
- data/lib/bundler/psyched_yaml.rb +0 -15
- data/lib/bundler/remote_specification.rb +5 -2
- data/lib/bundler/resolver.rb +133 -77
- data/lib/bundler/resolver/spec_group.rb +75 -48
- data/lib/bundler/retry.rb +2 -2
- data/lib/bundler/ruby_version.rb +1 -1
- data/lib/bundler/rubygems_ext.rb +69 -9
- data/lib/bundler/rubygems_gem_installer.rb +50 -9
- data/lib/bundler/rubygems_integration.rb +25 -60
- data/lib/bundler/runtime.rb +4 -14
- data/lib/bundler/settings.rb +107 -54
- data/lib/bundler/shared_helpers.rb +3 -3
- data/lib/bundler/similarity_detector.rb +1 -1
- data/lib/bundler/source.rb +7 -1
- data/lib/bundler/source/git.rb +24 -22
- data/lib/bundler/source/git/git_proxy.rb +82 -80
- data/lib/bundler/source/metadata.rb +0 -4
- data/lib/bundler/source/path.rb +10 -4
- data/lib/bundler/source/path/installer.rb +10 -10
- data/lib/bundler/source/rubygems.rb +45 -24
- data/lib/bundler/source/rubygems/remote.rb +1 -1
- data/lib/bundler/source_list.rb +31 -26
- data/lib/bundler/spec_set.rb +29 -17
- data/lib/bundler/stub_specification.rb +25 -7
- data/lib/bundler/templates/Gemfile +1 -1
- data/lib/bundler/templates/gems.rb +1 -1
- data/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
- 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 +6 -5
- 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 +16 -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 +15 -7
- data/lib/bundler/templates/newgem/rubocop.yml.tt +13 -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/delegates/specification_provider.rb +7 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -5
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +3 -3
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +12 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +49 -47
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +82 -189
- data/lib/bundler/vendor/thor/lib/thor.rb +5 -13
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +4 -2
- data/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
- data/lib/bundler/vendor/thor/lib/thor/error.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +5 -1
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +9 -8
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +5 -2
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +5 -1
- 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
- metadata +71 -85
- 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
@@ -3,61 +3,74 @@
|
|
3
3
|
module Bundler
|
4
4
|
class Resolver
|
5
5
|
class SpecGroup
|
6
|
-
include GemHelpers
|
7
|
-
|
8
6
|
attr_accessor :name, :version, :source
|
9
|
-
attr_accessor :
|
7
|
+
attr_accessor :activated_platforms
|
8
|
+
|
9
|
+
def self.create_for(specs, all_platforms, specific_platform)
|
10
|
+
specific_platform_specs = specs[specific_platform]
|
11
|
+
return unless specific_platform_specs.any?
|
12
|
+
|
13
|
+
platforms = all_platforms.select {|p| specs[p].any? }
|
10
14
|
|
11
|
-
|
12
|
-
|
15
|
+
new(specific_platform_specs.first, specs, platforms)
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(exemplary_spec, specs, relevant_platforms)
|
19
|
+
@exemplary_spec = exemplary_spec
|
13
20
|
@name = exemplary_spec.name
|
14
21
|
@version = exemplary_spec.version
|
15
22
|
@source = exemplary_spec.source
|
16
23
|
|
17
|
-
@
|
18
|
-
@
|
19
|
-
@
|
20
|
-
|
24
|
+
@all_platforms = relevant_platforms
|
25
|
+
@activated_platforms = relevant_platforms
|
26
|
+
@dependencies = Hash.new do |dependencies, platforms|
|
27
|
+
dependencies[platforms] = dependencies_for(platforms)
|
28
|
+
end
|
29
|
+
@partitioned_dependency_names = Hash.new do |partitioned_dependency_names, platforms|
|
30
|
+
partitioned_dependency_names[platforms] = partitioned_dependency_names_for(platforms)
|
21
31
|
end
|
22
|
-
@
|
32
|
+
@specs = specs
|
23
33
|
end
|
24
34
|
|
25
35
|
def to_specs
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
36
|
+
activated_platforms.map do |p|
|
37
|
+
specs = @specs[p]
|
38
|
+
next unless specs.any?
|
39
|
+
|
40
|
+
specs.map do |s|
|
41
|
+
lazy_spec = LazySpecification.new(name, version, s.platform, source)
|
42
|
+
lazy_spec.dependencies.replace s.dependencies
|
43
|
+
lazy_spec
|
44
|
+
end
|
45
|
+
end.flatten.compact.uniq
|
32
46
|
end
|
33
47
|
|
34
48
|
def activate_platform!(platform)
|
35
|
-
|
36
|
-
return if @activated_platforms.include?(platform)
|
37
|
-
@activated_platforms << platform
|
49
|
+
self.activated_platforms = [platform]
|
38
50
|
end
|
39
51
|
|
40
|
-
def
|
41
|
-
|
42
|
-
!spec.nil?
|
52
|
+
def activate_all_platforms!
|
53
|
+
self.activated_platforms = @all_platforms
|
43
54
|
end
|
44
55
|
|
45
56
|
def to_s
|
46
|
-
|
57
|
+
activated_platforms_string = sorted_activated_platforms.join(", ")
|
58
|
+
"#{name} (#{version}) (#{activated_platforms_string})"
|
47
59
|
end
|
48
60
|
|
49
61
|
def dependencies_for_activated_platforms
|
50
|
-
dependencies
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
62
|
+
@dependencies[activated_platforms]
|
63
|
+
end
|
64
|
+
|
65
|
+
def partitioned_dependency_names_for_activated_platforms
|
66
|
+
@partitioned_dependency_names[activated_platforms]
|
55
67
|
end
|
56
68
|
|
57
69
|
def ==(other)
|
58
70
|
return unless other.is_a?(SpecGroup)
|
59
71
|
name == other.name &&
|
60
72
|
version == other.version &&
|
73
|
+
sorted_activated_platforms == other.sorted_activated_platforms &&
|
61
74
|
source == other.source
|
62
75
|
end
|
63
76
|
|
@@ -65,40 +78,54 @@ module Bundler
|
|
65
78
|
return unless other.is_a?(SpecGroup)
|
66
79
|
name.eql?(other.name) &&
|
67
80
|
version.eql?(other.version) &&
|
81
|
+
sorted_activated_platforms.eql?(other.sorted_activated_platforms) &&
|
68
82
|
source.eql?(other.source)
|
69
83
|
end
|
70
84
|
|
71
85
|
def hash
|
72
|
-
|
86
|
+
name.hash ^ version.hash ^ sorted_activated_platforms.hash ^ source.hash
|
73
87
|
end
|
74
88
|
|
75
|
-
|
89
|
+
protected
|
76
90
|
|
77
|
-
def
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
91
|
+
def sorted_activated_platforms
|
92
|
+
activated_platforms.sort_by(&:to_s)
|
93
|
+
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def dependencies_for(platforms)
|
98
|
+
platforms.map do |platform|
|
99
|
+
__dependencies(platform) + metadata_dependencies(platform)
|
100
|
+
end.flatten
|
101
|
+
end
|
102
|
+
|
103
|
+
def partitioned_dependency_names_for(platforms)
|
104
|
+
return @dependencies[platforms].map(&:name), [] if platforms.size == 1
|
105
|
+
|
106
|
+
@dependencies[platforms].partition do |dep_proxy|
|
107
|
+
@dependencies[platforms].count {|dp| dp.dep == dep_proxy.dep } == platforms.size
|
108
|
+
end.map {|deps| deps.map(&:name) }
|
109
|
+
end
|
110
|
+
|
111
|
+
def __dependencies(platform)
|
112
|
+
dependencies = []
|
113
|
+
@specs[platform].first.dependencies.each do |dep|
|
114
|
+
next if dep.type == :development
|
115
|
+
dependencies << DepProxy.get_proxy(dep, platform)
|
88
116
|
end
|
117
|
+
dependencies
|
89
118
|
end
|
90
119
|
|
91
|
-
def metadata_dependencies(
|
92
|
-
|
93
|
-
|
94
|
-
# fetch the full gemspec when calling required_ruby_version
|
95
|
-
return [] if !spec.is_a?(EndpointSpecification) && !spec.is_a?(Gem::Specification)
|
120
|
+
def metadata_dependencies(platform)
|
121
|
+
spec = @specs[platform].first
|
122
|
+
return [] unless spec.is_a?(Gem::Specification)
|
96
123
|
dependencies = []
|
97
124
|
if !spec.required_ruby_version.nil? && !spec.required_ruby_version.none?
|
98
|
-
dependencies << DepProxy.
|
125
|
+
dependencies << DepProxy.get_proxy(Gem::Dependency.new("Ruby\0", spec.required_ruby_version), platform)
|
99
126
|
end
|
100
127
|
if !spec.required_rubygems_version.nil? && !spec.required_rubygems_version.none?
|
101
|
-
dependencies << DepProxy.
|
128
|
+
dependencies << DepProxy.get_proxy(Gem::Dependency.new("RubyGems\0", spec.required_rubygems_version), platform)
|
102
129
|
end
|
103
130
|
dependencies
|
104
131
|
end
|
data/lib/bundler/retry.rb
CHANGED
@@ -32,7 +32,7 @@ module Bundler
|
|
32
32
|
end
|
33
33
|
alias_method :attempts, :attempt
|
34
34
|
|
35
|
-
|
35
|
+
private
|
36
36
|
|
37
37
|
def run(&block)
|
38
38
|
@failed = false
|
@@ -49,7 +49,7 @@ module Bundler
|
|
49
49
|
raise e
|
50
50
|
end
|
51
51
|
return true unless name
|
52
|
-
Bundler.ui.info "" unless Bundler.ui.debug? # Add new line
|
52
|
+
Bundler.ui.info "" unless Bundler.ui.debug? # Add new line in case dots preceded this
|
53
53
|
Bundler.ui.warn "Retrying #{name} due to error (#{current_run.next}/#{total_runs}): #{e.class} #{e.message}", Bundler.ui.debug?
|
54
54
|
end
|
55
55
|
|
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,51 @@ 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
|
+
|
161
|
+
if Gem::Requirement.new("~> 2.0").hash == Gem::Requirement.new("~> 2.0.0").hash
|
162
|
+
class Requirement
|
163
|
+
module CorrectHashForLambdaOperator
|
164
|
+
def hash
|
165
|
+
if requirements.any? {|r| r.first == "~>" }
|
166
|
+
requirements.map {|r| r.first == "~>" ? [r[0], r[1].to_s] : r }.sort.hash
|
167
|
+
else
|
168
|
+
super
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
prepend CorrectHashForLambdaOperator
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
133
177
|
class Platform
|
134
178
|
JAVA = Gem::Platform.new("java") unless defined?(JAVA)
|
135
179
|
MSWIN = Gem::Platform.new("mswin32") unless defined?(MSWIN)
|
@@ -145,6 +189,22 @@ module Gem
|
|
145
189
|
undef_method :eql? if method_defined? :eql?
|
146
190
|
alias_method :eql?, :==
|
147
191
|
end
|
192
|
+
|
193
|
+
require "rubygems/util"
|
194
|
+
|
195
|
+
Util.singleton_class.module_eval do
|
196
|
+
if Util.singleton_methods.include?(:glob_files_in_dir) # since 3.0.0.beta.2
|
197
|
+
remove_method :glob_files_in_dir
|
198
|
+
end
|
199
|
+
|
200
|
+
def glob_files_in_dir(glob, base_path)
|
201
|
+
if RUBY_VERSION >= "2.5"
|
202
|
+
Dir.glob(glob, :base => base_path).map! {|f| File.expand_path(f, base_path) }
|
203
|
+
else
|
204
|
+
Dir.glob(File.join(base_path.to_s.gsub(/[\[\]]/, '\\\\\\&'), glob)).map! {|f| File.expand_path(f) }
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
148
208
|
end
|
149
209
|
|
150
210
|
module Gem
|
@@ -4,23 +4,64 @@ 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
|
16
10
|
|
11
|
+
def install
|
12
|
+
pre_install_checks
|
13
|
+
|
14
|
+
run_pre_install_hooks
|
15
|
+
|
16
|
+
spec.loaded_from = spec_file
|
17
|
+
|
18
|
+
# Completely remove any previous gem files
|
19
|
+
FileUtils.rm_rf gem_dir
|
20
|
+
FileUtils.rm_rf spec.extension_dir
|
21
|
+
|
22
|
+
FileUtils.mkdir_p gem_dir, :mode => 0o755
|
23
|
+
|
24
|
+
extract_files
|
25
|
+
|
26
|
+
build_extensions
|
27
|
+
write_build_info_file
|
28
|
+
run_post_build_hooks
|
29
|
+
|
30
|
+
generate_bin
|
31
|
+
generate_plugins
|
32
|
+
|
33
|
+
write_spec
|
34
|
+
write_cache_file
|
35
|
+
|
36
|
+
say spec.post_install_message unless spec.post_install_message.nil?
|
37
|
+
|
38
|
+
run_post_install_hooks
|
39
|
+
|
40
|
+
spec
|
41
|
+
end
|
42
|
+
|
43
|
+
def generate_plugins
|
44
|
+
return unless Gem::Installer.instance_methods(false).include?(:generate_plugins)
|
45
|
+
|
46
|
+
latest = Gem::Specification.stubs_for(spec.name).first
|
47
|
+
return if latest && latest.version > spec.version
|
48
|
+
|
49
|
+
ensure_writable_dir @plugins_dir
|
50
|
+
|
51
|
+
if spec.plugins.empty?
|
52
|
+
remove_plugins_for(spec, @plugins_dir)
|
53
|
+
else
|
54
|
+
regenerate_plugins_for(spec, @plugins_dir)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
17
58
|
def pre_install_checks
|
18
59
|
super && validate_bundler_checksum(options[:bundler_expected_checksum])
|
19
60
|
end
|
20
61
|
|
21
62
|
def build_extensions
|
22
63
|
extension_cache_path = options[:bundler_extension_cache_path]
|
23
|
-
return super unless extension_cache_path && extension_dir =
|
64
|
+
return super unless extension_cache_path && extension_dir = spec.extension_dir
|
24
65
|
|
25
66
|
extension_dir = Pathname.new(extension_dir)
|
26
67
|
build_complete = SharedHelpers.filesystem_access(extension_cache_path.join("gem.build_complete"), :read, &:file?)
|
@@ -40,7 +81,7 @@ module Bundler
|
|
40
81
|
end
|
41
82
|
end
|
42
83
|
|
43
|
-
|
84
|
+
private
|
44
85
|
|
45
86
|
def validate_bundler_checksum(checksum)
|
46
87
|
return true if Bundler.settings[:disable_checksum_validation]
|
@@ -66,7 +107,7 @@ module Bundler
|
|
66
107
|
|
67
108
|
If you wish to continue installing the downloaded gem, and are certain it does not pose a \
|
68
109
|
security issue despite the mismatching checksum, do the following:
|
69
|
-
1. run `bundle config set disable_checksum_validation true` to turn off checksum verification
|
110
|
+
1. run `bundle config set --local disable_checksum_validation true` to turn off checksum verification
|
70
111
|
2. run `bundle install`
|
71
112
|
|
72
113
|
(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
|
@@ -115,11 +110,6 @@ module Bundler
|
|
115
110
|
obj.to_s
|
116
111
|
end
|
117
112
|
|
118
|
-
def platforms
|
119
|
-
return [Gem::Platform::RUBY] if Bundler.settings[:force_ruby_platform]
|
120
|
-
Gem.platforms
|
121
|
-
end
|
122
|
-
|
123
113
|
def configuration
|
124
114
|
require_relative "psyched_yaml"
|
125
115
|
Gem.configuration
|
@@ -141,14 +131,10 @@ module Bundler
|
|
141
131
|
end
|
142
132
|
|
143
133
|
def inflate(obj)
|
144
|
-
require "rubygems/util"
|
145
|
-
|
146
134
|
Gem::Util.inflate(obj)
|
147
135
|
end
|
148
136
|
|
149
137
|
def correct_for_windows_path(path)
|
150
|
-
require "rubygems/util"
|
151
|
-
|
152
138
|
if Gem::Util.respond_to?(:correct_for_windows_path)
|
153
139
|
Gem::Util.correct_for_windows_path(path)
|
154
140
|
elsif path[0].chr == "/" && path[1].chr =~ /[a-z]/i && path[2].chr == ":"
|
@@ -223,11 +209,6 @@ module Bundler
|
|
223
209
|
Gem.bin_path(gem, bin, ver)
|
224
210
|
end
|
225
211
|
|
226
|
-
def preserve_paths
|
227
|
-
# this is a no-op outside of RubyGems 1.8
|
228
|
-
yield
|
229
|
-
end
|
230
|
-
|
231
212
|
def loaded_gem_paths
|
232
213
|
loaded_gem_paths = Gem.loaded_specs.map {|_, s| s.full_require_paths }
|
233
214
|
loaded_gem_paths.flatten
|
@@ -241,6 +222,10 @@ module Bundler
|
|
241
222
|
Gem.load_plugin_files(files) if Gem.respond_to?(:load_plugin_files)
|
242
223
|
end
|
243
224
|
|
225
|
+
def load_env_plugins
|
226
|
+
Gem.load_env_plugins if Gem.respond_to?(:load_env_plugins)
|
227
|
+
end
|
228
|
+
|
244
229
|
def ui=(obj)
|
245
230
|
Gem::DefaultUserInteraction.ui = obj
|
246
231
|
end
|
@@ -265,8 +250,6 @@ module Bundler
|
|
265
250
|
require "rubygems/security"
|
266
251
|
require_relative "psyched_yaml"
|
267
252
|
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
253
|
rescue Exception, Gem::Exception, Gem::Security::Exception => e # rubocop:disable Lint/RescueException
|
271
254
|
if e.is_a?(Gem::Security::Exception) ||
|
272
255
|
e.message =~ /unknown trust policy|unsigned gem/i ||
|
@@ -329,8 +312,13 @@ module Bundler
|
|
329
312
|
end
|
330
313
|
|
331
314
|
message = if spec.nil?
|
315
|
+
target_file = begin
|
316
|
+
Bundler.default_gemfile.basename
|
317
|
+
rescue GemfileNotFound
|
318
|
+
"inline Gemfile"
|
319
|
+
end
|
332
320
|
"#{dep.name} is not part of the bundle." \
|
333
|
-
" Add it to your #{
|
321
|
+
" Add it to your #{target_file}."
|
334
322
|
else
|
335
323
|
"can't activate #{dep}, already activated #{spec.full_name}. " \
|
336
324
|
"Make sure all dependencies are added to Gemfile."
|
@@ -346,7 +334,7 @@ module Bundler
|
|
346
334
|
raise e
|
347
335
|
end
|
348
336
|
|
349
|
-
# backwards compatibility shim, see https://github.com/
|
337
|
+
# backwards compatibility shim, see https://github.com/rubygems/bundler/issues/5102
|
350
338
|
kernel_class.send(:public, :gem) if Bundler.feature_flag.setup_makes_kernel_gem_public?
|
351
339
|
end
|
352
340
|
end
|
@@ -422,6 +410,17 @@ module Bundler
|
|
422
410
|
# Replace or hook into RubyGems to provide a bundlerized view
|
423
411
|
# of the world.
|
424
412
|
def replace_entrypoints(specs)
|
413
|
+
specs_by_name = add_default_gems_to(specs)
|
414
|
+
|
415
|
+
replace_gem(specs, specs_by_name)
|
416
|
+
stub_rubygems(specs)
|
417
|
+
replace_bin_path(specs_by_name)
|
418
|
+
|
419
|
+
Gem.clear_paths
|
420
|
+
end
|
421
|
+
|
422
|
+
# Add default gems not already present in specs, and return them as a hash.
|
423
|
+
def add_default_gems_to(specs)
|
425
424
|
specs_by_name = specs.reduce({}) do |h, s|
|
426
425
|
h[s.name] = s
|
427
426
|
h
|
@@ -436,40 +435,7 @@ module Bundler
|
|
436
435
|
specs_by_name[default_spec_name] = default_spec
|
437
436
|
end
|
438
437
|
|
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
|
438
|
+
specs_by_name
|
473
439
|
end
|
474
440
|
|
475
441
|
def undo_replacements
|
@@ -594,7 +560,6 @@ module Bundler
|
|
594
560
|
end
|
595
561
|
|
596
562
|
def all_specs
|
597
|
-
require_relative "remote_specification"
|
598
563
|
Gem::Specification.stubs.map do |stub|
|
599
564
|
StubSpecification.from_stub(stub)
|
600
565
|
end
|
@@ -602,10 +567,10 @@ module Bundler
|
|
602
567
|
|
603
568
|
def backport_ext_builder_monitor
|
604
569
|
# So we can avoid requiring "rubygems/ext" in its entirety
|
605
|
-
Gem.module_eval <<-
|
570
|
+
Gem.module_eval <<-RUBY, __FILE__, __LINE__ + 1
|
606
571
|
module Ext
|
607
572
|
end
|
608
|
-
|
573
|
+
RUBY
|
609
574
|
|
610
575
|
require "rubygems/ext/builder"
|
611
576
|
|