bundler 2.5.23 → 2.6.0
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 +59 -0
- data/bundler.gemspec +2 -2
- data/lib/bundler/build_metadata.rb +2 -2
- data/lib/bundler/cli/console.rb +0 -4
- data/lib/bundler/cli/doctor.rb +4 -4
- data/lib/bundler/cli/exec.rb +1 -0
- data/lib/bundler/cli/gem.rb +1 -1
- data/lib/bundler/cli/info.rb +2 -2
- data/lib/bundler/cli/inject.rb +1 -1
- data/lib/bundler/cli/install.rb +4 -0
- data/lib/bundler/cli/lock.rb +20 -1
- data/lib/bundler/cli/pristine.rb +1 -1
- data/lib/bundler/cli/show.rb +2 -2
- data/lib/bundler/cli.rb +22 -53
- data/lib/bundler/compact_index_client/cache_file.rb +0 -5
- data/lib/bundler/compact_index_client/updater.rb +0 -11
- data/lib/bundler/definition.rb +134 -61
- data/lib/bundler/dependency.rb +1 -1
- data/lib/bundler/dsl.rb +2 -13
- data/lib/bundler/endpoint_specification.rb +10 -1
- data/lib/bundler/errors.rb +10 -0
- data/lib/bundler/feature_flag.rb +1 -0
- data/lib/bundler/fetcher/compact_index.rb +1 -1
- data/lib/bundler/fetcher.rb +10 -3
- data/lib/bundler/gem_helpers.rb +21 -5
- data/lib/bundler/injector.rb +2 -2
- data/lib/bundler/installer/standalone.rb +2 -2
- data/lib/bundler/installer.rb +4 -38
- data/lib/bundler/lazy_specification.rb +65 -24
- data/lib/bundler/lockfile_parser.rb +9 -1
- data/lib/bundler/man/bundle-add.1 +13 -10
- data/lib/bundler/man/bundle-add.1.ronn +12 -9
- data/lib/bundler/man/bundle-binstubs.1 +7 -4
- data/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
- data/lib/bundler/man/bundle-cache.1 +30 -2
- data/lib/bundler/man/bundle-cache.1.ronn +31 -2
- data/lib/bundler/man/bundle-check.1 +3 -3
- data/lib/bundler/man/bundle-check.1.ronn +4 -2
- data/lib/bundler/man/bundle-clean.1 +1 -1
- data/lib/bundler/man/bundle-config.1 +3 -1
- data/lib/bundler/man/bundle-config.1.ronn +2 -0
- data/lib/bundler/man/bundle-console.1 +2 -4
- data/lib/bundler/man/bundle-console.1.ronn +2 -7
- data/lib/bundler/man/bundle-doctor.1 +2 -2
- data/lib/bundler/man/bundle-doctor.1.ronn +1 -1
- data/lib/bundler/man/bundle-env.1 +9 -0
- data/lib/bundler/man/bundle-env.1.ronn +10 -0
- data/lib/bundler/man/bundle-exec.1 +5 -2
- data/lib/bundler/man/bundle-exec.1.ronn +4 -1
- data/lib/bundler/man/bundle-fund.1 +22 -0
- data/lib/bundler/man/bundle-fund.1.ronn +25 -0
- data/lib/bundler/man/bundle-gem.1 +17 -5
- data/lib/bundler/man/bundle-gem.1.ronn +27 -6
- data/lib/bundler/man/bundle-help.1 +1 -1
- data/lib/bundler/man/bundle-info.1 +5 -2
- data/lib/bundler/man/bundle-info.1.ronn +6 -2
- data/lib/bundler/man/bundle-init.1 +3 -3
- data/lib/bundler/man/bundle-init.1.ronn +3 -2
- data/lib/bundler/man/bundle-inject.1 +10 -2
- data/lib/bundler/man/bundle-inject.1.ronn +9 -1
- data/lib/bundler/man/bundle-install.1 +14 -11
- data/lib/bundler/man/bundle-install.1.ronn +21 -16
- data/lib/bundler/man/bundle-issue.1 +45 -0
- data/lib/bundler/man/bundle-issue.1.ronn +37 -0
- data/lib/bundler/man/bundle-licenses.1 +9 -0
- data/lib/bundler/man/bundle-licenses.1.ronn +10 -0
- data/lib/bundler/man/bundle-list.1 +1 -1
- data/lib/bundler/man/bundle-list.1.ronn +4 -1
- data/lib/bundler/man/bundle-lock.1 +21 -6
- data/lib/bundler/man/bundle-lock.1.ronn +25 -4
- data/lib/bundler/man/bundle-open.1 +2 -2
- data/lib/bundler/man/bundle-open.1.ronn +2 -1
- data/lib/bundler/man/bundle-outdated.1 +8 -5
- data/lib/bundler/man/bundle-outdated.1.ronn +8 -4
- 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-pristine.1.ronn +1 -1
- data/lib/bundler/man/bundle-remove.1 +1 -1
- data/lib/bundler/man/bundle-remove.1.ronn +1 -1
- data/lib/bundler/man/bundle-show.1 +5 -2
- data/lib/bundler/man/bundle-show.1.ronn +4 -0
- data/lib/bundler/man/bundle-update.1 +13 -7
- data/lib/bundler/man/bundle-update.1.ronn +14 -6
- data/lib/bundler/man/bundle-version.1 +1 -1
- data/lib/bundler/man/bundle-viz.1 +4 -4
- data/lib/bundler/man/bundle-viz.1.ronn +7 -3
- data/lib/bundler/man/bundle.1 +1 -1
- data/lib/bundler/man/gemfile.5 +1 -1
- data/lib/bundler/man/index.txt +4 -0
- data/lib/bundler/materialization.rb +59 -0
- data/lib/bundler/plugin/events.rb +24 -0
- data/lib/bundler/plugin/installer.rb +1 -1
- data/lib/bundler/process_lock.rb +1 -1
- data/lib/bundler/remote_specification.rb +6 -1
- data/lib/bundler/resolver/base.rb +2 -6
- data/lib/bundler/resolver/candidate.rb +2 -2
- data/lib/bundler/resolver/spec_group.rb +4 -3
- data/lib/bundler/resolver.rb +5 -5
- data/lib/bundler/rubygems_ext.rb +17 -28
- data/lib/bundler/rubygems_gem_installer.rb +0 -1
- data/lib/bundler/rubygems_integration.rb +21 -11
- data/lib/bundler/runtime.rb +27 -7
- data/lib/bundler/self_manager.rb +2 -3
- data/lib/bundler/settings.rb +1 -0
- data/lib/bundler/shared_helpers.rb +2 -2
- data/lib/bundler/source/git/git_proxy.rb +0 -6
- data/lib/bundler/source/git.rb +56 -31
- data/lib/bundler/source/path.rb +2 -2
- data/lib/bundler/source_list.rb +1 -1
- data/lib/bundler/spec_set.rb +81 -56
- data/lib/bundler/stub_specification.rb +8 -0
- data/lib/bundler/templates/newgem/README.md.tt +1 -1
- data/lib/bundler/uri_credentials_filter.rb +1 -1
- data/lib/bundler/vendor/fileutils/COPYING +56 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +15 -13
- data/lib/bundler/vendor/securerandom/COPYING +56 -0
- data/lib/bundler/vendor/securerandom/lib/securerandom.rb +5 -5
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +3 -5
- data/lib/bundler/vendor/thor/lib/thor/group.rb +11 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +1 -4
- data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +2 -2
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +2 -1
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +9 -9
- data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +5 -21
- 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 +11 -0
- data/lib/bundler/vendor/uri/COPYING +56 -0
- data/lib/bundler/vendor/uri/lib/uri/common.rb +37 -16
- data/lib/bundler/vendor/uri/lib/uri/file.rb +3 -3
- data/lib/bundler/vendor/uri/lib/uri/ftp.rb +1 -1
- data/lib/bundler/vendor/uri/lib/uri/generic.rb +16 -26
- data/lib/bundler/vendor/uri/lib/uri/http.rb +2 -2
- data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +10 -3
- data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +26 -3
- data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/lib/bundler/vendor/uri/lib/uri.rb +9 -9
- data/lib/bundler/vendored_securerandom.rb +0 -2
- data/lib/bundler/version.rb +1 -1
- data/lib/bundler.rb +37 -13
- metadata +18 -12
- data/lib/bundler/vendor/fileutils/LICENSE.txt +0 -22
- data/lib/bundler/vendor/securerandom/LICENSE.txt +0 -22
- data/lib/bundler/vendor/securerandom/lib/random/formatter.rb +0 -373
- data/lib/bundler/vendor/uri/LICENSE.txt +0 -22
data/lib/bundler/source/git.rb
CHANGED
|
@@ -102,7 +102,7 @@ module Bundler
|
|
|
102
102
|
end
|
|
103
103
|
|
|
104
104
|
def identifier
|
|
105
|
-
uri_with_specifiers([humanized_ref,
|
|
105
|
+
uri_with_specifiers([humanized_ref, locked_revision, glob_for_display])
|
|
106
106
|
end
|
|
107
107
|
|
|
108
108
|
def uri_with_specifiers(specifiers)
|
|
@@ -176,10 +176,10 @@ module Bundler
|
|
|
176
176
|
"#{current_branch} but Gemfile specifies #{branch}"
|
|
177
177
|
end
|
|
178
178
|
|
|
179
|
-
changed =
|
|
179
|
+
changed = locked_revision && locked_revision != revision
|
|
180
180
|
|
|
181
|
-
if !Bundler.settings[:disable_local_revision_check] && changed && !@unlocked && !git_proxy.contains?(
|
|
182
|
-
raise GitError, "The Gemfile lock is pointing to revision #{shortref_for_display(
|
|
181
|
+
if !Bundler.settings[:disable_local_revision_check] && changed && !@unlocked && !git_proxy.contains?(locked_revision)
|
|
182
|
+
raise GitError, "The Gemfile lock is pointing to revision #{shortref_for_display(locked_revision)} " \
|
|
183
183
|
"but the current branch in your local override for #{name} does not contain such commit. " \
|
|
184
184
|
"Please make sure your branch is up to date."
|
|
185
185
|
end
|
|
@@ -188,12 +188,10 @@ module Bundler
|
|
|
188
188
|
end
|
|
189
189
|
|
|
190
190
|
def specs(*)
|
|
191
|
-
|
|
191
|
+
set_cache_path!(app_cache_path) if use_app_cache?
|
|
192
192
|
|
|
193
193
|
if requires_checkout? && !@copied
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
fetch
|
|
194
|
+
fetch unless use_app_cache?
|
|
197
195
|
checkout
|
|
198
196
|
end
|
|
199
197
|
|
|
@@ -216,17 +214,16 @@ module Bundler
|
|
|
216
214
|
requires_checkout? ? spec.post_install_message : nil
|
|
217
215
|
end
|
|
218
216
|
|
|
217
|
+
def migrate_cache(custom_path = nil, local: false)
|
|
218
|
+
if local
|
|
219
|
+
cache_to(custom_path, try_migrate: false)
|
|
220
|
+
else
|
|
221
|
+
cache_to(custom_path, try_migrate: true)
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
|
|
219
225
|
def cache(spec, custom_path = nil)
|
|
220
|
-
|
|
221
|
-
return unless Bundler.feature_flag.cache_all?
|
|
222
|
-
return if install_path == app_cache_path
|
|
223
|
-
return if cache_path == app_cache_path
|
|
224
|
-
cached!
|
|
225
|
-
FileUtils.rm_rf(app_cache_path)
|
|
226
|
-
git_proxy.checkout if requires_checkout?
|
|
227
|
-
FileUtils.cp_r("#{cache_path}/.", app_cache_path)
|
|
228
|
-
FileUtils.touch(app_cache_path.join(".bundlecache"))
|
|
229
|
-
FileUtils.rm_rf(Dir.glob(app_cache_path.join("hooks/*.sample")))
|
|
226
|
+
cache_to(custom_path, try_migrate: false)
|
|
230
227
|
end
|
|
231
228
|
|
|
232
229
|
def load_spec_files
|
|
@@ -249,7 +246,7 @@ module Bundler
|
|
|
249
246
|
end
|
|
250
247
|
|
|
251
248
|
def app_cache_dirname
|
|
252
|
-
"#{base_name}-#{shortref_for_path(
|
|
249
|
+
"#{base_name}-#{shortref_for_path(locked_revision || revision)}"
|
|
253
250
|
end
|
|
254
251
|
|
|
255
252
|
def revision
|
|
@@ -270,9 +267,38 @@ module Bundler
|
|
|
270
267
|
|
|
271
268
|
private
|
|
272
269
|
|
|
270
|
+
def cache_to(custom_path, try_migrate: false)
|
|
271
|
+
return unless Bundler.feature_flag.cache_all?
|
|
272
|
+
|
|
273
|
+
app_cache_path = app_cache_path(custom_path)
|
|
274
|
+
|
|
275
|
+
migrate = try_migrate ? bare_repo?(app_cache_path) : false
|
|
276
|
+
|
|
277
|
+
set_cache_path!(nil) if migrate
|
|
278
|
+
|
|
279
|
+
return if cache_path == app_cache_path
|
|
280
|
+
|
|
281
|
+
cached!
|
|
282
|
+
FileUtils.rm_rf(app_cache_path)
|
|
283
|
+
git_proxy.checkout if migrate || requires_checkout?
|
|
284
|
+
git_proxy.copy_to(app_cache_path, @submodules)
|
|
285
|
+
end
|
|
286
|
+
|
|
273
287
|
def checkout
|
|
274
288
|
Bundler.ui.debug " * Checking out revision: #{ref}"
|
|
275
|
-
|
|
289
|
+
if use_app_cache? && !bare_repo?(app_cache_path)
|
|
290
|
+
SharedHelpers.filesystem_access(install_path.dirname) do |p|
|
|
291
|
+
FileUtils.mkdir_p(p)
|
|
292
|
+
end
|
|
293
|
+
FileUtils.cp_r("#{app_cache_path}/.", install_path)
|
|
294
|
+
else
|
|
295
|
+
if use_app_cache? && bare_repo?(app_cache_path)
|
|
296
|
+
Bundler.ui.warn "Installing from cache in old \"bare repository\" format for compatibility. " \
|
|
297
|
+
"Please run `bundle cache` and commit the updated cache to migrate to the new format and get rid of this warning."
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
git_proxy.copy_to(install_path, submodules)
|
|
301
|
+
end
|
|
276
302
|
serialize_gemspecs_in(install_path)
|
|
277
303
|
@copied = true
|
|
278
304
|
end
|
|
@@ -320,13 +346,8 @@ module Bundler
|
|
|
320
346
|
@install_path = path
|
|
321
347
|
end
|
|
322
348
|
|
|
323
|
-
def set_up_app_cache!(path)
|
|
324
|
-
FileUtils.mkdir_p(path.join("refs"))
|
|
325
|
-
set_cache_path!(path)
|
|
326
|
-
end
|
|
327
|
-
|
|
328
349
|
def has_app_cache?
|
|
329
|
-
|
|
350
|
+
locked_revision && super
|
|
330
351
|
end
|
|
331
352
|
|
|
332
353
|
def use_app_cache?
|
|
@@ -334,11 +355,11 @@ module Bundler
|
|
|
334
355
|
end
|
|
335
356
|
|
|
336
357
|
def requires_checkout?
|
|
337
|
-
allow_git_ops? && !local? && !
|
|
358
|
+
allow_git_ops? && !local? && !locked_revision_checked_out?
|
|
338
359
|
end
|
|
339
360
|
|
|
340
|
-
def
|
|
341
|
-
|
|
361
|
+
def locked_revision_checked_out?
|
|
362
|
+
locked_revision && locked_revision == revision && install_path.exist?
|
|
342
363
|
end
|
|
343
364
|
|
|
344
365
|
def base_name
|
|
@@ -375,7 +396,7 @@ module Bundler
|
|
|
375
396
|
Bundler::Digest.sha1(input)
|
|
376
397
|
end
|
|
377
398
|
|
|
378
|
-
def
|
|
399
|
+
def locked_revision
|
|
379
400
|
options["revision"]
|
|
380
401
|
end
|
|
381
402
|
|
|
@@ -384,7 +405,7 @@ module Bundler
|
|
|
384
405
|
end
|
|
385
406
|
|
|
386
407
|
def git_proxy
|
|
387
|
-
@git_proxy ||= GitProxy.new(cache_path, uri, options,
|
|
408
|
+
@git_proxy ||= GitProxy.new(cache_path, uri, options, locked_revision, self)
|
|
388
409
|
end
|
|
389
410
|
|
|
390
411
|
def fetch
|
|
@@ -417,6 +438,10 @@ module Bundler
|
|
|
417
438
|
def override_for(path)
|
|
418
439
|
Bundler.settings.local_overrides.key(path)
|
|
419
440
|
end
|
|
441
|
+
|
|
442
|
+
def bare_repo?(path)
|
|
443
|
+
File.exist?(path.join("objects")) && File.exist?(path.join("HEAD"))
|
|
444
|
+
end
|
|
420
445
|
end
|
|
421
446
|
end
|
|
422
447
|
end
|
data/lib/bundler/source/path.rb
CHANGED
|
@@ -214,7 +214,7 @@ module Bundler
|
|
|
214
214
|
|
|
215
215
|
# Some gem authors put absolute paths in their gemspec
|
|
216
216
|
# and we have to save them from themselves
|
|
217
|
-
spec.files = spec.files.
|
|
217
|
+
spec.files = spec.files.filter_map do |path|
|
|
218
218
|
next path unless /\A#{Pathname::SEPARATOR_PAT}/o.match?(path)
|
|
219
219
|
next if File.directory?(path)
|
|
220
220
|
begin
|
|
@@ -222,7 +222,7 @@ module Bundler
|
|
|
222
222
|
rescue ArgumentError
|
|
223
223
|
path
|
|
224
224
|
end
|
|
225
|
-
end
|
|
225
|
+
end
|
|
226
226
|
|
|
227
227
|
installer = Path::Installer.new(
|
|
228
228
|
spec,
|
data/lib/bundler/source_list.rb
CHANGED
data/lib/bundler/spec_set.rb
CHANGED
|
@@ -7,49 +7,44 @@ module Bundler
|
|
|
7
7
|
include Enumerable
|
|
8
8
|
include TSort
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
def initialize(specs, incomplete_specs = [])
|
|
10
|
+
def initialize(specs)
|
|
13
11
|
@specs = specs
|
|
14
|
-
@incomplete_specs = incomplete_specs
|
|
15
12
|
end
|
|
16
13
|
|
|
17
|
-
def for(dependencies,
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
def for(dependencies, platforms_or_legacy_check = [nil], legacy_platforms = [nil], skips: [])
|
|
15
|
+
platforms = if [true, false].include?(platforms_or_legacy_check)
|
|
16
|
+
Bundler::SharedHelpers.major_deprecation 2,
|
|
17
|
+
"SpecSet#for received a `check` parameter, but that's no longer used and deprecated. " \
|
|
18
|
+
"SpecSet#for always implicitly performs validation. Please remove this parameter",
|
|
19
|
+
print_caller_location: true
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
legacy_platforms
|
|
22
|
+
else
|
|
23
|
+
platforms_or_legacy_check
|
|
24
|
+
end
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
platform = dep[1]
|
|
27
|
-
incomplete = false
|
|
26
|
+
materialize_dependencies(dependencies, platforms, skips: skips)
|
|
28
27
|
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
@materializations.flat_map(&:specs).uniq
|
|
29
|
+
end
|
|
31
30
|
|
|
32
|
-
|
|
31
|
+
def normalize_platforms!(deps, platforms)
|
|
32
|
+
complete_platforms = add_extra_platforms!(platforms)
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
if
|
|
36
|
-
specs.concat(specs_for_dep)
|
|
34
|
+
complete_platforms.map do |platform|
|
|
35
|
+
next platform if platform == Gem::Platform::RUBY
|
|
37
36
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
end
|
|
43
|
-
else
|
|
44
|
-
incomplete = true
|
|
37
|
+
begin
|
|
38
|
+
Integer(platform.version)
|
|
39
|
+
rescue ArgumentError, TypeError
|
|
40
|
+
next platform
|
|
45
41
|
end
|
|
46
42
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
end
|
|
50
|
-
end
|
|
43
|
+
less_specific_platform = Gem::Platform.new([platform.cpu, platform.os, nil])
|
|
44
|
+
next platform if incomplete_for_platform?(deps, less_specific_platform)
|
|
51
45
|
|
|
52
|
-
|
|
46
|
+
less_specific_platform
|
|
47
|
+
end.uniq
|
|
53
48
|
end
|
|
54
49
|
|
|
55
50
|
def add_extra_platforms!(platforms)
|
|
@@ -112,19 +107,18 @@ module Bundler
|
|
|
112
107
|
end
|
|
113
108
|
|
|
114
109
|
def materialize(deps)
|
|
115
|
-
|
|
110
|
+
materialize_dependencies(deps)
|
|
116
111
|
|
|
117
|
-
SpecSet.new(
|
|
112
|
+
SpecSet.new(materialized_specs)
|
|
118
113
|
end
|
|
119
114
|
|
|
120
115
|
# Materialize for all the specs in the spec set, regardless of what platform they're for
|
|
121
|
-
# This is in contrast to how for does platform filtering (and specifically different from how `materialize` calls `for` only for the current platform)
|
|
122
116
|
# @return [Array<Gem::Specification>]
|
|
123
117
|
def materialized_for_all_platforms
|
|
124
118
|
@specs.map do |s|
|
|
125
119
|
next s unless s.is_a?(LazySpecification)
|
|
126
120
|
s.source.remote!
|
|
127
|
-
spec = s.
|
|
121
|
+
spec = s.materialize_strictly
|
|
128
122
|
raise GemNotFound, "Could not find #{s.full_name} in any of the sources" unless spec
|
|
129
123
|
spec
|
|
130
124
|
end
|
|
@@ -133,15 +127,32 @@ module Bundler
|
|
|
133
127
|
def incomplete_for_platform?(deps, platform)
|
|
134
128
|
return false if @specs.empty?
|
|
135
129
|
|
|
136
|
-
|
|
130
|
+
validation_set = self.class.new(@specs)
|
|
131
|
+
validation_set.for(deps, [platform])
|
|
132
|
+
|
|
133
|
+
validation_set.incomplete_specs.any?
|
|
134
|
+
end
|
|
137
135
|
|
|
138
|
-
|
|
136
|
+
def missing_specs_for(dependencies)
|
|
137
|
+
materialize_dependencies(dependencies)
|
|
139
138
|
|
|
140
|
-
|
|
139
|
+
missing_specs
|
|
141
140
|
end
|
|
142
141
|
|
|
143
142
|
def missing_specs
|
|
144
|
-
@
|
|
143
|
+
@materializations.flat_map(&:completely_missing_specs)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def partially_missing_specs
|
|
147
|
+
@materializations.flat_map(&:partially_missing_specs)
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def incomplete_specs
|
|
151
|
+
@materializations.flat_map(&:incomplete_specs)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def insecurely_materialized_specs
|
|
155
|
+
materialized_specs.select(&:insecurely_materialized?)
|
|
145
156
|
end
|
|
146
157
|
|
|
147
158
|
def -(other)
|
|
@@ -152,12 +163,6 @@ module Bundler
|
|
|
152
163
|
@specs.detect {|spec| spec.name == name && spec.match_platform(platform) }
|
|
153
164
|
end
|
|
154
165
|
|
|
155
|
-
def specs_compatible_with(other)
|
|
156
|
-
select do |spec|
|
|
157
|
-
other.valid?(spec)
|
|
158
|
-
end
|
|
159
|
-
end
|
|
160
|
-
|
|
161
166
|
def delete_by_name(name)
|
|
162
167
|
@specs.reject! {|spec| spec.name == name }
|
|
163
168
|
|
|
@@ -201,6 +206,37 @@ module Bundler
|
|
|
201
206
|
|
|
202
207
|
private
|
|
203
208
|
|
|
209
|
+
def materialize_dependencies(dependencies, platforms = [nil], skips: [])
|
|
210
|
+
handled = ["bundler"].product(platforms).map {|k| [k, true] }.to_h
|
|
211
|
+
deps = dependencies.product(platforms)
|
|
212
|
+
@materializations = []
|
|
213
|
+
|
|
214
|
+
loop do
|
|
215
|
+
break unless dep = deps.shift
|
|
216
|
+
|
|
217
|
+
dependency = dep[0]
|
|
218
|
+
platform = dep[1]
|
|
219
|
+
name = dependency.name
|
|
220
|
+
|
|
221
|
+
key = [name, platform]
|
|
222
|
+
next if handled.key?(key)
|
|
223
|
+
|
|
224
|
+
handled[key] = true
|
|
225
|
+
|
|
226
|
+
materialization = Materialization.new(dependency, platform, candidates: lookup[name])
|
|
227
|
+
|
|
228
|
+
deps.concat(materialization.dependencies) if materialization.complete?
|
|
229
|
+
|
|
230
|
+
@materializations << materialization unless skips.include?(name)
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
@materializations
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
def materialized_specs
|
|
237
|
+
@materializations.filter_map(&:materialized_spec)
|
|
238
|
+
end
|
|
239
|
+
|
|
204
240
|
def reset!
|
|
205
241
|
@sorted = nil
|
|
206
242
|
@lookup = nil
|
|
@@ -273,17 +309,6 @@ module Bundler
|
|
|
273
309
|
@specs.sort_by(&:name).each {|s| yield s }
|
|
274
310
|
end
|
|
275
311
|
|
|
276
|
-
def specs_for_dependency(dep, platform)
|
|
277
|
-
specs_for_name = lookup[dep.name]
|
|
278
|
-
return [] unless specs_for_name
|
|
279
|
-
|
|
280
|
-
if platform
|
|
281
|
-
GemHelpers.select_best_platform_match(specs_for_name, platform, force_ruby: dep.force_ruby_platform)
|
|
282
|
-
else
|
|
283
|
-
GemHelpers.select_best_local_platform_match(specs_for_name, force_ruby: dep.force_ruby_platform || dep.default_force_ruby_platform)
|
|
284
|
-
end
|
|
285
|
-
end
|
|
286
|
-
|
|
287
312
|
def tsort_each_child(s)
|
|
288
313
|
s.dependencies.sort_by(&:name).each do |d|
|
|
289
314
|
next if d.type == :development
|
|
@@ -9,6 +9,10 @@ module Bundler
|
|
|
9
9
|
spec
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
+
def insecurely_materialized?
|
|
13
|
+
false
|
|
14
|
+
end
|
|
15
|
+
|
|
12
16
|
attr_reader :checksum
|
|
13
17
|
attr_accessor :stub, :ignored
|
|
14
18
|
|
|
@@ -112,6 +116,10 @@ module Bundler
|
|
|
112
116
|
stub.raw_require_paths
|
|
113
117
|
end
|
|
114
118
|
|
|
119
|
+
def inspect
|
|
120
|
+
"#<#{self.class} @name=\"#{name}\" (#{full_name.delete_prefix("#{name}-")})>"
|
|
121
|
+
end
|
|
122
|
+
|
|
115
123
|
private
|
|
116
124
|
|
|
117
125
|
def _remote_specification
|
|
@@ -26,7 +26,7 @@ TODO: Write usage instructions here
|
|
|
26
26
|
|
|
27
27
|
## Development
|
|
28
28
|
|
|
29
|
-
After checking out the repo, run `bin/setup` to install dependencies.<% if config[:test] %> Then, run `rake <%= config[:
|
|
29
|
+
After checking out the repo, run `bin/setup` to install dependencies.<% if config[:test] %> Then, run `rake <%= config[:test_task] %>` to run the tests.<% end %> You can also run `bin/console` for an interactive prompt that will allow you to experiment.<% if config[:bin] %> Run `bundle exec <%= config[:name] %>` to use the gem in this directory, ignoring other installed copies of this gem.<% end %>
|
|
30
30
|
|
|
31
31
|
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
|
32
32
|
<% if config[:git] -%>
|
|
@@ -16,7 +16,7 @@ module Bundler
|
|
|
16
16
|
|
|
17
17
|
if uri.userinfo
|
|
18
18
|
# oauth authentication
|
|
19
|
-
if uri.password == "x-oauth-basic" || uri.password == "x"
|
|
19
|
+
if uri.password == "x-oauth-basic" || uri.password == "x" || uri.password.nil?
|
|
20
20
|
# URI as string does not display with password if no user is set
|
|
21
21
|
oauth_designation = uri.password
|
|
22
22
|
uri.user = oauth_designation
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
|
|
2
|
+
You can redistribute it and/or modify it under either the terms of the
|
|
3
|
+
2-clause BSDL (see the file BSDL), or the conditions below:
|
|
4
|
+
|
|
5
|
+
1. You may make and give away verbatim copies of the source form of the
|
|
6
|
+
software without restriction, provided that you duplicate all of the
|
|
7
|
+
original copyright notices and associated disclaimers.
|
|
8
|
+
|
|
9
|
+
2. You may modify your copy of the software in any way, provided that
|
|
10
|
+
you do at least ONE of the following:
|
|
11
|
+
|
|
12
|
+
a. place your modifications in the Public Domain or otherwise
|
|
13
|
+
make them Freely Available, such as by posting said
|
|
14
|
+
modifications to Usenet or an equivalent medium, or by allowing
|
|
15
|
+
the author to include your modifications in the software.
|
|
16
|
+
|
|
17
|
+
b. use the modified software only within your corporation or
|
|
18
|
+
organization.
|
|
19
|
+
|
|
20
|
+
c. give non-standard binaries non-standard names, with
|
|
21
|
+
instructions on where to get the original software distribution.
|
|
22
|
+
|
|
23
|
+
d. make other distribution arrangements with the author.
|
|
24
|
+
|
|
25
|
+
3. You may distribute the software in object code or binary form,
|
|
26
|
+
provided that you do at least ONE of the following:
|
|
27
|
+
|
|
28
|
+
a. distribute the binaries and library files of the software,
|
|
29
|
+
together with instructions (in the manual page or equivalent)
|
|
30
|
+
on where to get the original distribution.
|
|
31
|
+
|
|
32
|
+
b. accompany the distribution with the machine-readable source of
|
|
33
|
+
the software.
|
|
34
|
+
|
|
35
|
+
c. give non-standard binaries non-standard names, with
|
|
36
|
+
instructions on where to get the original software distribution.
|
|
37
|
+
|
|
38
|
+
d. make other distribution arrangements with the author.
|
|
39
|
+
|
|
40
|
+
4. You may modify and include the part of the software into any other
|
|
41
|
+
software (possibly commercial). But some files in the distribution
|
|
42
|
+
are not written by the author, so that they are not under these terms.
|
|
43
|
+
|
|
44
|
+
For the list of those files and their copying conditions, see the
|
|
45
|
+
file LEGAL.
|
|
46
|
+
|
|
47
|
+
5. The scripts and library files supplied as input to or produced as
|
|
48
|
+
output from the software do not automatically fall under the
|
|
49
|
+
copyright of the software, but belong to whomever generated them,
|
|
50
|
+
and may be sold commercially, and may be aggregated with this
|
|
51
|
+
software.
|
|
52
|
+
|
|
53
|
+
6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
|
54
|
+
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
|
55
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
56
|
+
PURPOSE.
|
|
@@ -180,7 +180,8 @@ end
|
|
|
180
180
|
# - {CVE-2004-0452}[https://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2004-0452].
|
|
181
181
|
#
|
|
182
182
|
module Bundler::FileUtils
|
|
183
|
-
|
|
183
|
+
# The version number.
|
|
184
|
+
VERSION = "1.7.3"
|
|
184
185
|
|
|
185
186
|
def self.private_module_function(name) #:nodoc:
|
|
186
187
|
module_function name
|
|
@@ -1651,7 +1652,7 @@ module Bundler::FileUtils
|
|
|
1651
1652
|
when "a"
|
|
1652
1653
|
mask | 07777
|
|
1653
1654
|
else
|
|
1654
|
-
raise ArgumentError, "invalid
|
|
1655
|
+
raise ArgumentError, "invalid 'who' symbol in file mode: #{chr}"
|
|
1655
1656
|
end
|
|
1656
1657
|
end
|
|
1657
1658
|
end
|
|
@@ -1705,7 +1706,7 @@ module Bundler::FileUtils
|
|
|
1705
1706
|
copy_mask = user_mask(chr)
|
|
1706
1707
|
(current_mode & copy_mask) / (copy_mask & 0111) * (user_mask & 0111)
|
|
1707
1708
|
else
|
|
1708
|
-
raise ArgumentError, "invalid
|
|
1709
|
+
raise ArgumentError, "invalid 'perm' symbol in file mode: #{chr}"
|
|
1709
1710
|
end
|
|
1710
1711
|
end
|
|
1711
1712
|
|
|
@@ -2028,21 +2029,22 @@ module Bundler::FileUtils
|
|
|
2028
2029
|
|
|
2029
2030
|
private
|
|
2030
2031
|
|
|
2031
|
-
module StreamUtils_
|
|
2032
|
+
module StreamUtils_ # :nodoc:
|
|
2033
|
+
|
|
2032
2034
|
private
|
|
2033
2035
|
|
|
2034
2036
|
case (defined?(::RbConfig) ? ::RbConfig::CONFIG['host_os'] : ::RUBY_PLATFORM)
|
|
2035
2037
|
when /mswin|mingw/
|
|
2036
|
-
def fu_windows?; true end
|
|
2038
|
+
def fu_windows?; true end #:nodoc:
|
|
2037
2039
|
else
|
|
2038
|
-
def fu_windows?; false end
|
|
2040
|
+
def fu_windows?; false end #:nodoc:
|
|
2039
2041
|
end
|
|
2040
2042
|
|
|
2041
2043
|
def fu_copy_stream0(src, dest, blksize = nil) #:nodoc:
|
|
2042
2044
|
IO.copy_stream(src, dest)
|
|
2043
2045
|
end
|
|
2044
2046
|
|
|
2045
|
-
def fu_stream_blksize(*streams)
|
|
2047
|
+
def fu_stream_blksize(*streams) #:nodoc:
|
|
2046
2048
|
streams.each do |s|
|
|
2047
2049
|
next unless s.respond_to?(:stat)
|
|
2048
2050
|
size = fu_blksize(s.stat)
|
|
@@ -2051,14 +2053,14 @@ module Bundler::FileUtils
|
|
|
2051
2053
|
fu_default_blksize()
|
|
2052
2054
|
end
|
|
2053
2055
|
|
|
2054
|
-
def fu_blksize(st)
|
|
2056
|
+
def fu_blksize(st) #:nodoc:
|
|
2055
2057
|
s = st.blksize
|
|
2056
2058
|
return nil unless s
|
|
2057
2059
|
return nil if s == 0
|
|
2058
2060
|
s
|
|
2059
2061
|
end
|
|
2060
2062
|
|
|
2061
|
-
def fu_default_blksize
|
|
2063
|
+
def fu_default_blksize #:nodoc:
|
|
2062
2064
|
1024
|
|
2063
2065
|
end
|
|
2064
2066
|
end
|
|
@@ -2503,7 +2505,7 @@ module Bundler::FileUtils
|
|
|
2503
2505
|
end
|
|
2504
2506
|
private_module_function :fu_output_message
|
|
2505
2507
|
|
|
2506
|
-
def fu_split_path(path)
|
|
2508
|
+
def fu_split_path(path) #:nodoc:
|
|
2507
2509
|
path = File.path(path)
|
|
2508
2510
|
list = []
|
|
2509
2511
|
until (parent, base = File.split(path); parent == path or parent == ".")
|
|
@@ -2524,7 +2526,7 @@ module Bundler::FileUtils
|
|
|
2524
2526
|
end
|
|
2525
2527
|
private_module_function :fu_relative_components_from
|
|
2526
2528
|
|
|
2527
|
-
def fu_clean_components(*comp)
|
|
2529
|
+
def fu_clean_components(*comp) #:nodoc:
|
|
2528
2530
|
comp.shift while comp.first == "."
|
|
2529
2531
|
return comp if comp.empty?
|
|
2530
2532
|
clean = [comp.shift]
|
|
@@ -2543,11 +2545,11 @@ module Bundler::FileUtils
|
|
|
2543
2545
|
private_module_function :fu_clean_components
|
|
2544
2546
|
|
|
2545
2547
|
if fu_windows?
|
|
2546
|
-
def fu_starting_path?(path)
|
|
2548
|
+
def fu_starting_path?(path) #:nodoc:
|
|
2547
2549
|
path&.start_with?(%r(\w:|/))
|
|
2548
2550
|
end
|
|
2549
2551
|
else
|
|
2550
|
-
def fu_starting_path?(path)
|
|
2552
|
+
def fu_starting_path?(path) #:nodoc:
|
|
2551
2553
|
path&.start_with?("/")
|
|
2552
2554
|
end
|
|
2553
2555
|
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
|
|
2
|
+
You can redistribute it and/or modify it under either the terms of the
|
|
3
|
+
2-clause BSDL (see the file BSDL), or the conditions below:
|
|
4
|
+
|
|
5
|
+
1. You may make and give away verbatim copies of the source form of the
|
|
6
|
+
software without restriction, provided that you duplicate all of the
|
|
7
|
+
original copyright notices and associated disclaimers.
|
|
8
|
+
|
|
9
|
+
2. You may modify your copy of the software in any way, provided that
|
|
10
|
+
you do at least ONE of the following:
|
|
11
|
+
|
|
12
|
+
a. place your modifications in the Public Domain or otherwise
|
|
13
|
+
make them Freely Available, such as by posting said
|
|
14
|
+
modifications to Usenet or an equivalent medium, or by allowing
|
|
15
|
+
the author to include your modifications in the software.
|
|
16
|
+
|
|
17
|
+
b. use the modified software only within your corporation or
|
|
18
|
+
organization.
|
|
19
|
+
|
|
20
|
+
c. give non-standard binaries non-standard names, with
|
|
21
|
+
instructions on where to get the original software distribution.
|
|
22
|
+
|
|
23
|
+
d. make other distribution arrangements with the author.
|
|
24
|
+
|
|
25
|
+
3. You may distribute the software in object code or binary form,
|
|
26
|
+
provided that you do at least ONE of the following:
|
|
27
|
+
|
|
28
|
+
a. distribute the binaries and library files of the software,
|
|
29
|
+
together with instructions (in the manual page or equivalent)
|
|
30
|
+
on where to get the original distribution.
|
|
31
|
+
|
|
32
|
+
b. accompany the distribution with the machine-readable source of
|
|
33
|
+
the software.
|
|
34
|
+
|
|
35
|
+
c. give non-standard binaries non-standard names, with
|
|
36
|
+
instructions on where to get the original software distribution.
|
|
37
|
+
|
|
38
|
+
d. make other distribution arrangements with the author.
|
|
39
|
+
|
|
40
|
+
4. You may modify and include the part of the software into any other
|
|
41
|
+
software (possibly commercial). But some files in the distribution
|
|
42
|
+
are not written by the author, so that they are not under these terms.
|
|
43
|
+
|
|
44
|
+
For the list of those files and their copying conditions, see the
|
|
45
|
+
file LEGAL.
|
|
46
|
+
|
|
47
|
+
5. The scripts and library files supplied as input to or produced as
|
|
48
|
+
output from the software do not automatically fall under the
|
|
49
|
+
copyright of the software, but belong to whomever generated them,
|
|
50
|
+
and may be sold commercially, and may be aggregated with this
|
|
51
|
+
software.
|
|
52
|
+
|
|
53
|
+
6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
|
54
|
+
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
|
55
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
56
|
+
PURPOSE.
|