bundler 2.5.23 → 2.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|