bundler 2.2.3 → 2.3.5
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 +503 -7
- data/README.md +1 -1
- data/bundler.gemspec +2 -3
- data/exe/bundle +7 -8
- data/lib/bundler/.document +1 -0
- data/lib/bundler/build_metadata.rb +2 -2
- data/lib/bundler/cli/cache.rb +2 -1
- data/lib/bundler/cli/check.rb +4 -2
- data/lib/bundler/cli/common.rb +15 -2
- data/lib/bundler/cli/doctor.rb +15 -4
- data/lib/bundler/cli/exec.rb +1 -6
- data/lib/bundler/cli/gem.rb +132 -24
- data/lib/bundler/cli/info.rb +16 -4
- data/lib/bundler/cli/install.rb +12 -27
- data/lib/bundler/cli/issue.rb +4 -3
- data/lib/bundler/cli/list.rb +7 -1
- data/lib/bundler/cli/lock.rb +5 -1
- data/lib/bundler/cli/open.rb +1 -2
- data/lib/bundler/cli/outdated.rb +10 -11
- data/lib/bundler/cli/remove.rb +1 -2
- data/lib/bundler/cli/update.rb +17 -8
- data/lib/bundler/cli.rb +44 -60
- data/lib/bundler/compact_index_client/cache.rb +0 -9
- data/lib/bundler/compact_index_client/updater.rb +10 -19
- data/lib/bundler/compact_index_client.rb +2 -8
- data/lib/bundler/current_ruby.rb +5 -4
- data/lib/bundler/definition.rb +158 -316
- data/lib/bundler/dep_proxy.rb +15 -8
- data/lib/bundler/dependency.rb +5 -7
- data/lib/bundler/digest.rb +71 -0
- data/lib/bundler/dsl.rb +67 -66
- data/lib/bundler/endpoint_specification.rb +21 -11
- data/lib/bundler/environment_preserver.rb +4 -1
- data/lib/bundler/errors.rb +19 -3
- data/lib/bundler/feature_flag.rb +0 -5
- data/lib/bundler/fetcher/compact_index.rb +10 -15
- data/lib/bundler/fetcher/downloader.rb +9 -6
- data/lib/bundler/fetcher/index.rb +0 -27
- data/lib/bundler/fetcher.rb +10 -17
- data/lib/bundler/friendly_errors.rb +5 -32
- data/lib/bundler/gem_helper.rb +28 -21
- data/lib/bundler/gem_version_promoter.rb +2 -2
- data/lib/bundler/index.rb +8 -12
- data/lib/bundler/injector.rb +12 -3
- data/lib/bundler/inline.rb +2 -1
- data/lib/bundler/installer/gem_installer.rb +4 -22
- data/lib/bundler/installer/parallel_installer.rb +36 -15
- data/lib/bundler/installer/standalone.rb +29 -9
- data/lib/bundler/installer.rb +8 -34
- data/lib/bundler/lazy_specification.rb +32 -20
- data/lib/bundler/lockfile_generator.rb +1 -1
- data/lib/bundler/lockfile_parser.rb +16 -45
- data/{man → lib/bundler/man}/bundle-add.1 +10 -2
- data/lib/bundler/man/bundle-add.1.ronn +7 -1
- data/{man → lib/bundler/man}/bundle-binstubs.1 +1 -1
- data/{man → lib/bundler/man}/bundle-cache.1 +1 -1
- data/{man → lib/bundler/man}/bundle-check.1 +1 -1
- data/{man → lib/bundler/man}/bundle-clean.1 +1 -1
- data/{man → lib/bundler/man}/bundle-config.1 +27 -19
- data/lib/bundler/man/bundle-config.1.ronn +33 -25
- data/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
- data/{man → lib/bundler/man}/bundle-exec.1 +1 -1
- data/{man → lib/bundler/man}/bundle-gem.1 +14 -1
- data/lib/bundler/man/bundle-gem.1.ronn +16 -0
- data/{man → lib/bundler/man}/bundle-info.1 +1 -1
- data/{man → lib/bundler/man}/bundle-init.1 +1 -1
- data/{man → lib/bundler/man}/bundle-inject.1 +1 -1
- data/{man → lib/bundler/man}/bundle-install.1 +2 -2
- data/lib/bundler/man/bundle-install.1.ronn +2 -2
- data/{man → lib/bundler/man}/bundle-list.1 +1 -1
- data/{man → lib/bundler/man}/bundle-lock.1 +1 -1
- data/{man → lib/bundler/man}/bundle-open.1 +1 -1
- data/{man → lib/bundler/man}/bundle-outdated.1 +1 -1
- data/{man → lib/bundler/man}/bundle-platform.1 +1 -1
- data/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
- data/{man → lib/bundler/man}/bundle-remove.1 +1 -1
- data/{man → lib/bundler/man}/bundle-show.1 +1 -1
- data/{man → lib/bundler/man}/bundle-update.1 +5 -5
- data/lib/bundler/man/bundle-update.1.ronn +5 -4
- data/{man → lib/bundler/man}/bundle-viz.1 +1 -1
- data/{man → lib/bundler/man}/bundle.1 +1 -1
- data/{man → lib/bundler/man}/gemfile.5 +28 -2
- data/lib/bundler/man/gemfile.5.ronn +9 -1
- data/{man → lib/bundler/man}/index.txt +0 -0
- data/lib/bundler/plugin/api/source.rb +22 -0
- data/lib/bundler/plugin/index.rb +4 -1
- data/lib/bundler/plugin/installer.rb +10 -10
- data/lib/bundler/plugin/source_list.rb +4 -0
- data/lib/bundler/plugin.rb +28 -8
- data/lib/bundler/process_lock.rb +1 -1
- data/lib/bundler/psyched_yaml.rb +1 -13
- data/lib/bundler/resolver/spec_group.rb +36 -48
- data/lib/bundler/resolver.rb +97 -151
- data/lib/bundler/retry.rb +1 -1
- data/lib/bundler/ruby_version.rb +1 -1
- data/lib/bundler/rubygems_ext.rb +46 -8
- data/lib/bundler/rubygems_gem_installer.rb +68 -1
- data/lib/bundler/rubygems_integration.rb +43 -60
- data/lib/bundler/runtime.rb +18 -11
- data/lib/bundler/self_manager.rb +168 -0
- data/lib/bundler/settings.rb +97 -21
- data/lib/bundler/setup.rb +2 -2
- data/lib/bundler/shared_helpers.rb +6 -21
- data/lib/bundler/source/git/git_proxy.rb +60 -53
- data/lib/bundler/source/git.rb +38 -18
- data/lib/bundler/source/metadata.rb +1 -5
- data/lib/bundler/source/path/installer.rb +3 -1
- data/lib/bundler/source/path.rb +3 -1
- data/lib/bundler/source/rubygems.rb +113 -100
- data/lib/bundler/source/rubygems_aggregate.rb +68 -0
- data/lib/bundler/source.rb +21 -0
- data/lib/bundler/source_list.rb +100 -62
- data/lib/bundler/source_map.rb +58 -0
- data/lib/bundler/spec_set.rb +21 -34
- data/lib/bundler/stub_specification.rb +8 -0
- data/lib/bundler/templates/Executable.bundler +7 -7
- data/lib/bundler/templates/Gemfile +0 -2
- data/lib/bundler/templates/gems.rb +0 -3
- data/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
- data/lib/bundler/templates/newgem/Gemfile.tt +5 -2
- data/lib/bundler/templates/newgem/README.md.tt +5 -3
- data/lib/bundler/templates/newgem/Rakefile.tt +15 -2
- data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +15 -6
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +18 -16
- data/lib/bundler/templates/newgem/rubocop.yml.tt +3 -0
- data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
- data/lib/bundler/templates/newgem/standard.yml.tt +2 -0
- data/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
- data/lib/bundler/ui/shell.rb +1 -1
- data/lib/bundler/vendor/.document +1 -0
- data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +19 -21
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +57 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +39 -74
- data/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
- data/lib/bundler/vendor/molinillo/LICENSE +9 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -5
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +2 -3
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +2 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +12 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +11 -7
- data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
- data/lib/bundler/vendor/thor/LICENSE.md +20 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +9 -7
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -2
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +7 -3
- data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
- data/lib/bundler/vendor/thor/lib/thor/error.rb +10 -5
- data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +5 -1
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +28 -9
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +27 -6
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +5 -1
- data/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor.rb +5 -6
- data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +1 -1
- data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
- data/lib/bundler/vendor/tsort/lib/tsort.rb +453 -0
- data/lib/bundler/vendor/uri/LICENSE.txt +22 -0
- data/lib/bundler/vendor/uri/lib/uri/common.rb +17 -80
- data/lib/bundler/vendor/uri/lib/uri/ftp.rb +0 -1
- data/lib/bundler/vendor/uri/lib/uri/generic.rb +5 -6
- data/lib/bundler/vendor/uri/lib/uri/http.rb +0 -1
- data/lib/bundler/vendor/uri/lib/uri/https.rb +0 -1
- data/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
- data/lib/bundler/vendor/uri/lib/uri/mailto.rb +0 -1
- data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +1 -14
- data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +1 -12
- data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/lib/bundler/vendor/uri/lib/uri/ws.rb +84 -0
- data/lib/bundler/vendor/uri/lib/uri/wss.rb +22 -0
- data/lib/bundler/vendor/uri/lib/uri.rb +0 -1
- data/lib/bundler/vendored_tsort.rb +4 -0
- data/lib/bundler/version.rb +1 -1
- data/lib/bundler/worker.rb +19 -4
- data/lib/bundler.rb +29 -33
- metadata +54 -35
- data/lib/bundler/gemdeps.rb +0 -29
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +0 -66
data/lib/bundler/installer.rb
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "rubygems/dependency_installer"
|
|
4
3
|
require_relative "worker"
|
|
5
4
|
require_relative "installer/parallel_installer"
|
|
6
5
|
require_relative "installer/standalone"
|
|
@@ -82,7 +81,6 @@ module Bundler
|
|
|
82
81
|
|
|
83
82
|
if resolve_if_needed(options)
|
|
84
83
|
ensure_specs_are_compatible!
|
|
85
|
-
warn_on_incompatible_bundler_deps
|
|
86
84
|
load_plugins
|
|
87
85
|
options.delete(:jobs)
|
|
88
86
|
else
|
|
@@ -90,6 +88,8 @@ module Bundler
|
|
|
90
88
|
end
|
|
91
89
|
install(options)
|
|
92
90
|
|
|
91
|
+
Gem::Specification.reset # invalidate gem specification cache so that installed gems are immediately available
|
|
92
|
+
|
|
93
93
|
lock unless Bundler.frozen_bundle?
|
|
94
94
|
Standalone.new(options[:standalone], @definition).generate if options[:standalone]
|
|
95
95
|
end
|
|
@@ -134,7 +134,7 @@ module Bundler
|
|
|
134
134
|
next
|
|
135
135
|
end
|
|
136
136
|
|
|
137
|
-
mode =
|
|
137
|
+
mode = Gem.win_platform? ? "wb:UTF-8" : "w"
|
|
138
138
|
require "erb"
|
|
139
139
|
content = if RUBY_VERSION >= "2.6"
|
|
140
140
|
ERB.new(template, :trim_mode => "-").result(binding)
|
|
@@ -143,7 +143,7 @@ module Bundler
|
|
|
143
143
|
end
|
|
144
144
|
|
|
145
145
|
File.write(binstub_path, content, :mode => mode, :perm => 0o777 & ~File.umask)
|
|
146
|
-
if
|
|
146
|
+
if Gem.win_platform? || options[:all_platforms]
|
|
147
147
|
prefix = "@ruby -x \"%~f0\" %*\n@exit /b %ERRORLEVEL%\n\n"
|
|
148
148
|
File.write("#{binstub_path}.cmd", prefix + content, :mode => mode)
|
|
149
149
|
end
|
|
@@ -181,7 +181,7 @@ module Bundler
|
|
|
181
181
|
executable_path = Pathname(spec.full_gem_path).join(spec.bindir, executable).relative_path_from(bin_path)
|
|
182
182
|
executable_path = executable_path
|
|
183
183
|
|
|
184
|
-
mode =
|
|
184
|
+
mode = Gem.win_platform? ? "wb:UTF-8" : "w"
|
|
185
185
|
require "erb"
|
|
186
186
|
content = if RUBY_VERSION >= "2.6"
|
|
187
187
|
ERB.new(template, :trim_mode => "-").result(binding)
|
|
@@ -190,7 +190,7 @@ module Bundler
|
|
|
190
190
|
end
|
|
191
191
|
|
|
192
192
|
File.write("#{bin_path}/#{executable}", content, :mode => mode, :perm => 0o755)
|
|
193
|
-
if
|
|
193
|
+
if Gem.win_platform? || options[:all_platforms]
|
|
194
194
|
prefix = "@ruby -x \"%~f0\" %*\n@exit /b %ERRORLEVEL%\n\n"
|
|
195
195
|
File.write("#{bin_path}/#{executable}.cmd", prefix + content, :mode => mode)
|
|
196
196
|
end
|
|
@@ -218,17 +218,7 @@ module Bundler
|
|
|
218
218
|
return jobs
|
|
219
219
|
end
|
|
220
220
|
|
|
221
|
-
|
|
222
|
-
return 1 if Gem.win_platform?
|
|
223
|
-
|
|
224
|
-
processor_count
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
def processor_count
|
|
228
|
-
require "etc"
|
|
229
|
-
Etc.nprocessors
|
|
230
|
-
rescue StandardError
|
|
231
|
-
1
|
|
221
|
+
Bundler.settings.processor_count
|
|
232
222
|
end
|
|
233
223
|
|
|
234
224
|
def load_plugins
|
|
@@ -249,7 +239,7 @@ module Bundler
|
|
|
249
239
|
|
|
250
240
|
def ensure_specs_are_compatible!
|
|
251
241
|
system_ruby = Bundler::RubyVersion.system
|
|
252
|
-
rubygems_version =
|
|
242
|
+
rubygems_version = Bundler.rubygems.version
|
|
253
243
|
@definition.specs.each do |spec|
|
|
254
244
|
if required_ruby_version = spec.required_ruby_version
|
|
255
245
|
unless required_ruby_version.satisfied_by?(system_ruby.gem_version)
|
|
@@ -265,22 +255,6 @@ module Bundler
|
|
|
265
255
|
end
|
|
266
256
|
end
|
|
267
257
|
|
|
268
|
-
def warn_on_incompatible_bundler_deps
|
|
269
|
-
bundler_version = Gem::Version.create(Bundler::VERSION)
|
|
270
|
-
@definition.specs.each do |spec|
|
|
271
|
-
spec.dependencies.each do |dep|
|
|
272
|
-
next if dep.type == :development
|
|
273
|
-
next unless dep.name == "bundler".freeze
|
|
274
|
-
next if dep.requirement.satisfied_by?(bundler_version)
|
|
275
|
-
|
|
276
|
-
Bundler.ui.warn "#{spec.name} (#{spec.version}) has dependency" \
|
|
277
|
-
" #{SharedHelpers.pretty_dependency(dep)}" \
|
|
278
|
-
", which is unsatisfied by the current bundler version #{VERSION}" \
|
|
279
|
-
", so the dependency is being ignored"
|
|
280
|
-
end
|
|
281
|
-
end
|
|
282
|
-
end
|
|
283
|
-
|
|
284
258
|
def install_in_parallel(size, standalone, force = false)
|
|
285
259
|
spec_installations = ParallelInstaller.call(self, @definition.specs, size, standalone, force)
|
|
286
260
|
spec_installations.each do |installation|
|
|
@@ -4,22 +4,6 @@ require_relative "match_platform"
|
|
|
4
4
|
|
|
5
5
|
module Bundler
|
|
6
6
|
class LazySpecification
|
|
7
|
-
Identifier = Struct.new(:name, :version, :platform)
|
|
8
|
-
class Identifier
|
|
9
|
-
include Comparable
|
|
10
|
-
def <=>(other)
|
|
11
|
-
return unless other.is_a?(Identifier)
|
|
12
|
-
[name, version, platform_string] <=> [other.name, other.version, other.platform_string]
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
protected
|
|
16
|
-
|
|
17
|
-
def platform_string
|
|
18
|
-
platform_string = platform.to_s
|
|
19
|
-
platform_string == Index::RUBY ? Index::NULL : platform_string
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
7
|
include MatchPlatform
|
|
24
8
|
|
|
25
9
|
attr_reader :name, :version, :dependencies, :platform
|
|
@@ -54,8 +38,24 @@ module Bundler
|
|
|
54
38
|
identifier.hash
|
|
55
39
|
end
|
|
56
40
|
|
|
41
|
+
##
|
|
42
|
+
# Does this locked specification satisfy +dependency+?
|
|
43
|
+
#
|
|
44
|
+
# NOTE: Rubygems default requirement is ">= 0", which doesn't match
|
|
45
|
+
# prereleases of 0 versions, like "0.0.0.dev" or "0.0.0.SNAPSHOT". However,
|
|
46
|
+
# bundler users expect those to work. We need to make sure that Gemfile
|
|
47
|
+
# dependencies without explicit requirements (which use ">= 0" under the
|
|
48
|
+
# hood by default) are still valid for locked specs using this kind of
|
|
49
|
+
# versions. The method implements an ad-hoc fix for that. A better solution
|
|
50
|
+
# might be to change default rubygems requirement of dependencies to be ">=
|
|
51
|
+
# 0.A" but that's a major refactoring likely to break things. Hopefully we
|
|
52
|
+
# can attempt it in the future.
|
|
53
|
+
#
|
|
54
|
+
|
|
57
55
|
def satisfies?(dependency)
|
|
58
|
-
|
|
56
|
+
effective_requirement = dependency.requirement == Gem::Requirement.default ? Gem::Requirement.new(">= 0.A") : dependency.requirement
|
|
57
|
+
|
|
58
|
+
@name == dependency.name && effective_requirement.satisfied_by?(Gem::Version.new(@version))
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
def to_lock
|
|
@@ -89,7 +89,12 @@ module Bundler
|
|
|
89
89
|
same_platform_candidates = candidates.select do |spec|
|
|
90
90
|
MatchPlatform.platforms_match?(spec.platform, platform_object)
|
|
91
91
|
end
|
|
92
|
-
|
|
92
|
+
installable_candidates = same_platform_candidates.select do |spec|
|
|
93
|
+
spec.is_a?(StubSpecification) ||
|
|
94
|
+
(spec.required_ruby_version.satisfied_by?(Gem.ruby_version) &&
|
|
95
|
+
spec.required_rubygems_version.satisfied_by?(Gem.rubygems_version))
|
|
96
|
+
end
|
|
97
|
+
search = installable_candidates.last
|
|
93
98
|
search.dependencies = dependencies if search && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
|
|
94
99
|
search
|
|
95
100
|
end
|
|
@@ -108,7 +113,7 @@ module Bundler
|
|
|
108
113
|
end
|
|
109
114
|
|
|
110
115
|
def identifier
|
|
111
|
-
@__identifier ||=
|
|
116
|
+
@__identifier ||= [name, version, platform_string]
|
|
112
117
|
end
|
|
113
118
|
|
|
114
119
|
def git_version
|
|
@@ -116,6 +121,13 @@ module Bundler
|
|
|
116
121
|
" #{source.revision[0..6]}"
|
|
117
122
|
end
|
|
118
123
|
|
|
124
|
+
protected
|
|
125
|
+
|
|
126
|
+
def platform_string
|
|
127
|
+
platform_string = platform.to_s
|
|
128
|
+
platform_string == Index::RUBY ? Index::NULL : platform_string
|
|
129
|
+
end
|
|
130
|
+
|
|
119
131
|
private
|
|
120
132
|
|
|
121
133
|
def to_ary
|
|
@@ -140,7 +152,7 @@ module Bundler
|
|
|
140
152
|
# explicitly add a more specific platform.
|
|
141
153
|
#
|
|
142
154
|
def ruby_platform_materializes_to_ruby_platform?
|
|
143
|
-
!Bundler.most_specific_locked_platform?(Gem::Platform::RUBY)
|
|
155
|
+
!Bundler.most_specific_locked_platform?(Gem::Platform::RUBY) || Bundler.settings[:force_ruby_platform]
|
|
144
156
|
end
|
|
145
157
|
end
|
|
146
158
|
end
|
|
@@ -1,16 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
#--
|
|
4
|
-
# Some versions of the Bundler 1.1 RC series introduced corrupted
|
|
5
|
-
# lockfiles. There were two major problems:
|
|
6
|
-
#
|
|
7
|
-
# * multiple copies of the same GIT section appeared in the lockfile
|
|
8
|
-
# * when this happened, those sections got multiple copies of gems
|
|
9
|
-
# in those sections.
|
|
10
|
-
#
|
|
11
|
-
# As a result, Bundler 1.1 contains code that fixes the earlier
|
|
12
|
-
# corruption. We will remove this fix-up code in Bundler 1.2.
|
|
13
|
-
|
|
14
3
|
module Bundler
|
|
15
4
|
class LockfileParser
|
|
16
5
|
attr_reader :sources, :dependencies, :specs, :platforms, :bundler_version, :ruby_version
|
|
@@ -57,6 +46,16 @@ module Bundler
|
|
|
57
46
|
attributes
|
|
58
47
|
end
|
|
59
48
|
|
|
49
|
+
def self.bundled_with
|
|
50
|
+
lockfile = Bundler.default_lockfile
|
|
51
|
+
return unless lockfile.file?
|
|
52
|
+
|
|
53
|
+
lockfile_contents = Bundler.read_file(lockfile)
|
|
54
|
+
return unless lockfile_contents.include?(BUNDLED)
|
|
55
|
+
|
|
56
|
+
lockfile_contents.split(BUNDLED).last.strip
|
|
57
|
+
end
|
|
58
|
+
|
|
60
59
|
def initialize(lockfile)
|
|
61
60
|
@platforms = []
|
|
62
61
|
@sources = []
|
|
@@ -64,8 +63,6 @@ module Bundler
|
|
|
64
63
|
@state = nil
|
|
65
64
|
@specs = {}
|
|
66
65
|
|
|
67
|
-
@rubygems_aggregate = Source::Rubygems.new
|
|
68
|
-
|
|
69
66
|
if lockfile.match(/<<<<<<<|=======|>>>>>>>|\|\|\|\|\|\|\|/)
|
|
70
67
|
raise LockfileError, "Your #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} contains merge conflicts.\n" \
|
|
71
68
|
"Run `git checkout HEAD -- #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}` first to get a clean lock."
|
|
@@ -89,26 +86,13 @@ module Bundler
|
|
|
89
86
|
send("parse_#{@state}", line)
|
|
90
87
|
end
|
|
91
88
|
end
|
|
92
|
-
@sources << @rubygems_aggregate unless Bundler.feature_flag.disable_multisource?
|
|
93
89
|
@specs = @specs.values.sort_by(&:identifier)
|
|
94
|
-
warn_for_outdated_bundler_version
|
|
95
90
|
rescue ArgumentError => e
|
|
96
91
|
Bundler.ui.debug(e)
|
|
97
92
|
raise LockfileError, "Your lockfile is unreadable. Run `rm #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}` " \
|
|
98
93
|
"and then `bundle install` to generate a new lockfile."
|
|
99
94
|
end
|
|
100
95
|
|
|
101
|
-
def warn_for_outdated_bundler_version
|
|
102
|
-
return unless bundler_version
|
|
103
|
-
prerelease_text = bundler_version.prerelease? ? " --pre" : ""
|
|
104
|
-
current_version = Gem::Version.create(Bundler::VERSION)
|
|
105
|
-
return unless current_version < bundler_version
|
|
106
|
-
Bundler.ui.warn "Warning: the running version of Bundler (#{current_version}) is older " \
|
|
107
|
-
"than the version that created the lockfile (#{bundler_version}). We suggest you to " \
|
|
108
|
-
"upgrade to the version that created the lockfile by running `gem install " \
|
|
109
|
-
"bundler:#{bundler_version}#{prerelease_text}`.\n"
|
|
110
|
-
end
|
|
111
|
-
|
|
112
96
|
private
|
|
113
97
|
|
|
114
98
|
TYPES = {
|
|
@@ -127,23 +111,11 @@ module Bundler
|
|
|
127
111
|
@sources << @current_source
|
|
128
112
|
when GIT
|
|
129
113
|
@current_source = TYPES[@type].from_lock(@opts)
|
|
130
|
-
|
|
131
|
-
if @sources.include?(@current_source)
|
|
132
|
-
@current_source = @sources.find {|s| s == @current_source }
|
|
133
|
-
else
|
|
134
|
-
@sources << @current_source
|
|
135
|
-
end
|
|
114
|
+
@sources << @current_source
|
|
136
115
|
when GEM
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
@sources << @current_source
|
|
141
|
-
else
|
|
142
|
-
Array(@opts["remote"]).each do |url|
|
|
143
|
-
@rubygems_aggregate.add_remote(url)
|
|
144
|
-
end
|
|
145
|
-
@current_source = @rubygems_aggregate
|
|
146
|
-
end
|
|
116
|
+
@opts["remotes"] = Array(@opts.delete("remote")).reverse
|
|
117
|
+
@current_source = TYPES[@type].from_lock(@opts)
|
|
118
|
+
@sources << @current_source
|
|
147
119
|
when PLUGIN
|
|
148
120
|
@current_source = Plugin.source_from_lock(@opts)
|
|
149
121
|
@sources << @current_source
|
|
@@ -221,10 +193,9 @@ module Bundler
|
|
|
221
193
|
platform = platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY
|
|
222
194
|
@current_spec = LazySpecification.new(name, version, platform)
|
|
223
195
|
@current_spec.source = @current_source
|
|
196
|
+
@current_source.add_dependency_names(name)
|
|
224
197
|
|
|
225
|
-
|
|
226
|
-
# duplicate GIT sections)
|
|
227
|
-
@specs[@current_spec.identifier] ||= @current_spec
|
|
198
|
+
@specs[@current_spec.identifier] = @current_spec
|
|
228
199
|
elsif spaces.size == 6
|
|
229
200
|
version = version.split(",").map(&:strip) if version
|
|
230
201
|
dep = Gem::Dependency.new(name, version)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
|
3
3
|
.
|
|
4
|
-
.TH "BUNDLE\-ADD" "1" "
|
|
4
|
+
.TH "BUNDLE\-ADD" "1" "December 2021" "" ""
|
|
5
5
|
.
|
|
6
6
|
.SH "NAME"
|
|
7
7
|
\fBbundle\-add\fR \- Add gem to the Gemfile and run bundle install
|
|
8
8
|
.
|
|
9
9
|
.SH "SYNOPSIS"
|
|
10
|
-
\fBbundle add\fR \fIGEM_NAME\fR [\-\-group=GROUP] [\-\-version=VERSION] [\-\-source=SOURCE] [\-\-git=GIT] [\-\-branch=BRANCH] [\-\-skip\-install] [\-\-strict] [\-\-optimistic]
|
|
10
|
+
\fBbundle add\fR \fIGEM_NAME\fR [\-\-group=GROUP] [\-\-version=VERSION] [\-\-source=SOURCE] [\-\-git=GIT] [\-\-github=GITHUB] [\-\-branch=BRANCH] [\-\-ref=REF] [\-\-skip\-install] [\-\-strict] [\-\-optimistic]
|
|
11
11
|
.
|
|
12
12
|
.SH "DESCRIPTION"
|
|
13
13
|
Adds the named gem to the Gemfile and run \fBbundle install\fR\. \fBbundle install\fR can be avoided by using the flag \fB\-\-skip\-install\fR\.
|
|
@@ -49,10 +49,18 @@ Specify the source for the added gem\.
|
|
|
49
49
|
Specify the git source for the added gem\.
|
|
50
50
|
.
|
|
51
51
|
.TP
|
|
52
|
+
\fB\-\-github\fR
|
|
53
|
+
Specify the github source for the added gem\.
|
|
54
|
+
.
|
|
55
|
+
.TP
|
|
52
56
|
\fB\-\-branch\fR
|
|
53
57
|
Specify the git branch for the added gem\.
|
|
54
58
|
.
|
|
55
59
|
.TP
|
|
60
|
+
\fB\-\-ref\fR
|
|
61
|
+
Specify the git ref for the added gem\.
|
|
62
|
+
.
|
|
63
|
+
.TP
|
|
56
64
|
\fB\-\-skip\-install\fR
|
|
57
65
|
Adds the gem to the Gemfile but does not install it\.
|
|
58
66
|
.
|
|
@@ -3,7 +3,7 @@ bundle-add(1) -- Add gem to the Gemfile and run bundle install
|
|
|
3
3
|
|
|
4
4
|
## SYNOPSIS
|
|
5
5
|
|
|
6
|
-
`bundle add` <GEM_NAME> [--group=GROUP] [--version=VERSION] [--source=SOURCE] [--git=GIT] [--branch=BRANCH] [--skip-install] [--strict] [--optimistic]
|
|
6
|
+
`bundle add` <GEM_NAME> [--group=GROUP] [--version=VERSION] [--source=SOURCE] [--git=GIT] [--github=GITHUB] [--branch=BRANCH] [--ref=REF] [--skip-install] [--strict] [--optimistic]
|
|
7
7
|
|
|
8
8
|
## DESCRIPTION
|
|
9
9
|
Adds the named gem to the Gemfile and run `bundle install`. `bundle install` can be avoided by using the flag `--skip-install`.
|
|
@@ -33,9 +33,15 @@ bundle add rails --group "development, test"
|
|
|
33
33
|
* `--git`:
|
|
34
34
|
Specify the git source for the added gem.
|
|
35
35
|
|
|
36
|
+
* `--github`:
|
|
37
|
+
Specify the github source for the added gem.
|
|
38
|
+
|
|
36
39
|
* `--branch`:
|
|
37
40
|
Specify the git branch for the added gem.
|
|
38
41
|
|
|
42
|
+
* `--ref`:
|
|
43
|
+
Specify the git ref for the added gem.
|
|
44
|
+
|
|
39
45
|
* `--skip-install`:
|
|
40
46
|
Adds the gem to the Gemfile but does not install it.
|
|
41
47
|
|
|
@@ -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" "December 2021" "" ""
|
|
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" "December 2021" "" ""
|
|
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" "December 2021" "" ""
|
|
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" "December 2021" "" ""
|
|
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\-CONFIG" "1" "
|
|
4
|
+
.TH "BUNDLE\-CONFIG" "1" "December 2021" "" ""
|
|
5
5
|
.
|
|
6
6
|
.SH "NAME"
|
|
7
7
|
\fBbundle\-config\fR \- Set bundler configuration options
|
|
@@ -56,9 +56,6 @@ Executing \fBbundle config unset \-\-local <name> <value>\fR will delete the con
|
|
|
56
56
|
.P
|
|
57
57
|
Executing bundle with the \fBBUNDLE_IGNORE_CONFIG\fR environment variable set will cause it to ignore all configuration\.
|
|
58
58
|
.
|
|
59
|
-
.P
|
|
60
|
-
Executing \fBbundle config set \-\-local disable_multisource true\fR upgrades the warning about the Gemfile containing multiple primary sources to an error\. Executing \fBbundle config unset disable_multisource\fR downgrades this error to a warning\.
|
|
61
|
-
.
|
|
62
59
|
.SH "REMEMBERING OPTIONS"
|
|
63
60
|
Flags passed to \fBbundle install\fR or the Bundler runtime, such as \fB\-\-path foo\fR or \fB\-\-without production\fR, are remembered between commands and saved to your local application\'s configuration (normally, \fB\./\.bundle/config\fR)\.
|
|
64
61
|
.
|
|
@@ -136,9 +133,6 @@ Any periods in the configuration keys must be replaced with two underscores when
|
|
|
136
133
|
The following is a list of all configuration keys and their purpose\. You can learn more about their operation in bundle install(1) \fIbundle\-install\.1\.html\fR\.
|
|
137
134
|
.
|
|
138
135
|
.IP "\(bu" 4
|
|
139
|
-
\fBallow_bundler_dependency_conflicts\fR (\fBBUNDLE_ALLOW_BUNDLER_DEPENDENCY_CONFLICTS\fR): Allow resolving to specifications that have dependencies on \fBbundler\fR that are incompatible with the running Bundler version\.
|
|
140
|
-
.
|
|
141
|
-
.IP "\(bu" 4
|
|
142
136
|
\fBallow_deployment_source_credential_changes\fR (\fBBUNDLE_ALLOW_DEPLOYMENT_SOURCE_CREDENTIAL_CHANGES\fR): When in deployment mode, allow changing the credentials to a gem\'s source\. Ex: \fBhttps://some\.host\.com/gems/path/\fR \-> \fBhttps://user_name:password@some\.host\.com/gems/path\fR
|
|
143
137
|
.
|
|
144
138
|
.IP "\(bu" 4
|
|
@@ -184,7 +178,7 @@ The following is a list of all configuration keys and their purpose\. You can le
|
|
|
184
178
|
\fBdisable_local_branch_check\fR (\fBBUNDLE_DISABLE_LOCAL_BRANCH_CHECK\fR): Allow Bundler to use a local git override without a branch specified in the Gemfile\.
|
|
185
179
|
.
|
|
186
180
|
.IP "\(bu" 4
|
|
187
|
-
\
|
|
181
|
+
\fBdisable_local_revision_check\fR (\fBBUNDLE_DISABLE_LOCAL_REVISION_CHECK\fR): Allow Bundler to use a local git override without checking if the revision present in the lockfile is present in the repository\.
|
|
188
182
|
.
|
|
189
183
|
.IP "\(bu" 4
|
|
190
184
|
\fBdisable_shared_gems\fR (\fBBUNDLE_DISABLE_SHARED_GEMS\fR): Stop Bundler from accessing gems installed to RubyGems\' normal location\.
|
|
@@ -199,6 +193,9 @@ The following is a list of all configuration keys and their purpose\. You can le
|
|
|
199
193
|
\fBfrozen\fR (\fBBUNDLE_FROZEN\fR): Disallow changes to the \fBGemfile\fR\. When the \fBGemfile\fR is changed and the lockfile has not been updated, running Bundler commands will be blocked\. Defaults to \fBtrue\fR when \fB\-\-deployment\fR is used\.
|
|
200
194
|
.
|
|
201
195
|
.IP "\(bu" 4
|
|
196
|
+
\fBgem\.github_username\fR (\fBBUNDLE_GEM__GITHUB_USERNAME\fR): Sets a GitHub username or organization to be used in \fBREADME\fR file when you create a new gem via \fBbundle gem\fR command\. It can be overridden by passing an explicit \fB\-\-github\-username\fR flag to \fBbundle gem\fR\.
|
|
197
|
+
.
|
|
198
|
+
.IP "\(bu" 4
|
|
202
199
|
\fBgem\.push_key\fR (\fBBUNDLE_GEM__PUSH_KEY\fR): Sets the \fB\-\-key\fR parameter for \fBgem push\fR when using the \fBrake release\fR command with a private gemstash server\.
|
|
203
200
|
.
|
|
204
201
|
.IP "\(bu" 4
|
|
@@ -211,10 +208,10 @@ The following is a list of all configuration keys and their purpose\. You can le
|
|
|
211
208
|
\fBignore_messages\fR (\fBBUNDLE_IGNORE_MESSAGES\fR): When set, no post install messages will be printed\. To silence a single gem, use dot notation like \fBignore_messages\.httparty true\fR\.
|
|
212
209
|
.
|
|
213
210
|
.IP "\(bu" 4
|
|
214
|
-
\fBinit_gems_rb\fR (\fBBUNDLE_INIT_GEMS_RB\fR) Generate a \fBgems\.rb\fR instead of a \fBGemfile\fR when running \fBbundle init\fR\.
|
|
211
|
+
\fBinit_gems_rb\fR (\fBBUNDLE_INIT_GEMS_RB\fR): Generate a \fBgems\.rb\fR instead of a \fBGemfile\fR when running \fBbundle init\fR\.
|
|
215
212
|
.
|
|
216
213
|
.IP "\(bu" 4
|
|
217
|
-
\fBjobs\fR (\fBBUNDLE_JOBS\fR): The number of gems Bundler can install in parallel\. Defaults to
|
|
214
|
+
\fBjobs\fR (\fBBUNDLE_JOBS\fR): The number of gems Bundler can install in parallel\. Defaults to the number of available processors\.
|
|
218
215
|
.
|
|
219
216
|
.IP "\(bu" 4
|
|
220
217
|
\fBno_install\fR (\fBBUNDLE_NO_INSTALL\fR): Whether \fBbundle package\fR should skip installing gems\.
|
|
@@ -223,9 +220,6 @@ The following is a list of all configuration keys and their purpose\. You can le
|
|
|
223
220
|
\fBno_prune\fR (\fBBUNDLE_NO_PRUNE\fR): Whether Bundler should leave outdated gems unpruned when caching\.
|
|
224
221
|
.
|
|
225
222
|
.IP "\(bu" 4
|
|
226
|
-
\fBonly_update_to_newer_versions\fR (\fBBUNDLE_ONLY_UPDATE_TO_NEWER_VERSIONS\fR): During \fBbundle update\fR, only resolve to newer versions of the gems in the lockfile\.
|
|
227
|
-
.
|
|
228
|
-
.IP "\(bu" 4
|
|
229
223
|
\fBpath\fR (\fBBUNDLE_PATH\fR): The location on disk where all gems in your bundle will be located regardless of \fB$GEM_HOME\fR or \fB$GEM_PATH\fR values\. Bundle gems not found in this location will be installed by \fBbundle install\fR\. Defaults to \fBGem\.dir\fR\. When \-\-deployment is used, defaults to vendor/bundle\.
|
|
230
224
|
.
|
|
231
225
|
.IP "\(bu" 4
|
|
@@ -241,7 +235,7 @@ The following is a list of all configuration keys and their purpose\. You can le
|
|
|
241
235
|
\fBprefer_patch\fR (BUNDLE_PREFER_PATCH): Prefer updating only to next patch version during updates\. Makes \fBbundle update\fR calls equivalent to \fBbundler update \-\-patch\fR\.
|
|
242
236
|
.
|
|
243
237
|
.IP "\(bu" 4
|
|
244
|
-
\fBprint_only_version_number\fR (\fBBUNDLE_PRINT_ONLY_VERSION_NUMBER\fR) Print only version number from \fBbundler \-\-version\fR\.
|
|
238
|
+
\fBprint_only_version_number\fR (\fBBUNDLE_PRINT_ONLY_VERSION_NUMBER\fR): Print only version number from \fBbundler \-\-version\fR\.
|
|
245
239
|
.
|
|
246
240
|
.IP "\(bu" 4
|
|
247
241
|
\fBredirect\fR (\fBBUNDLE_REDIRECT\fR): The number of redirects allowed for network requests\. Defaults to \fB5\fR\.
|
|
@@ -280,10 +274,7 @@ The following is a list of all configuration keys and their purpose\. You can le
|
|
|
280
274
|
\fBtimeout\fR (\fBBUNDLE_TIMEOUT\fR): The seconds allowed before timing out for network requests\. Defaults to \fB10\fR\.
|
|
281
275
|
.
|
|
282
276
|
.IP "\(bu" 4
|
|
283
|
-
\
|
|
284
|
-
.
|
|
285
|
-
.IP "\(bu" 4
|
|
286
|
-
\fBupdate_requires_all_flag\fR (\fBBUNDLE_UPDATE_REQUIRES_ALL_FLAG\fR) Require passing \fB\-\-all\fR to \fBbundle update\fR when everything should be updated, and disallow passing no options to \fBbundle update\fR\.
|
|
277
|
+
\fBupdate_requires_all_flag\fR (\fBBUNDLE_UPDATE_REQUIRES_ALL_FLAG\fR): Require passing \fB\-\-all\fR to \fBbundle update\fR when everything should be updated, and disallow passing no options to \fBbundle update\fR\.
|
|
287
278
|
.
|
|
288
279
|
.IP "\(bu" 4
|
|
289
280
|
\fBuser_agent\fR (\fBBUNDLE_USER_AGENT\fR): The custom user agent fragment Bundler includes in API requests\.
|
|
@@ -458,7 +449,7 @@ export BUNDLE_GITHUB__COM=username:password
|
|
|
458
449
|
.IP "" 0
|
|
459
450
|
.
|
|
460
451
|
.P
|
|
461
|
-
This is especially useful for private repositories on hosts such as
|
|
452
|
+
This is especially useful for private repositories on hosts such as GitHub, where you can use personal OAuth tokens:
|
|
462
453
|
.
|
|
463
454
|
.IP "" 4
|
|
464
455
|
.
|
|
@@ -470,6 +461,23 @@ export BUNDLE_GITHUB__COM=abcd0123generatedtoken:x\-oauth\-basic
|
|
|
470
461
|
.
|
|
471
462
|
.IP "" 0
|
|
472
463
|
.
|
|
464
|
+
.P
|
|
465
|
+
Note that any configured credentials will be redacted by informative commands such as \fBbundle config list\fR or \fBbundle config get\fR, unless you use the \fB\-\-parseable\fR flag\. This is to avoid unintentionally leaking credentials when copy\-pasting bundler output\.
|
|
466
|
+
.
|
|
467
|
+
.P
|
|
468
|
+
Also note that to guarantee a sane mapping between valid environment variable names and valid host names, bundler makes the following transformations:
|
|
469
|
+
.
|
|
470
|
+
.IP "\(bu" 4
|
|
471
|
+
Any \fB\-\fR characters in a host name are mapped to a triple dash (\fB___\fR) in the corresponding environment variable\.
|
|
472
|
+
.
|
|
473
|
+
.IP "\(bu" 4
|
|
474
|
+
Any \fB\.\fR characters in a host name are mapped to a double dash (\fB__\fR) in the corresponding environment variable\.
|
|
475
|
+
.
|
|
476
|
+
.IP "" 0
|
|
477
|
+
.
|
|
478
|
+
.P
|
|
479
|
+
This means that if you have a gem server named \fBmy\.gem\-host\.com\fR, you\'ll need to use the \fBBUNDLE_MY__GEM___HOST__COM\fR variable to configure credentials for it through ENV\.
|
|
480
|
+
.
|
|
473
481
|
.SH "CONFIGURE BUNDLER DIRECTORIES"
|
|
474
482
|
Bundler\'s home, config, cache and plugin directories are able to be configured through environment variables\. The default location for Bundler\'s home directory is \fB~/\.bundle\fR, which all directories inherit from by default\. The following outlines the available environment variables and their default values
|
|
475
483
|
.
|