bundler 2.4.3 → 2.4.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +51 -0
- data/lib/bundler/build_metadata.rb +2 -2
- data/lib/bundler/cli/binstubs.rb +5 -1
- data/lib/bundler/cli/init.rb +2 -2
- data/lib/bundler/cli.rb +1 -0
- data/lib/bundler/current_ruby.rb +2 -0
- data/lib/bundler/definition.rb +36 -35
- data/lib/bundler/dependency.rb +1 -1
- data/lib/bundler/inline.rb +6 -8
- data/lib/bundler/installer/parallel_installer.rb +16 -2
- data/lib/bundler/installer/standalone.rb +12 -8
- data/lib/bundler/installer.rb +3 -7
- data/lib/bundler/lazy_specification.rb +8 -3
- 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 +1 -1
- 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 +1 -1
- data/lib/bundler/man/bundle-console.1 +1 -1
- data/lib/bundler/man/bundle-doctor.1 +1 -1
- data/lib/bundler/man/bundle-exec.1 +5 -5
- data/lib/bundler/man/bundle-exec.1.ronn +5 -5
- data/lib/bundler/man/bundle-gem.1 +1 -1
- data/lib/bundler/man/bundle-help.1 +1 -1
- data/lib/bundler/man/bundle-info.1 +1 -1
- data/lib/bundler/man/bundle-init.1 +5 -1
- data/lib/bundler/man/bundle-init.1.ronn +2 -0
- data/lib/bundler/man/bundle-inject.1 +1 -1
- data/lib/bundler/man/bundle-install.1 +1 -1
- 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 +1 -1
- data/lib/bundler/man/bundle-plugin.1 +1 -1
- 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-version.1 +1 -1
- data/lib/bundler/man/bundle-viz.1 +1 -1
- data/lib/bundler/man/bundle.1 +1 -1
- data/lib/bundler/man/gemfile.5 +1 -1
- data/lib/bundler/resolver/base.rb +38 -7
- data/lib/bundler/resolver/candidate.rb +2 -5
- data/lib/bundler/resolver/package.rb +11 -2
- data/lib/bundler/resolver.rb +61 -43
- data/lib/bundler/rubygems_integration.rb +8 -4
- data/lib/bundler/shared_helpers.rb +1 -1
- data/lib/bundler/source/git/git_proxy.rb +6 -4
- data/lib/bundler/source/rubygems.rb +1 -1
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +1 -1
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +6 -2
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +8 -1
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +5 -4
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +4 -2
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +4 -1
- data/lib/bundler/version.rb +1 -1
- metadata +3 -4
- data/lib/bundler/templates/gems.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a65f84ced002f9c1ab71db372d85d37f9578c02a5dc1e454ca62c895e7a4d247
|
4
|
+
data.tar.gz: f5e1e1f51f2eaa82029c2129a4c703c75a6e8950370be93cc7bd802d89155bda
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 458454313b85996243c7c77ba6ad6fba40ec2185bf657def24c8bce61595c2bd86f973f465dfcebec1ef01130c5c784dc820710437f62de9701bb6317236b3fb
|
7
|
+
data.tar.gz: e35d6b4c930214928c4480df520ef5b342107d1d25da2dbc9596591eab94e115b53c2c4432ff5513630f3d60d18c8935b415bdb2b2bbd60e40d04228b8e2d292
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,54 @@
|
|
1
|
+
# 2.4.7 (February 15, 2023)
|
2
|
+
|
3
|
+
## Enhancements:
|
4
|
+
|
5
|
+
- Add `--gemfile` flag to `bundle init` to configure gemfile name to generate [#6046](https://github.com/rubygems/rubygems/pull/6046)
|
6
|
+
- Improve solve failure explanations by using better wording [#6366](https://github.com/rubygems/rubygems/pull/6366)
|
7
|
+
- Restore better error message when locked ref does not exist [#6356](https://github.com/rubygems/rubygems/pull/6356)
|
8
|
+
- Avoid crashing when installing from a corrupted lockfile [#6355](https://github.com/rubygems/rubygems/pull/6355)
|
9
|
+
- Improve wording of unmet dependencies warning [#6357](https://github.com/rubygems/rubygems/pull/6357)
|
10
|
+
- Add Ruby 3.2 and 3.3 platforms to Gemfile DSL [#6346](https://github.com/rubygems/rubygems/pull/6346)
|
11
|
+
|
12
|
+
## Bug fixes:
|
13
|
+
|
14
|
+
- Fix crash in pub grub involving empty ranges [#6365](https://github.com/rubygems/rubygems/pull/6365)
|
15
|
+
- Make gemspec file generated by `bundle gem` properly exclude itself from packaged gem [#6339](https://github.com/rubygems/rubygems/pull/6339)
|
16
|
+
- Preserve relative path sources in standalone setup [#6327](https://github.com/rubygems/rubygems/pull/6327)
|
17
|
+
|
18
|
+
# 2.4.6 (January 31, 2023)
|
19
|
+
|
20
|
+
## Enhancements:
|
21
|
+
|
22
|
+
- Don't warn on `bundle binstubs --standalone --all` [#6312](https://github.com/rubygems/rubygems/pull/6312)
|
23
|
+
|
24
|
+
## Bug fixes:
|
25
|
+
|
26
|
+
- Don't undo require decorations made by other gems [#6308](https://github.com/rubygems/rubygems/pull/6308)
|
27
|
+
- Fix `bundler/inline` not properly installing gems with extensions when used more than once [#6306](https://github.com/rubygems/rubygems/pull/6306)
|
28
|
+
- Fix `bundler/inline` not skipping installation when gems already there, when used more than once [#6305](https://github.com/rubygems/rubygems/pull/6305)
|
29
|
+
|
30
|
+
# 2.4.5 (January 21, 2023)
|
31
|
+
|
32
|
+
## Bug fixes:
|
33
|
+
|
34
|
+
- Fix `bundler/inline` not resolving properly if gems not preinstalled [#6282](https://github.com/rubygems/rubygems/pull/6282)
|
35
|
+
- Fix packages for external platforms being introduced in lockfile when Bundler retries resolution [#6285](https://github.com/rubygems/rubygems/pull/6285)
|
36
|
+
|
37
|
+
## Documentation:
|
38
|
+
|
39
|
+
- Update bundle-exec man page to not use deprecated `Bundler.with_clean_env` [#6284](https://github.com/rubygems/rubygems/pull/6284)
|
40
|
+
|
41
|
+
# 2.4.4 (January 16, 2023)
|
42
|
+
|
43
|
+
## Bug fixes:
|
44
|
+
|
45
|
+
- Fix platform specific gems removed from the lockfile [#6266](https://github.com/rubygems/rubygems/pull/6266)
|
46
|
+
- Properly handle incompatibilities on platform specific gems [#6270](https://github.com/rubygems/rubygems/pull/6270)
|
47
|
+
- Optimistically exclude prereleases from initial resolution [#6246](https://github.com/rubygems/rubygems/pull/6246)
|
48
|
+
- Fix another case of not properly falling back to ruby variant when materializing [#6261](https://github.com/rubygems/rubygems/pull/6261)
|
49
|
+
- Skip setting `BUNDLER_SETUP` on Ruby 2.6 [#6252](https://github.com/rubygems/rubygems/pull/6252)
|
50
|
+
- Let resolver deal with legacy gems with equivalent version and different dependencies [#6219](https://github.com/rubygems/rubygems/pull/6219)
|
51
|
+
|
1
52
|
# 2.4.3 (January 6, 2023)
|
2
53
|
|
3
54
|
## 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 = "2023-
|
8
|
-
@git_commit_sha = "
|
7
|
+
@built_at = "2023-02-15".freeze
|
8
|
+
@git_commit_sha = "5d717a27e0".freeze
|
9
9
|
@release = true
|
10
10
|
# end ivars
|
11
11
|
|
data/lib/bundler/cli/binstubs.rb
CHANGED
@@ -40,7 +40,11 @@ module Bundler
|
|
40
40
|
end
|
41
41
|
|
42
42
|
if options[:standalone]
|
43
|
-
|
43
|
+
if gem_name == "bundler"
|
44
|
+
Bundler.ui.warn("Sorry, Bundler can only be run via RubyGems.") unless options[:all]
|
45
|
+
next
|
46
|
+
end
|
47
|
+
|
44
48
|
Bundler.settings.temporary(:path => (Bundler.settings[:path] || Bundler.root)) do
|
45
49
|
installer.generate_standalone_bundler_executable_stubs(spec, installer_opts)
|
46
50
|
end
|
data/lib/bundler/cli/init.rb
CHANGED
@@ -32,7 +32,7 @@ module Bundler
|
|
32
32
|
file << spec.to_gemfile
|
33
33
|
end
|
34
34
|
else
|
35
|
-
File.open(File.expand_path("../templates
|
35
|
+
File.open(File.expand_path("../templates/Gemfile", __dir__), "r") do |template|
|
36
36
|
File.open(gemfile, "wb") do |destination|
|
37
37
|
IO.copy_stream(template, destination)
|
38
38
|
end
|
@@ -45,7 +45,7 @@ module Bundler
|
|
45
45
|
private
|
46
46
|
|
47
47
|
def gemfile
|
48
|
-
@gemfile ||= Bundler.preferred_gemfile_name
|
48
|
+
@gemfile ||= options[:gemfile] || Bundler.preferred_gemfile_name
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
data/lib/bundler/cli.rb
CHANGED
@@ -156,6 +156,7 @@ module Bundler
|
|
156
156
|
dependency listed in the gemspec file to the newly created Gemfile.
|
157
157
|
D
|
158
158
|
method_option "gemspec", :type => :string, :banner => "Use the specified .gemspec to create the Gemfile"
|
159
|
+
method_option "gemfile", :type => :string, :banner => "Use the specified name for the gemfile instead of 'Gemfile'"
|
159
160
|
def init
|
160
161
|
require_relative "cli/init"
|
161
162
|
Init.new(options.dup).run
|
data/lib/bundler/current_ruby.rb
CHANGED
data/lib/bundler/definition.rb
CHANGED
@@ -159,13 +159,6 @@ module Bundler
|
|
159
159
|
resolve
|
160
160
|
end
|
161
161
|
|
162
|
-
def resolve_prefering_local!
|
163
|
-
@prefer_local = true
|
164
|
-
@remote = true
|
165
|
-
sources.remote!
|
166
|
-
resolve
|
167
|
-
end
|
168
|
-
|
169
162
|
def resolve_with_cache!
|
170
163
|
sources.cached!
|
171
164
|
resolve
|
@@ -177,6 +170,23 @@ module Bundler
|
|
177
170
|
resolve
|
178
171
|
end
|
179
172
|
|
173
|
+
def resolution_mode=(options)
|
174
|
+
if options["local"]
|
175
|
+
@remote = false
|
176
|
+
else
|
177
|
+
@remote = true
|
178
|
+
@prefer_local = options["prefer-local"]
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
def setup_sources_for_resolve
|
183
|
+
if @remote == false
|
184
|
+
sources.cached!
|
185
|
+
else
|
186
|
+
sources.remote!
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
180
190
|
# For given dependency list returns a SpecSet with Gemspec of all the required
|
181
191
|
# dependencies.
|
182
192
|
# 1. The method first resolves the dependencies specified in Gemfile
|
@@ -473,31 +483,19 @@ module Bundler
|
|
473
483
|
private
|
474
484
|
|
475
485
|
def resolver
|
476
|
-
@resolver ||=
|
477
|
-
last_resolve = converge_locked_specs
|
478
|
-
remove_ruby_from_platforms_if_necessary!(current_dependencies)
|
479
|
-
Resolver.new(source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve(last_resolve))
|
480
|
-
end
|
486
|
+
@resolver ||= Resolver.new(resolution_packages, gem_version_promoter)
|
481
487
|
end
|
482
488
|
|
483
489
|
def expanded_dependencies
|
484
|
-
|
490
|
+
dependencies + metadata_dependencies
|
485
491
|
end
|
486
492
|
|
487
493
|
def resolution_packages
|
488
494
|
@resolution_packages ||= begin
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
expanded_dependencies.each do |dep|
|
494
|
-
name = dep.name
|
495
|
-
platforms = dep.gem_platforms(@platforms)
|
496
|
-
|
497
|
-
packages[name] = Resolver::Package.new(name, platforms, @originally_locked_specs, @unlock[:gems], :dependency => dep)
|
498
|
-
end
|
499
|
-
|
500
|
-
packages
|
495
|
+
last_resolve = converge_locked_specs
|
496
|
+
remove_ruby_from_platforms_if_necessary!(current_dependencies)
|
497
|
+
packages = Resolver::Base.new(source_requirements, expanded_dependencies, last_resolve, @platforms, :locked_specs => @originally_locked_specs, :unlock => @unlock[:gems], :prerelease => gem_version_promoter.pre?)
|
498
|
+
additional_base_requirements_for_resolve(packages, last_resolve)
|
501
499
|
end
|
502
500
|
end
|
503
501
|
|
@@ -531,13 +529,15 @@ module Bundler
|
|
531
529
|
break if incomplete_specs.empty?
|
532
530
|
|
533
531
|
Bundler.ui.debug("The lockfile does not have all gems needed for the current platform though, Bundler will still re-resolve dependencies")
|
534
|
-
|
532
|
+
setup_sources_for_resolve
|
533
|
+
resolution_packages.delete(incomplete_specs)
|
534
|
+
@resolve = start_resolution
|
535
535
|
specs = resolve.materialize(dependencies)
|
536
536
|
|
537
537
|
still_incomplete_specs = specs.incomplete_specs
|
538
538
|
|
539
539
|
if still_incomplete_specs == incomplete_specs
|
540
|
-
package = resolution_packages
|
540
|
+
package = resolution_packages.get_package(incomplete_specs.first.name)
|
541
541
|
resolver.raise_not_found! package
|
542
542
|
end
|
543
543
|
|
@@ -550,14 +550,14 @@ module Bundler
|
|
550
550
|
specs
|
551
551
|
end
|
552
552
|
|
553
|
-
def start_resolution
|
554
|
-
result = resolver.start
|
553
|
+
def start_resolution
|
554
|
+
result = resolver.start
|
555
555
|
|
556
556
|
SpecSet.new(SpecSet.new(result).for(dependencies, false, @platforms))
|
557
557
|
end
|
558
558
|
|
559
559
|
def precompute_source_requirements_for_indirect_dependencies?
|
560
|
-
|
560
|
+
sources.non_global_rubygems_sources.all?(&:dependency_api_available?) && !sources.aggregate_global_source?
|
561
561
|
end
|
562
562
|
|
563
563
|
def pin_locally_available_names(source_requirements)
|
@@ -885,11 +885,12 @@ module Bundler
|
|
885
885
|
current == proposed
|
886
886
|
end
|
887
887
|
|
888
|
-
def additional_base_requirements_for_resolve(last_resolve)
|
889
|
-
return
|
890
|
-
converge_specs(@originally_locked_specs - last_resolve).
|
891
|
-
|
892
|
-
end
|
888
|
+
def additional_base_requirements_for_resolve(resolution_packages, last_resolve)
|
889
|
+
return resolution_packages unless @locked_gems && unlocking? && !sources.expired_sources?(@locked_gems.sources)
|
890
|
+
converge_specs(@originally_locked_specs - last_resolve).each do |locked_spec|
|
891
|
+
resolution_packages.base_requirements[locked_spec.name] = Gem::Requirement.new(">= #{locked_spec.version}")
|
892
|
+
end
|
893
|
+
resolution_packages
|
893
894
|
end
|
894
895
|
|
895
896
|
def remove_ruby_from_platforms_if_necessary!(dependencies)
|
data/lib/bundler/dependency.rb
CHANGED
@@ -9,7 +9,7 @@ module Bundler
|
|
9
9
|
attr_reader :autorequire
|
10
10
|
attr_reader :groups, :platforms, :gemfile, :path, :git, :github, :branch, :ref
|
11
11
|
|
12
|
-
ALL_RUBY_VERSIONS = ((18..27).to_a + (30..
|
12
|
+
ALL_RUBY_VERSIONS = ((18..27).to_a + (30..33).to_a).freeze
|
13
13
|
PLATFORM_MAP = {
|
14
14
|
:ruby => [Gem::Platform::RUBY, ALL_RUBY_VERSIONS],
|
15
15
|
:mri => [Gem::Platform::RUBY, ALL_RUBY_VERSIONS],
|
data/lib/bundler/inline.rb
CHANGED
@@ -31,6 +31,7 @@
|
|
31
31
|
#
|
32
32
|
def gemfile(install = false, options = {}, &gemfile)
|
33
33
|
require_relative "../bundler"
|
34
|
+
Bundler.reset!
|
34
35
|
|
35
36
|
opts = options.dup
|
36
37
|
ui = opts.delete(:ui) { Bundler::UI::Shell.new }
|
@@ -38,9 +39,8 @@ def gemfile(install = false, options = {}, &gemfile)
|
|
38
39
|
Bundler.ui = ui
|
39
40
|
raise ArgumentError, "Unknown options: #{opts.keys.join(", ")}" unless opts.empty?
|
40
41
|
|
41
|
-
|
42
|
+
Bundler.with_unbundled_env do
|
42
43
|
Bundler.instance_variable_set(:@bundle_path, Pathname.new(Gem.dir))
|
43
|
-
old_gemfile = ENV["BUNDLE_GEMFILE"]
|
44
44
|
Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", "Gemfile"
|
45
45
|
|
46
46
|
Bundler::Plugin.gemfile_install(&gemfile) if Bundler.feature_flag.plugins?
|
@@ -65,11 +65,9 @@ def gemfile(install = false, options = {}, &gemfile)
|
|
65
65
|
runtime = Bundler::Runtime.new(nil, definition)
|
66
66
|
runtime.setup.require
|
67
67
|
end
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
ENV["BUNDLE_GEMFILE"] = ""
|
73
|
-
end
|
68
|
+
end
|
69
|
+
|
70
|
+
if ENV["BUNDLE_GEMFILE"].nil?
|
71
|
+
ENV["BUNDLE_GEMFILE"] = ""
|
74
72
|
end
|
75
73
|
end
|
@@ -47,6 +47,13 @@ module Bundler
|
|
47
47
|
dependencies.all? {|d| installed_specs.include? d.name }
|
48
48
|
end
|
49
49
|
|
50
|
+
# Check whether spec's dependencies are missing, which can indicate a
|
51
|
+
# corrupted lockfile
|
52
|
+
def dependencies_missing?(all_specs)
|
53
|
+
spec_names = all_specs.map(&:name)
|
54
|
+
dependencies.any? {|d| !spec_names.include? d.name }
|
55
|
+
end
|
56
|
+
|
50
57
|
# Represents only the non-development dependencies, the ones that are
|
51
58
|
# itself and are in the total list.
|
52
59
|
def dependencies
|
@@ -110,12 +117,17 @@ module Bundler
|
|
110
117
|
|
111
118
|
warning = []
|
112
119
|
warning << "Your lockfile doesn't include a valid resolution."
|
113
|
-
warning << "You can fix this by regenerating your lockfile or
|
120
|
+
warning << "You can fix this by regenerating your lockfile or manually editing the bad locked gems to a version that satisfies all dependencies."
|
114
121
|
warning << "The unmet dependencies are:"
|
115
122
|
|
116
123
|
unmet_dependencies.each do |spec, unmet_spec_dependencies|
|
117
124
|
unmet_spec_dependencies.each do |unmet_spec_dependency|
|
118
|
-
|
125
|
+
found = @specs.find {|s| s.name == unmet_spec_dependency.name && !unmet_spec_dependency.matches_spec?(s.spec) }
|
126
|
+
if found
|
127
|
+
warning << "* #{unmet_spec_dependency}, dependency of #{spec.full_name}, unsatisfied by #{found.full_name}"
|
128
|
+
else
|
129
|
+
warning << "* #{unmet_spec_dependency}, dependency of #{spec.full_name} but missing from lockfile"
|
130
|
+
end
|
119
131
|
end
|
120
132
|
end
|
121
133
|
|
@@ -212,6 +224,8 @@ module Bundler
|
|
212
224
|
if spec.dependencies_installed? @specs
|
213
225
|
spec.state = :enqueued
|
214
226
|
worker_pool.enq spec
|
227
|
+
elsif spec.dependencies_missing? @specs
|
228
|
+
spec.state = :failed
|
215
229
|
end
|
216
230
|
end
|
217
231
|
end
|
@@ -52,7 +52,7 @@ module Bundler
|
|
52
52
|
|
53
53
|
def gem_path(path, spec)
|
54
54
|
full_path = Pathname.new(path).absolute? ? path : File.join(spec.full_gem_path, path)
|
55
|
-
if spec.source.instance_of?(Source::Path)
|
55
|
+
if spec.source.instance_of?(Source::Path) && spec.source.path.absolute?
|
56
56
|
full_path
|
57
57
|
else
|
58
58
|
Pathname.new(full_path).relative_path_from(Bundler.root.join(bundler_path)).to_s
|
@@ -84,13 +84,17 @@ module Bundler
|
|
84
84
|
|
85
85
|
def reverse_rubygems_kernel_mixin
|
86
86
|
<<~END
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
87
|
+
if Gem.respond_to?(:discover_gems_on_require=)
|
88
|
+
Gem.discover_gems_on_require = false
|
89
|
+
else
|
90
|
+
kernel = (class << ::Kernel; self; end)
|
91
|
+
[kernel, ::Kernel].each do |k|
|
92
|
+
if k.private_method_defined?(:gem_original_require)
|
93
|
+
private_require = k.private_method_defined?(:require)
|
94
|
+
k.send(:remove_method, :require)
|
95
|
+
k.send(:define_method, :require, k.instance_method(:gem_original_require))
|
96
|
+
k.send(:private, :require) if private_require
|
97
|
+
end
|
94
98
|
end
|
95
99
|
end
|
96
100
|
END
|
data/lib/bundler/installer.rb
CHANGED
@@ -249,17 +249,13 @@ module Bundler
|
|
249
249
|
|
250
250
|
# returns whether or not a re-resolve was needed
|
251
251
|
def resolve_if_needed(options)
|
252
|
+
@definition.resolution_mode = options
|
253
|
+
|
252
254
|
if !@definition.unlocking? && !options["force"] && !Bundler.settings[:inline] && Bundler.default_lockfile.file?
|
253
255
|
return false if @definition.nothing_changed? && !@definition.missing_specs?
|
254
256
|
end
|
255
257
|
|
256
|
-
|
257
|
-
@definition.resolve_with_cache!
|
258
|
-
elsif options["prefer-local"]
|
259
|
-
@definition.resolve_prefering_local!
|
260
|
-
else
|
261
|
-
@definition.resolve_remotely!
|
262
|
-
end
|
258
|
+
@definition.setup_sources_for_resolve
|
263
259
|
|
264
260
|
true
|
265
261
|
end
|
@@ -89,7 +89,7 @@ module Bundler
|
|
89
89
|
|
90
90
|
installable_candidates = GemHelpers.select_best_platform_match(matching_specs, target_platform)
|
91
91
|
|
92
|
-
specification = __materialize__(installable_candidates)
|
92
|
+
specification = __materialize__(installable_candidates, :fallback_to_non_installable => false)
|
93
93
|
return specification unless specification.nil?
|
94
94
|
|
95
95
|
if target_platform != platform
|
@@ -102,13 +102,18 @@ module Bundler
|
|
102
102
|
__materialize__(candidates)
|
103
103
|
end
|
104
104
|
|
105
|
-
|
105
|
+
# If in frozen mode, we fallback to a non-installable candidate because by
|
106
|
+
# doing this we avoid re-resolving and potentially end up changing the
|
107
|
+
# lock file, which is not allowed. In that case, we will give a proper error
|
108
|
+
# about the mismatch higher up the stack, right before trying to install the
|
109
|
+
# bad gem.
|
110
|
+
def __materialize__(candidates, fallback_to_non_installable: Bundler.frozen_bundle?)
|
106
111
|
search = candidates.reverse.find do |spec|
|
107
112
|
spec.is_a?(StubSpecification) ||
|
108
113
|
(spec.matches_current_ruby? &&
|
109
114
|
spec.matches_current_rubygems?)
|
110
115
|
end
|
111
|
-
if search.nil? &&
|
116
|
+
if search.nil? && fallback_to_non_installable
|
112
117
|
search = candidates.last
|
113
118
|
else
|
114
119
|
search.dependencies = dependencies if search && search.full_name == full_name && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
|
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "BUNDLE\-BINSTUBS" "1" "
|
4
|
+
.TH "BUNDLE\-BINSTUBS" "1" "February 2023" "" ""
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBbundle\-binstubs\fR \- Install the binstubs of the listed gems
|
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "BUNDLE\-CACHE" "1" "
|
4
|
+
.TH "BUNDLE\-CACHE" "1" "February 2023" "" ""
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBbundle\-cache\fR \- Package your needed \fB\.gem\fR files into your application
|
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "BUNDLE\-CHECK" "1" "
|
4
|
+
.TH "BUNDLE\-CHECK" "1" "February 2023" "" ""
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBbundle\-check\fR \- Verifies if dependencies are satisfied by installed gems
|
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "BUNDLE\-CLEAN" "1" "
|
4
|
+
.TH "BUNDLE\-CLEAN" "1" "February 2023" "" ""
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBbundle\-clean\fR \- Cleans up unused gems in your bundler directory
|
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "BUNDLE\-CONSOLE" "1" "
|
4
|
+
.TH "BUNDLE\-CONSOLE" "1" "February 2023" "" ""
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBbundle\-console\fR \- Deprecated way to open an IRB session with the bundle pre\-loaded
|
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "BUNDLE\-EXEC" "1" "
|
4
|
+
.TH "BUNDLE\-EXEC" "1" "February 2023" "" ""
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBbundle\-exec\fR \- Execute a command in the context of the bundle
|
@@ -74,13 +74,13 @@ Finally, \fBbundle exec\fR also implicitly modifies \fBGemfile\.lock\fR if the l
|
|
74
74
|
By default, when attempting to \fBbundle exec\fR to a file with a ruby shebang, Bundler will \fBKernel\.load\fR that file instead of using \fBKernel\.exec\fR\. For the vast majority of cases, this is a performance improvement\. In a rare few cases, this could cause some subtle side\-effects (such as dependence on the exact contents of \fB$0\fR or \fB__FILE__\fR) and the optimization can be disabled by enabling the \fBdisable_exec_load\fR setting\.
|
75
75
|
.
|
76
76
|
.SS "Shelling out"
|
77
|
-
Any Ruby code that opens a subshell (like \fBsystem\fR, backticks, or \fB%x{}\fR) will automatically use the current Bundler environment\. If you need to shell out to a Ruby command that is not part of your current bundle, use the \
|
77
|
+
Any Ruby code that opens a subshell (like \fBsystem\fR, backticks, or \fB%x{}\fR) will automatically use the current Bundler environment\. If you need to shell out to a Ruby command that is not part of your current bundle, use the \fBwith_unbundled_env\fR method with a block\. Any subshells created inside the block will be given the environment present before Bundler was activated\. For example, Homebrew commands run Ruby, but don\'t work inside a bundle:
|
78
78
|
.
|
79
79
|
.IP "" 4
|
80
80
|
.
|
81
81
|
.nf
|
82
82
|
|
83
|
-
Bundler\.
|
83
|
+
Bundler\.with_unbundled_env do
|
84
84
|
`brew install wget`
|
85
85
|
end
|
86
86
|
.
|
@@ -89,13 +89,13 @@ end
|
|
89
89
|
.IP "" 0
|
90
90
|
.
|
91
91
|
.P
|
92
|
-
Using \
|
92
|
+
Using \fBwith_unbundled_env\fR is also necessary if you are shelling out to a different bundle\. Any Bundler commands run in a subshell will inherit the current Gemfile, so commands that need to run in the context of a different bundle also need to use \fBwith_unbundled_env\fR\.
|
93
93
|
.
|
94
94
|
.IP "" 4
|
95
95
|
.
|
96
96
|
.nf
|
97
97
|
|
98
|
-
Bundler\.
|
98
|
+
Bundler\.with_unbundled_env do
|
99
99
|
Dir\.chdir "/other/bundler/project" do
|
100
100
|
`bundle exec \./script`
|
101
101
|
end
|
@@ -84,20 +84,20 @@ the `disable_exec_load` setting.
|
|
84
84
|
Any Ruby code that opens a subshell (like `system`, backticks, or `%x{}`) will
|
85
85
|
automatically use the current Bundler environment. If you need to shell out to
|
86
86
|
a Ruby command that is not part of your current bundle, use the
|
87
|
-
`
|
87
|
+
`with_unbundled_env` method with a block. Any subshells created inside the block
|
88
88
|
will be given the environment present before Bundler was activated. For
|
89
89
|
example, Homebrew commands run Ruby, but don't work inside a bundle:
|
90
90
|
|
91
|
-
Bundler.
|
91
|
+
Bundler.with_unbundled_env do
|
92
92
|
`brew install wget`
|
93
93
|
end
|
94
94
|
|
95
|
-
Using `
|
95
|
+
Using `with_unbundled_env` is also necessary if you are shelling out to a different
|
96
96
|
bundle. Any Bundler commands run in a subshell will inherit the current
|
97
97
|
Gemfile, so commands that need to run in the context of a different bundle also
|
98
|
-
need to use `
|
98
|
+
need to use `with_unbundled_env`.
|
99
99
|
|
100
|
-
Bundler.
|
100
|
+
Bundler.with_unbundled_env do
|
101
101
|
Dir.chdir "/other/bundler/project" do
|
102
102
|
`bundle exec ./script`
|
103
103
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "BUNDLE\-INFO" "1" "
|
4
|
+
.TH "BUNDLE\-INFO" "1" "February 2023" "" ""
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBbundle\-info\fR \- Show information for the given gem in your bundle
|
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "BUNDLE\-INIT" "1" "
|
4
|
+
.TH "BUNDLE\-INIT" "1" "February 2023" "" ""
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBbundle\-init\fR \- Generates a Gemfile into the current working directory
|
@@ -18,6 +18,10 @@ Init generates a default [\fBGemfile(5)\fR][Gemfile(5)] in the current working d
|
|
18
18
|
\fB\-\-gemspec\fR
|
19
19
|
Use the specified \.gemspec to create the [\fBGemfile(5)\fR][Gemfile(5)]
|
20
20
|
.
|
21
|
+
.TP
|
22
|
+
\fB\-\-gemfile\fR
|
23
|
+
Use the specified name for the gemfile instead of \fBGemfile\fR
|
24
|
+
.
|
21
25
|
.SH "FILES"
|
22
26
|
Included in the default [\fBGemfile(5)\fR][Gemfile(5)] generated is the line \fB# frozen_string_literal: true\fR\. This is a magic comment supported for the first time in Ruby 2\.3\. The presence of this line results in all string literals in the file being implicitly frozen\.
|
23
27
|
.
|