bundler 2.3.18 → 2.3.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +78 -0
- data/lib/bundler/build_metadata.rb +2 -2
- data/lib/bundler/cli/common.rb +1 -0
- data/lib/bundler/cli/install.rb +5 -2
- data/lib/bundler/cli/outdated.rb +12 -3
- data/lib/bundler/cli/platform.rb +1 -1
- data/lib/bundler/cli.rb +5 -3
- data/lib/bundler/definition.rb +103 -29
- data/lib/bundler/dsl.rb +2 -2
- data/lib/bundler/endpoint_specification.rb +1 -12
- data/lib/bundler/fetcher.rb +6 -6
- data/lib/bundler/gem_helpers.rb +7 -1
- data/lib/bundler/gem_version_promoter.rb +4 -0
- data/lib/bundler/index.rb +10 -12
- data/lib/bundler/inline.rb +1 -1
- data/lib/bundler/installer/standalone.rb +1 -1
- data/lib/bundler/installer.rb +14 -12
- data/lib/bundler/lazy_specification.rb +30 -23
- data/lib/bundler/man/bundle-add.1 +1 -1
- data/lib/bundler/man/bundle-binstubs.1 +1 -1
- data/lib/bundler/man/bundle-cache.1 +7 -1
- data/lib/bundler/man/bundle-cache.1.ronn +7 -0
- data/lib/bundler/man/bundle-check.1 +1 -1
- data/lib/bundler/man/bundle-clean.1 +1 -1
- data/lib/bundler/man/bundle-config.1 +25 -6
- data/lib/bundler/man/bundle-config.1.ronn +16 -6
- data/lib/bundler/man/bundle-doctor.1 +1 -1
- data/lib/bundler/man/bundle-exec.1 +2 -2
- data/lib/bundler/man/bundle-exec.1.ronn +1 -1
- data/lib/bundler/man/bundle-gem.1 +1 -1
- data/lib/bundler/man/bundle-info.1 +1 -1
- data/lib/bundler/man/bundle-init.1 +1 -1
- data/lib/bundler/man/bundle-inject.1 +5 -2
- data/lib/bundler/man/bundle-inject.1.ronn +3 -1
- data/lib/bundler/man/bundle-install.1 +5 -1
- data/lib/bundler/man/bundle-install.1.ronn +6 -0
- data/lib/bundler/man/bundle-list.1 +1 -1
- data/lib/bundler/man/bundle-lock.1 +1 -1
- data/lib/bundler/man/bundle-open.1 +1 -1
- data/lib/bundler/man/bundle-outdated.1 +1 -1
- data/lib/bundler/man/bundle-platform.1 +16 -6
- data/lib/bundler/man/bundle-platform.1.ronn +14 -7
- data/lib/bundler/man/bundle-plugin.1 +81 -0
- data/lib/bundler/man/bundle-plugin.1.ronn +59 -0
- data/lib/bundler/man/bundle-pristine.1 +1 -1
- data/lib/bundler/man/bundle-remove.1 +1 -1
- data/lib/bundler/man/bundle-show.1 +1 -1
- data/lib/bundler/man/bundle-update.1 +1 -1
- data/lib/bundler/man/bundle-viz.1 +4 -1
- data/lib/bundler/man/bundle-viz.1.ronn +2 -0
- data/lib/bundler/man/bundle.1 +10 -9
- data/lib/bundler/man/bundle.1.ronn +8 -6
- data/lib/bundler/man/gemfile.5 +16 -10
- data/lib/bundler/man/gemfile.5.ronn +23 -16
- data/lib/bundler/man/index.txt +1 -0
- data/lib/bundler/match_metadata.rb +13 -0
- data/lib/bundler/match_remote_metadata.rb +26 -0
- data/lib/bundler/plugin.rb +2 -0
- data/lib/bundler/remote_specification.rb +6 -11
- data/lib/bundler/resolver/spec_group.rb +11 -8
- data/lib/bundler/resolver.rb +40 -18
- data/lib/bundler/ruby_dsl.rb +1 -1
- data/lib/bundler/ruby_version.rb +5 -5
- data/lib/bundler/rubygems_ext.rb +41 -0
- data/lib/bundler/rubygems_gem_installer.rb +19 -12
- data/lib/bundler/settings.rb +1 -0
- data/lib/bundler/source/metadata.rb +1 -1
- data/lib/bundler/source_list.rb +4 -0
- data/lib/bundler/spec_set.rb +38 -33
- data/lib/bundler/version.rb +1 -1
- data/lib/bundler.rb +3 -3
- metadata +7 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 06eb5dcedd936231226213f5eeca20b368e575d153efa728a27ecb0912c41386
|
|
4
|
+
data.tar.gz: 60cfd094b573635123576691ceb73b62d297698b217cc68933e0ad4b293ce7b9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 04ec1c67333ae78914e6076b6b68024d9c8d57199a7d1a3898a44e643c4f91d5132351ee48590dc9c8167a64a9c838906683ac9b09255394c425193b9741ca34
|
|
7
|
+
data.tar.gz: aa077c408592fe31ed5102e8d4b0a5f8f103691236fe71ee40e8461d926047e2e4c65e600557a8addca192e7ad4c8d71c69a34b4ded4bd06d8427f7d437a5d9c
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,81 @@
|
|
|
1
|
+
# 2.3.21 (August 24, 2022)
|
|
2
|
+
|
|
3
|
+
## Enhancements:
|
|
4
|
+
|
|
5
|
+
- Backport non gnu libc linux support from RubyGems [#4488](https://github.com/rubygems/rubygems/pull/4488)
|
|
6
|
+
- Improve `Bundler.rm_rf` error message [#5861](https://github.com/rubygems/rubygems/pull/5861)
|
|
7
|
+
- Disallow both `--branch` and `--ref` at the same time in bundle-plugin [#5855](https://github.com/rubygems/rubygems/pull/5855)
|
|
8
|
+
- Restore previous performance of private RubyGems servers [#5826](https://github.com/rubygems/rubygems/pull/5826)
|
|
9
|
+
|
|
10
|
+
## Bug fixes:
|
|
11
|
+
|
|
12
|
+
- Fix conservative update downgrading top level gems [#5847](https://github.com/rubygems/rubygems/pull/5847)
|
|
13
|
+
- Fix edge case where `bundler/inline` unintentionally skips install [#5848](https://github.com/rubygems/rubygems/pull/5848)
|
|
14
|
+
- Fix `bundle platform` crash when there's a lockfile with no Ruby locked [#5850](https://github.com/rubygems/rubygems/pull/5850)
|
|
15
|
+
- Fix crash when incomplete locked specifications are found in transitive dependencies [#5840](https://github.com/rubygems/rubygems/pull/5840)
|
|
16
|
+
- Fix Ruby platform incorrectly removed on `bundle update` [#5832](https://github.com/rubygems/rubygems/pull/5832)
|
|
17
|
+
|
|
18
|
+
## Documentation:
|
|
19
|
+
|
|
20
|
+
- Explain cancelled CLI deprecations clearly [#5864](https://github.com/rubygems/rubygems/pull/5864)
|
|
21
|
+
- Improve `bundle config` command synopsis [#5854](https://github.com/rubygems/rubygems/pull/5854)
|
|
22
|
+
- Introduce bundle-plugin(1) man [#5853](https://github.com/rubygems/rubygems/pull/5853)
|
|
23
|
+
|
|
24
|
+
# 2.3.20 (August 10, 2022)
|
|
25
|
+
|
|
26
|
+
## Enhancements:
|
|
27
|
+
|
|
28
|
+
- Consistently ignore patchlevel when reporting `bundle platform --ruby` [#5793](https://github.com/rubygems/rubygems/pull/5793)
|
|
29
|
+
- Make `--standalone` play nice with `--local` [#5762](https://github.com/rubygems/rubygems/pull/5762)
|
|
30
|
+
- Implement `bundle install --prefer-local` [#5761](https://github.com/rubygems/rubygems/pull/5761)
|
|
31
|
+
|
|
32
|
+
## Bug fixes:
|
|
33
|
+
|
|
34
|
+
- Fix regression where yanked gems are now unintentionally updated when other gems are unlocked [#5812](https://github.com/rubygems/rubygems/pull/5812)
|
|
35
|
+
- Automatically remove "ruby" from lockfile if incomplete [#5807](https://github.com/rubygems/rubygems/pull/5807)
|
|
36
|
+
- Fix `bundle outdated --strict` showing too many outdated gems [#5798](https://github.com/rubygems/rubygems/pull/5798)
|
|
37
|
+
- Don't discard candidates matching Ruby metadata [#5784](https://github.com/rubygems/rubygems/pull/5784)
|
|
38
|
+
- Fix `bundle outdated` crash in debug mode [#5796](https://github.com/rubygems/rubygems/pull/5796)
|
|
39
|
+
- Fix `ruby` DSL requirement matching for head and prerelease rubies [#5766](https://github.com/rubygems/rubygems/pull/5766)
|
|
40
|
+
|
|
41
|
+
## Documentation:
|
|
42
|
+
|
|
43
|
+
- Update Bundler support policies to match what we do these days [#5813](https://github.com/rubygems/rubygems/pull/5813)
|
|
44
|
+
- Fix arguments for bundle-config(1) docs [#5804](https://github.com/rubygems/rubygems/pull/5804)
|
|
45
|
+
- Improve `bundle platform` man page [#5788](https://github.com/rubygems/rubygems/pull/5788)
|
|
46
|
+
- Remove `bundle cache` from deprecated commands list, and consistently link to `bundle cache` in man pages [#5783](https://github.com/rubygems/rubygems/pull/5783)
|
|
47
|
+
- Add package/pack aliases to man pages for cache [#5785](https://github.com/rubygems/rubygems/pull/5785)
|
|
48
|
+
- Add deprecation notice of bundle console [#5775](https://github.com/rubygems/rubygems/pull/5775)
|
|
49
|
+
|
|
50
|
+
# 2.3.19 (July 27, 2022)
|
|
51
|
+
|
|
52
|
+
## Enhancements:
|
|
53
|
+
|
|
54
|
+
- Add `Bundler.settings[:only]` to install gems of the specified groups [#5759](https://github.com/rubygems/rubygems/pull/5759)
|
|
55
|
+
- Add `ignore_funding_requests` config flag [#5767](https://github.com/rubygems/rubygems/pull/5767)
|
|
56
|
+
- Prevent random crash when autoloading `Pathname` [#5769](https://github.com/rubygems/rubygems/pull/5769)
|
|
57
|
+
- Don't corrupt lockfile when user moves a gem that's already in the lockfile to an incorrect source by mistake [#5070](https://github.com/rubygems/rubygems/pull/5070)
|
|
58
|
+
- Reconcile error/warning message for multiple global sources with documentation [#5741](https://github.com/rubygems/rubygems/pull/5741)
|
|
59
|
+
- Improve error message when gems cannot be found to include the source for each gem [#5729](https://github.com/rubygems/rubygems/pull/5729)
|
|
60
|
+
|
|
61
|
+
## Bug fixes:
|
|
62
|
+
|
|
63
|
+
- Fix yet another TruffleRuby platform selection regression [#5746](https://github.com/rubygems/rubygems/pull/5746)
|
|
64
|
+
- Show a proper error if extension dir is not writable [#5726](https://github.com/rubygems/rubygems/pull/5726)
|
|
65
|
+
|
|
66
|
+
## Performance:
|
|
67
|
+
|
|
68
|
+
- Lazily check incomplete lockfile to improve performance [#5546](https://github.com/rubygems/rubygems/pull/5546)
|
|
69
|
+
|
|
70
|
+
## Documentation:
|
|
71
|
+
|
|
72
|
+
- Add deprecation notice of bundle inject [#5776](https://github.com/rubygems/rubygems/pull/5776)
|
|
73
|
+
- Add deprecation notice of `bundle viz` to man pages [#5765](https://github.com/rubygems/rubygems/pull/5765)
|
|
74
|
+
- Update command example in `bundle exec` man page [#5754](https://github.com/rubygems/rubygems/pull/5754)
|
|
75
|
+
- Remove bundle show from obsolete commands [#5753](https://github.com/rubygems/rubygems/pull/5753)
|
|
76
|
+
- Improve global source(s) documentation [#5732](https://github.com/rubygems/rubygems/pull/5732)
|
|
77
|
+
- Use https protocol for URLs for config mirror in bundler man [#5722](https://github.com/rubygems/rubygems/pull/5722)
|
|
78
|
+
|
|
1
79
|
# 2.3.18 (July 14, 2022)
|
|
2
80
|
|
|
3
81
|
## Enhancements:
|
|
@@ -4,8 +4,8 @@ module Bundler
|
|
|
4
4
|
# Represents metadata from when the Bundler gem was built.
|
|
5
5
|
module BuildMetadata
|
|
6
6
|
# begin ivars
|
|
7
|
-
@built_at = "2022-
|
|
8
|
-
@git_commit_sha = "
|
|
7
|
+
@built_at = "2022-08-24".freeze
|
|
8
|
+
@git_commit_sha = "d54be5fdd8".freeze
|
|
9
9
|
@release = true
|
|
10
10
|
# end ivars
|
|
11
11
|
|
data/lib/bundler/cli/common.rb
CHANGED
data/lib/bundler/cli/install.rb
CHANGED
|
@@ -147,8 +147,11 @@ module Bundler
|
|
|
147
147
|
def normalize_settings
|
|
148
148
|
Bundler.settings.set_command_option :path, nil if options[:system]
|
|
149
149
|
Bundler.settings.set_command_option_if_given :path, options[:path]
|
|
150
|
-
|
|
151
|
-
|
|
150
|
+
|
|
151
|
+
if options["standalone"] && Bundler.settings[:path].nil? && !options["local"]
|
|
152
|
+
Bundler.settings.temporary(:path_relative_to_cwd => false) do
|
|
153
|
+
Bundler.settings.set_command_option :path, "bundle"
|
|
154
|
+
end
|
|
152
155
|
end
|
|
153
156
|
|
|
154
157
|
bin_option = options["binstubs"]
|
data/lib/bundler/cli/outdated.rb
CHANGED
|
@@ -46,7 +46,7 @@ module Bundler
|
|
|
46
46
|
|
|
47
47
|
Bundler::CLI::Common.configure_gem_version_promoter(
|
|
48
48
|
Bundler.definition,
|
|
49
|
-
options
|
|
49
|
+
options.merge(:strict => @strict)
|
|
50
50
|
)
|
|
51
51
|
|
|
52
52
|
definition_resolution = proc do
|
|
@@ -129,6 +129,12 @@ module Bundler
|
|
|
129
129
|
|
|
130
130
|
private
|
|
131
131
|
|
|
132
|
+
def loaded_from_for(spec)
|
|
133
|
+
return unless spec.respond_to?(:loaded_from)
|
|
134
|
+
|
|
135
|
+
spec.loaded_from
|
|
136
|
+
end
|
|
137
|
+
|
|
132
138
|
def groups_text(group_text, groups)
|
|
133
139
|
"#{group_text}#{groups.split(",").size > 1 ? "s" : ""} \"#{groups}\""
|
|
134
140
|
end
|
|
@@ -184,7 +190,10 @@ module Bundler
|
|
|
184
190
|
|
|
185
191
|
def print_gem(current_spec, active_spec, dependency, groups)
|
|
186
192
|
spec_version = "#{active_spec.version}#{active_spec.git_version}"
|
|
187
|
-
|
|
193
|
+
if Bundler.ui.debug?
|
|
194
|
+
loaded_from = loaded_from_for(active_spec)
|
|
195
|
+
spec_version += " (from #{loaded_from})" if loaded_from
|
|
196
|
+
end
|
|
188
197
|
current_version = "#{current_spec.version}#{current_spec.git_version}"
|
|
189
198
|
|
|
190
199
|
if dependency && dependency.specific?
|
|
@@ -211,7 +220,7 @@ module Bundler
|
|
|
211
220
|
dependency = dependency.requirement if dependency
|
|
212
221
|
|
|
213
222
|
ret_val = [active_spec.name, current_version, spec_version, dependency.to_s, groups.to_s]
|
|
214
|
-
ret_val << active_spec.
|
|
223
|
+
ret_val << loaded_from_for(active_spec).to_s if Bundler.ui.debug?
|
|
215
224
|
ret_val
|
|
216
225
|
end
|
|
217
226
|
|
data/lib/bundler/cli/platform.rb
CHANGED
|
@@ -9,7 +9,7 @@ module Bundler
|
|
|
9
9
|
|
|
10
10
|
def run
|
|
11
11
|
platforms, ruby_version = Bundler.ui.silence do
|
|
12
|
-
locked_ruby_version = Bundler.locked_gems && Bundler.locked_gems.ruby_version
|
|
12
|
+
locked_ruby_version = Bundler.locked_gems && Bundler.locked_gems.ruby_version&.gsub(/p\d+\Z/, "")
|
|
13
13
|
gemfile_ruby_version = Bundler.definition.ruby_version && Bundler.definition.ruby_version.single_version_string
|
|
14
14
|
[Bundler.definition.platforms.map {|p| "* #{p}" },
|
|
15
15
|
locked_ruby_version || gemfile_ruby_version]
|
data/lib/bundler/cli.rb
CHANGED
|
@@ -218,6 +218,8 @@ module Bundler
|
|
|
218
218
|
"Specify the number of jobs to run in parallel"
|
|
219
219
|
method_option "local", :type => :boolean, :banner =>
|
|
220
220
|
"Do not attempt to fetch gems remotely and use the gem cache instead"
|
|
221
|
+
method_option "prefer-local", :type => :boolean, :banner =>
|
|
222
|
+
"Only attempt to fetch gems remotely if not present locally, even if newer versions are available remotely"
|
|
221
223
|
method_option "no-cache", :type => :boolean, :banner =>
|
|
222
224
|
"Don't update the existing gem cache."
|
|
223
225
|
method_option "redownload", :type => :boolean, :aliases => "--force", :banner =>
|
|
@@ -236,7 +238,7 @@ module Bundler
|
|
|
236
238
|
"Install to the system location ($BUNDLE_PATH or $GEM_HOME) even if the bundle was previously installed somewhere else for this application"
|
|
237
239
|
method_option "trust-policy", :alias => "P", :type => :string, :banner =>
|
|
238
240
|
"Gem trust policy (like gem install -P). Must be one of " +
|
|
239
|
-
|
|
241
|
+
Bundler.rubygems.security_policy_keys.join("|")
|
|
240
242
|
method_option "without", :type => :array, :banner =>
|
|
241
243
|
"Exclude gems that are part of the specified named group."
|
|
242
244
|
method_option "with", :type => :array, :banner =>
|
|
@@ -399,9 +401,9 @@ module Bundler
|
|
|
399
401
|
"Do not attempt to fetch gems remotely and use the gem cache instead"
|
|
400
402
|
method_option "pre", :type => :boolean, :banner => "Check for newer pre-release gems"
|
|
401
403
|
method_option "source", :type => :array, :banner => "Check against a specific source"
|
|
402
|
-
method_option "filter-strict", :type => :boolean, :banner =>
|
|
404
|
+
method_option "filter-strict", :type => :boolean, :aliases => "--strict", :banner =>
|
|
403
405
|
"Only list newer versions allowed by your Gemfile requirements"
|
|
404
|
-
method_option "strict", :type => :boolean, :
|
|
406
|
+
method_option "update-strict", :type => :boolean, :banner =>
|
|
405
407
|
"Strict conservative resolution, do not allow any gem to be updated past latest --patch | --minor | --major"
|
|
406
408
|
method_option "minor", :type => :boolean, :banner => "Prefer updating only to next minor version"
|
|
407
409
|
method_option "major", :type => :boolean, :banner => "Prefer updating to next major version (default)"
|
data/lib/bundler/definition.rb
CHANGED
|
@@ -70,6 +70,7 @@ module Bundler
|
|
|
70
70
|
@unlock = unlock
|
|
71
71
|
@optional_groups = optional_groups
|
|
72
72
|
@remote = false
|
|
73
|
+
@prefer_local = false
|
|
73
74
|
@specs = nil
|
|
74
75
|
@ruby_version = ruby_version
|
|
75
76
|
@gemfiles = gemfiles
|
|
@@ -138,14 +139,12 @@ module Bundler
|
|
|
138
139
|
@unlock[:gems] ||= @dependencies.map(&:name)
|
|
139
140
|
else
|
|
140
141
|
eager_unlock = expand_dependencies(@unlock[:gems] || [], true)
|
|
141
|
-
@unlock[:gems] = @locked_specs.for(eager_unlock, false,
|
|
142
|
+
@unlock[:gems] = @locked_specs.for(eager_unlock, false, platforms).map(&:name)
|
|
142
143
|
end
|
|
143
144
|
|
|
144
145
|
@dependency_changes = converge_dependencies
|
|
145
146
|
@local_changes = converge_locals
|
|
146
147
|
|
|
147
|
-
@locked_specs_incomplete_for_platform = !@locked_specs.for(requested_dependencies & expand_dependencies(locked_dependencies), true, true)
|
|
148
|
-
|
|
149
148
|
@requires = compute_requires
|
|
150
149
|
end
|
|
151
150
|
|
|
@@ -170,6 +169,13 @@ module Bundler
|
|
|
170
169
|
resolve
|
|
171
170
|
end
|
|
172
171
|
|
|
172
|
+
def resolve_prefering_local!
|
|
173
|
+
@prefer_local = true
|
|
174
|
+
@remote = true
|
|
175
|
+
sources.remote!
|
|
176
|
+
resolve
|
|
177
|
+
end
|
|
178
|
+
|
|
173
179
|
def resolve_with_cache!
|
|
174
180
|
sources.cached!
|
|
175
181
|
resolve
|
|
@@ -210,6 +216,7 @@ module Bundler
|
|
|
210
216
|
true
|
|
211
217
|
rescue BundlerError => e
|
|
212
218
|
@resolve = nil
|
|
219
|
+
@resolver = nil
|
|
213
220
|
@specs = nil
|
|
214
221
|
@gem_version_promoter = nil
|
|
215
222
|
|
|
@@ -279,11 +286,8 @@ module Bundler
|
|
|
279
286
|
end
|
|
280
287
|
end
|
|
281
288
|
else
|
|
282
|
-
last_resolve = converge_locked_specs
|
|
283
|
-
# Run a resolve against the locally available gems
|
|
284
289
|
Bundler.ui.debug("Found changes from the lockfile, re-resolving dependencies because #{change_reason}")
|
|
285
|
-
expanded_dependencies
|
|
286
|
-
Resolver.resolve(expanded_dependencies, source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve, platforms)
|
|
290
|
+
resolver.start(expanded_dependencies)
|
|
287
291
|
end
|
|
288
292
|
end
|
|
289
293
|
|
|
@@ -468,7 +472,7 @@ module Bundler
|
|
|
468
472
|
private :sources
|
|
469
473
|
|
|
470
474
|
def nothing_changed?
|
|
471
|
-
!@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes
|
|
475
|
+
!@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes
|
|
472
476
|
end
|
|
473
477
|
|
|
474
478
|
def unlocking?
|
|
@@ -477,8 +481,22 @@ module Bundler
|
|
|
477
481
|
|
|
478
482
|
private
|
|
479
483
|
|
|
484
|
+
def resolver
|
|
485
|
+
@resolver ||= begin
|
|
486
|
+
last_resolve = converge_locked_specs
|
|
487
|
+
Resolver.new(source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve, platforms)
|
|
488
|
+
end
|
|
489
|
+
end
|
|
490
|
+
|
|
491
|
+
def expanded_dependencies
|
|
492
|
+
@expanded_dependencies ||= begin
|
|
493
|
+
remove_ruby_from_platforms_if_necessary!(dependencies)
|
|
494
|
+
expand_dependencies(dependencies + metadata_dependencies, true)
|
|
495
|
+
end
|
|
496
|
+
end
|
|
497
|
+
|
|
480
498
|
def filter_specs(specs, deps)
|
|
481
|
-
SpecSet.new(specs).for(expand_dependencies(deps, true), false,
|
|
499
|
+
SpecSet.new(specs).for(expand_dependencies(deps, true), false, platforms)
|
|
482
500
|
end
|
|
483
501
|
|
|
484
502
|
def materialize(dependencies)
|
|
@@ -495,14 +513,25 @@ module Bundler
|
|
|
495
513
|
"removed in order to install."
|
|
496
514
|
end
|
|
497
515
|
|
|
498
|
-
|
|
516
|
+
missing_specs_list = missing_specs.group_by(&:source).map do |source, missing_specs_for_source|
|
|
517
|
+
"#{missing_specs_for_source.map(&:full_name).join(", ")} in #{source}"
|
|
518
|
+
end
|
|
519
|
+
|
|
520
|
+
raise GemNotFound, "Could not find #{missing_specs_list.join(" nor ")}"
|
|
499
521
|
end
|
|
500
522
|
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
523
|
+
loop do
|
|
524
|
+
incomplete_specs = specs.incomplete_specs
|
|
525
|
+
break if incomplete_specs.empty?
|
|
526
|
+
|
|
527
|
+
Bundler.ui.debug("The lockfile does not have all gems needed for the current platform though, Bundler will still re-resolve dependencies")
|
|
528
|
+
@resolve = resolver.start(expanded_dependencies, :exclude_specs => incomplete_specs)
|
|
529
|
+
specs = resolve.materialize(dependencies)
|
|
504
530
|
end
|
|
505
531
|
|
|
532
|
+
bundler = sources.metadata_source.specs.search(Gem::Dependency.new("bundler", VERSION)).last
|
|
533
|
+
specs["bundler"] = bundler
|
|
534
|
+
|
|
506
535
|
specs
|
|
507
536
|
end
|
|
508
537
|
|
|
@@ -510,6 +539,19 @@ module Bundler
|
|
|
510
539
|
@remote && sources.non_global_rubygems_sources.all?(&:dependency_api_available?) && !sources.aggregate_global_source?
|
|
511
540
|
end
|
|
512
541
|
|
|
542
|
+
def pin_locally_available_names(source_requirements)
|
|
543
|
+
source_requirements.each_with_object({}) do |(name, original_source), new_source_requirements|
|
|
544
|
+
local_source = original_source.dup
|
|
545
|
+
local_source.local_only!
|
|
546
|
+
|
|
547
|
+
new_source_requirements[name] = if local_source.specs.search(name).any?
|
|
548
|
+
local_source
|
|
549
|
+
else
|
|
550
|
+
original_source
|
|
551
|
+
end
|
|
552
|
+
end
|
|
553
|
+
end
|
|
554
|
+
|
|
513
555
|
def current_ruby_platform_locked?
|
|
514
556
|
return false unless generic_local_platform == Gem::Platform::RUBY
|
|
515
557
|
return false if Bundler.settings[:force_ruby_platform] && !@platforms.include?(Gem::Platform::RUBY)
|
|
@@ -545,7 +587,6 @@ module Bundler
|
|
|
545
587
|
[@new_platform, "you added a new platform to your gemfile"],
|
|
546
588
|
[@path_changes, "the gemspecs for path gems changed"],
|
|
547
589
|
[@local_changes, "the gemspecs for git local gems changed"],
|
|
548
|
-
[@locked_specs_incomplete_for_platform, "the lockfile does not have all gems needed for the current platform"],
|
|
549
590
|
].select(&:first).map(&:last).join(", ")
|
|
550
591
|
end
|
|
551
592
|
|
|
@@ -678,7 +719,9 @@ module Bundler
|
|
|
678
719
|
# commonly happen if the Gemfile has changed since the lockfile was last
|
|
679
720
|
# generated
|
|
680
721
|
def converge_locked_specs
|
|
681
|
-
|
|
722
|
+
converged = converge_specs(@locked_specs)
|
|
723
|
+
|
|
724
|
+
resolve = SpecSet.new(converged.reject {|s| @unlock[:gems].include?(s.name) })
|
|
682
725
|
|
|
683
726
|
diff = nil
|
|
684
727
|
|
|
@@ -702,16 +745,24 @@ module Bundler
|
|
|
702
745
|
specs[dep].any? {|s| s.satisfies?(dep) && (!dep.source || s.source.include?(dep.source)) }
|
|
703
746
|
end
|
|
704
747
|
|
|
748
|
+
@specs_that_changed_sources = []
|
|
749
|
+
|
|
705
750
|
specs.each do |s|
|
|
706
|
-
# Replace the locked dependency's source with the equivalent source from the Gemfile
|
|
707
751
|
dep = @dependencies.find {|d| s.satisfies?(d) }
|
|
708
752
|
|
|
709
|
-
s
|
|
753
|
+
# Replace the locked dependency's source with the equivalent source from the Gemfile
|
|
754
|
+
s.source = if dep && dep.source
|
|
755
|
+
gemfile_source = dep.source
|
|
756
|
+
lockfile_source = s.source
|
|
710
757
|
|
|
711
|
-
|
|
758
|
+
@specs_that_changed_sources << s if gemfile_source != lockfile_source
|
|
759
|
+
|
|
760
|
+
gemfile_source
|
|
761
|
+
else
|
|
762
|
+
sources.get_with_fallback(s.source)
|
|
763
|
+
end
|
|
712
764
|
|
|
713
|
-
|
|
714
|
-
# then we unlock it.
|
|
765
|
+
next if @unlock[:sources].include?(s.source.name)
|
|
715
766
|
|
|
716
767
|
# Path sources have special logic
|
|
717
768
|
if s.source.instance_of?(Source::Path) || s.source.instance_of?(Source::Gemspec)
|
|
@@ -721,7 +772,7 @@ module Bundler
|
|
|
721
772
|
# if we won't need the source (according to the lockfile),
|
|
722
773
|
# don't error if the path/git source isn't available
|
|
723
774
|
next if specs.
|
|
724
|
-
for(requested_dependencies, false
|
|
775
|
+
for(requested_dependencies, false).
|
|
725
776
|
none? {|locked_spec| locked_spec.source == s.source }
|
|
726
777
|
|
|
727
778
|
raise
|
|
@@ -743,12 +794,12 @@ module Bundler
|
|
|
743
794
|
end
|
|
744
795
|
end
|
|
745
796
|
|
|
746
|
-
|
|
797
|
+
filter_specs(converged, deps)
|
|
747
798
|
end
|
|
748
799
|
|
|
749
800
|
def metadata_dependencies
|
|
750
801
|
@metadata_dependencies ||= [
|
|
751
|
-
Dependency.new("Ruby\0",
|
|
802
|
+
Dependency.new("Ruby\0", Gem.ruby_version),
|
|
752
803
|
Dependency.new("RubyGems\0", Gem::VERSION),
|
|
753
804
|
]
|
|
754
805
|
end
|
|
@@ -775,7 +826,9 @@ module Bundler
|
|
|
775
826
|
# specs will be available later when the resolver knows where to
|
|
776
827
|
# look for that gemspec (or its dependencies)
|
|
777
828
|
source_requirements = if precompute_source_requirements_for_indirect_dependencies?
|
|
778
|
-
|
|
829
|
+
all_requirements = source_map.all_requirements
|
|
830
|
+
all_requirements = pin_locally_available_names(all_requirements) if @prefer_local
|
|
831
|
+
{ :default => sources.default_source }.merge(all_requirements)
|
|
779
832
|
else
|
|
780
833
|
{ :default => Source::RubygemsAggregate.new(sources, source_map) }.merge(source_map.direct_requirements)
|
|
781
834
|
end
|
|
@@ -785,11 +838,22 @@ module Bundler
|
|
|
785
838
|
end
|
|
786
839
|
source_requirements[:default_bundler] = source_requirements["bundler"] || sources.default_source
|
|
787
840
|
source_requirements["bundler"] = sources.metadata_source # needs to come last to override
|
|
841
|
+
verify_changed_sources!
|
|
788
842
|
source_requirements
|
|
789
843
|
end
|
|
790
844
|
|
|
845
|
+
def verify_changed_sources!
|
|
846
|
+
@specs_that_changed_sources.each do |s|
|
|
847
|
+
if s.source.specs.search(s.name).empty?
|
|
848
|
+
raise GemNotFound, "Could not find gem '#{s.name}' in #{s.source}"
|
|
849
|
+
end
|
|
850
|
+
end
|
|
851
|
+
end
|
|
852
|
+
|
|
791
853
|
def requested_groups
|
|
792
|
-
groups - Bundler.settings[:without] - @optional_groups + Bundler.settings[:with]
|
|
854
|
+
values = groups - Bundler.settings[:without] - @optional_groups + Bundler.settings[:with]
|
|
855
|
+
values &= Bundler.settings[:only] unless Bundler.settings[:only].empty?
|
|
856
|
+
values
|
|
793
857
|
end
|
|
794
858
|
|
|
795
859
|
def lockfiles_equal?(current, proposed, preserve_unknown_sections)
|
|
@@ -819,10 +883,20 @@ module Bundler
|
|
|
819
883
|
def additional_base_requirements_for_resolve
|
|
820
884
|
return [] unless @locked_gems && unlocking? && !sources.expired_sources?(@locked_gems.sources)
|
|
821
885
|
converge_specs(@originally_locked_specs).map do |locked_spec|
|
|
822
|
-
name
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
886
|
+
Dependency.new(locked_spec.name, ">= #{locked_spec.version}")
|
|
887
|
+
end.uniq
|
|
888
|
+
end
|
|
889
|
+
|
|
890
|
+
def remove_ruby_from_platforms_if_necessary!(dependencies)
|
|
891
|
+
return if Bundler.frozen_bundle? ||
|
|
892
|
+
Bundler.local_platform == Gem::Platform::RUBY ||
|
|
893
|
+
!platforms.include?(Gem::Platform::RUBY) ||
|
|
894
|
+
(@new_platform && platforms.last == Gem::Platform::RUBY) ||
|
|
895
|
+
!@originally_locked_specs.incomplete_ruby_specs?(expand_dependencies(dependencies))
|
|
896
|
+
|
|
897
|
+
remove_platform(Gem::Platform::RUBY)
|
|
898
|
+
add_current_platform
|
|
899
|
+
resolver.platforms = @platforms
|
|
826
900
|
end
|
|
827
901
|
|
|
828
902
|
def source_map
|
data/lib/bundler/dsl.rb
CHANGED
|
@@ -465,12 +465,12 @@ module Bundler
|
|
|
465
465
|
|
|
466
466
|
def multiple_global_source_warning
|
|
467
467
|
if Bundler.feature_flag.bundler_3_mode?
|
|
468
|
-
msg = "This Gemfile contains multiple
|
|
468
|
+
msg = "This Gemfile contains multiple global sources. " \
|
|
469
469
|
"Each source after the first must include a block to indicate which gems " \
|
|
470
470
|
"should come from that source"
|
|
471
471
|
raise GemfileEvalError, msg
|
|
472
472
|
else
|
|
473
|
-
Bundler::SharedHelpers.major_deprecation 2, "Your Gemfile contains multiple
|
|
473
|
+
Bundler::SharedHelpers.major_deprecation 2, "Your Gemfile contains multiple global sources. " \
|
|
474
474
|
"Using `source` more than once without a block is a security risk, and " \
|
|
475
475
|
"may result in installing unexpected gems. To resolve this warning, use " \
|
|
476
476
|
"a block to indicate which gems should come from the secondary source."
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module Bundler
|
|
4
4
|
# used for Creating Specifications from the Gemcutter Endpoint
|
|
5
5
|
class EndpointSpecification < Gem::Specification
|
|
6
|
-
include
|
|
6
|
+
include MatchRemoteMetadata
|
|
7
7
|
|
|
8
8
|
attr_reader :name, :version, :platform, :checksum
|
|
9
9
|
attr_accessor :source, :remote, :dependencies
|
|
@@ -22,17 +22,6 @@ module Bundler
|
|
|
22
22
|
parse_metadata(metadata)
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
def required_ruby_version
|
|
26
|
-
@required_ruby_version ||= _remote_specification.required_ruby_version
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# A fallback is included because the original version of the specification
|
|
30
|
-
# API didn't include that field, so some marshalled specs in the index have it
|
|
31
|
-
# set to +nil+.
|
|
32
|
-
def required_rubygems_version
|
|
33
|
-
@required_rubygems_version ||= _remote_specification.required_rubygems_version || Gem::Requirement.default
|
|
34
|
-
end
|
|
35
|
-
|
|
36
25
|
def fetch_platform
|
|
37
26
|
@platform
|
|
38
27
|
end
|
data/lib/bundler/fetcher.rb
CHANGED
|
@@ -240,8 +240,8 @@ module Bundler
|
|
|
240
240
|
def connection
|
|
241
241
|
@connection ||= begin
|
|
242
242
|
needs_ssl = remote_uri.scheme == "https" ||
|
|
243
|
-
|
|
244
|
-
|
|
243
|
+
Bundler.settings[:ssl_verify_mode] ||
|
|
244
|
+
Bundler.settings[:ssl_client_cert]
|
|
245
245
|
raise SSLError if needs_ssl && !defined?(OpenSSL::SSL)
|
|
246
246
|
|
|
247
247
|
con = PersistentHTTP.new :name => "bundler", :proxy => :ENV
|
|
@@ -256,8 +256,8 @@ module Bundler
|
|
|
256
256
|
end
|
|
257
257
|
|
|
258
258
|
ssl_client_cert = Bundler.settings[:ssl_client_cert] ||
|
|
259
|
-
|
|
260
|
-
|
|
259
|
+
(Gem.configuration.ssl_client_cert if
|
|
260
|
+
Gem.configuration.respond_to?(:ssl_client_cert))
|
|
261
261
|
if ssl_client_cert
|
|
262
262
|
pem = File.read(ssl_client_cert)
|
|
263
263
|
con.cert = OpenSSL::X509::Certificate.new(pem)
|
|
@@ -288,8 +288,8 @@ module Bundler
|
|
|
288
288
|
def bundler_cert_store
|
|
289
289
|
store = OpenSSL::X509::Store.new
|
|
290
290
|
ssl_ca_cert = Bundler.settings[:ssl_ca_cert] ||
|
|
291
|
-
|
|
292
|
-
|
|
291
|
+
(Gem.configuration.ssl_ca_cert if
|
|
292
|
+
Gem.configuration.respond_to?(:ssl_ca_cert))
|
|
293
293
|
if ssl_ca_cert
|
|
294
294
|
if File.directory? ssl_ca_cert
|
|
295
295
|
store.add_path ssl_ca_cert
|
data/lib/bundler/gem_helpers.rb
CHANGED
|
@@ -44,6 +44,12 @@ module Bundler
|
|
|
44
44
|
|
|
45
45
|
def select_best_platform_match(specs, platform)
|
|
46
46
|
matching = specs.select {|spec| spec.match_platform(platform) }
|
|
47
|
+
|
|
48
|
+
sort_best_platform_match(matching, platform)
|
|
49
|
+
end
|
|
50
|
+
module_function :select_best_platform_match
|
|
51
|
+
|
|
52
|
+
def sort_best_platform_match(matching, platform)
|
|
47
53
|
exact = matching.select {|spec| spec.platform == platform }
|
|
48
54
|
return exact if exact.any?
|
|
49
55
|
|
|
@@ -52,7 +58,7 @@ module Bundler
|
|
|
52
58
|
|
|
53
59
|
sorted_matching.take_while {|spec| same_specificity(platform, spec, exemplary_spec) && same_deps(spec, exemplary_spec) }
|
|
54
60
|
end
|
|
55
|
-
module_function :
|
|
61
|
+
module_function :sort_best_platform_match
|
|
56
62
|
|
|
57
63
|
class PlatformMatch
|
|
58
64
|
def self.specificity_score(spec_platform, user_platform)
|
data/lib/bundler/index.rb
CHANGED
|
@@ -56,17 +56,17 @@ module Bundler
|
|
|
56
56
|
|
|
57
57
|
# Search this index's specs, and any source indexes that this index knows
|
|
58
58
|
# about, returning all of the results.
|
|
59
|
-
def search(query
|
|
60
|
-
sort_specs(unsorted_search(query
|
|
59
|
+
def search(query)
|
|
60
|
+
sort_specs(unsorted_search(query))
|
|
61
61
|
end
|
|
62
62
|
|
|
63
|
-
def unsorted_search(query
|
|
64
|
-
results = local_search(query
|
|
63
|
+
def unsorted_search(query)
|
|
64
|
+
results = local_search(query)
|
|
65
65
|
|
|
66
66
|
seen = results.map(&:full_name).uniq unless @sources.empty?
|
|
67
67
|
|
|
68
68
|
@sources.each do |source|
|
|
69
|
-
source.unsorted_search(query
|
|
69
|
+
source.unsorted_search(query).each do |spec|
|
|
70
70
|
next if seen.include?(spec.full_name)
|
|
71
71
|
|
|
72
72
|
seen << spec.full_name
|
|
@@ -89,12 +89,12 @@ module Bundler
|
|
|
89
89
|
self.class.sort_specs(specs)
|
|
90
90
|
end
|
|
91
91
|
|
|
92
|
-
def local_search(query
|
|
92
|
+
def local_search(query)
|
|
93
93
|
case query
|
|
94
94
|
when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification then search_by_spec(query)
|
|
95
95
|
when String then specs_by_name(query)
|
|
96
|
-
when Gem::Dependency then search_by_dependency(query
|
|
97
|
-
when DepProxy then search_by_dependency(query.dep
|
|
96
|
+
when Gem::Dependency then search_by_dependency(query)
|
|
97
|
+
when DepProxy then search_by_dependency(query.dep)
|
|
98
98
|
else
|
|
99
99
|
raise "You can't search for a #{query.inspect}."
|
|
100
100
|
end
|
|
@@ -185,11 +185,9 @@ module Bundler
|
|
|
185
185
|
@specs[name].values
|
|
186
186
|
end
|
|
187
187
|
|
|
188
|
-
def search_by_dependency(dependency
|
|
189
|
-
@cache[
|
|
190
|
-
@cache[base || false][dependency] ||= begin
|
|
188
|
+
def search_by_dependency(dependency)
|
|
189
|
+
@cache[dependency] ||= begin
|
|
191
190
|
specs = specs_by_name(dependency.name)
|
|
192
|
-
specs += base if base
|
|
193
191
|
found = specs.select do |spec|
|
|
194
192
|
next true if spec.source.is_a?(Source::Gemspec)
|
|
195
193
|
dependency.matches_spec?(spec)
|
data/lib/bundler/inline.rb
CHANGED
|
@@ -54,7 +54,7 @@ def gemfile(install = false, options = {}, &gemfile)
|
|
|
54
54
|
|
|
55
55
|
Bundler.ui = install ? ui : Bundler::UI::Silent.new
|
|
56
56
|
if install || definition.missing_specs?
|
|
57
|
-
Bundler.settings.temporary(:inline => true) do
|
|
57
|
+
Bundler.settings.temporary(:inline => true, :no_install => false) do
|
|
58
58
|
installer = Bundler::Installer.install(Bundler.root, definition, :system => true)
|
|
59
59
|
installer.post_install_messages.each do |name, message|
|
|
60
60
|
Bundler.ui.info "Post-install message from #{name}:\n#{message}"
|