bundler-multilock 1.0.3 → 1.0.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/lib/bundler/multilock/check.rb +34 -7
- data/lib/bundler/multilock/version.rb +1 -1
- data/lib/bundler/multilock.rb +34 -16
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3acaa706bf6ffde2f5fb070a729895371cfbebf2dbe2c97d249acbb698a0b6c0
|
4
|
+
data.tar.gz: 416ddd8252d1254472dfe5ee60b2cb7eb54e88b0ea25f58d2f34888dbe6b6f2a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7adc856fa4149e2f814d7aac9181addc3a7ad378a44b9d1f9855d277e84ef58e56d59aab99d81a59f0ad539a6735c1a233e58be86fe7f887d01bb6cf4d60c1fb
|
7
|
+
data.tar.gz: 60f364edd123e881827ab24c9bf18cb6e2bccad0156b8346096a8ed221ed4f8409ce5bab2a8752e2aedc1cc6a0d8c9ca5035490ccb41a014242c57817c92dc64
|
@@ -19,13 +19,27 @@ module Bundler
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
def run
|
22
|
+
def run(skip_base_checks: false)
|
23
23
|
return true unless Bundler.default_lockfile.exist?
|
24
24
|
|
25
25
|
success = true
|
26
|
+
unless skip_base_checks
|
27
|
+
missing_specs = base_check({ gemfile: Bundler.default_gemfile, lockfile: Bundler.default_lockfile },
|
28
|
+
return_missing: true).to_set
|
29
|
+
end
|
26
30
|
Multilock.lockfile_definitions.each do |lockfile_definition|
|
27
|
-
next
|
31
|
+
next if lockfile_definition[:lockfile] == Bundler.default_lockfile
|
32
|
+
|
33
|
+
unless lockfile_definition[:lockfile].exist?
|
34
|
+
Bundler.ui.error("Lockfile #{lockfile_definition[:lockfile]} does not exist.")
|
35
|
+
success = false
|
36
|
+
end
|
28
37
|
|
38
|
+
unless skip_base_checks
|
39
|
+
new_missing = base_check(lockfile_definition, log_missing: missing_specs, return_missing: true)
|
40
|
+
success = false unless new_missing.empty?
|
41
|
+
missing_specs.merge(new_missing)
|
42
|
+
end
|
29
43
|
success = false unless check(lockfile_definition)
|
30
44
|
end
|
31
45
|
success
|
@@ -33,21 +47,34 @@ module Bundler
|
|
33
47
|
|
34
48
|
# this is mostly equivalent to the built in checks in `bundle check`, but even
|
35
49
|
# more conservative, and returns false instead of exiting on failure
|
36
|
-
def base_check(lockfile_definition)
|
37
|
-
return false unless lockfile_definition[:lockfile].file?
|
50
|
+
def base_check(lockfile_definition, log_missing: false, return_missing: false)
|
51
|
+
return return_missing ? [] : false unless lockfile_definition[:lockfile].file?
|
38
52
|
|
39
53
|
Multilock.prepare_block = lockfile_definition[:prepare]
|
40
54
|
definition = Definition.build(lockfile_definition[:gemfile], lockfile_definition[:lockfile], false)
|
41
|
-
return false unless definition.send(:current_platform_locked?)
|
55
|
+
return return_missing ? [] : false unless definition.send(:current_platform_locked?)
|
42
56
|
|
43
57
|
begin
|
44
58
|
definition.validate_runtime!
|
45
|
-
|
59
|
+
Bundler.ui.silence do
|
60
|
+
definition.resolve_only_locally!
|
61
|
+
end
|
46
62
|
not_installed = definition.missing_specs
|
47
63
|
rescue RubyVersionMismatch, GemNotFound, SolveFailure
|
48
|
-
return false
|
64
|
+
return return_missing ? [] : false
|
49
65
|
end
|
50
66
|
|
67
|
+
if log_missing
|
68
|
+
not_installed.each do |spec|
|
69
|
+
next if log_missing.include?(spec)
|
70
|
+
|
71
|
+
Bundler.ui.error "The following gems are missing" if log_missing.empty?
|
72
|
+
Bundler.ui.error(" * #{spec.name} (#{spec.version})")
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
return not_installed if return_missing
|
77
|
+
|
51
78
|
not_installed.empty? && definition.no_resolve_needed?
|
52
79
|
ensure
|
53
80
|
Multilock.prepare_block = nil
|
data/lib/bundler/multilock.rb
CHANGED
@@ -152,6 +152,7 @@ module Bundler
|
|
152
152
|
attempts = 1
|
153
153
|
|
154
154
|
checker = Check.new
|
155
|
+
synced_any = false
|
155
156
|
Bundler.settings.temporary(cache_all_platforms: true, suppress_install_using_messages: true) do
|
156
157
|
lockfile_definitions.each do |lockfile_definition|
|
157
158
|
# we already wrote the default lockfile
|
@@ -188,6 +189,7 @@ module Bundler
|
|
188
189
|
write_lockfile(lockfile_definition, lockfile_definition[:lockfile], install: install)
|
189
190
|
else
|
190
191
|
Bundler.ui.info("Syncing to #{relative_lockfile}...") if attempts == 1
|
192
|
+
synced_any = true
|
191
193
|
|
192
194
|
# adjust locked paths from the default lockfile to be relative to _this_ gemfile
|
193
195
|
adjusted_default_lockfile_contents =
|
@@ -272,7 +274,7 @@ module Bundler
|
|
272
274
|
end
|
273
275
|
end
|
274
276
|
|
275
|
-
exit 1 unless checker.run
|
277
|
+
exit 1 unless checker.run(skip_base_checks: !synced_any)
|
276
278
|
ensure
|
277
279
|
@recursive = previous_recursive
|
278
280
|
end
|
@@ -362,8 +364,36 @@ module Bundler
|
|
362
364
|
end
|
363
365
|
|
364
366
|
def write_lockfile(lockfile_definition, lockfile, install:, dependency_changes: false)
|
365
|
-
|
366
|
-
|
367
|
+
prepare_block = lockfile_definition[:prepare]
|
368
|
+
|
369
|
+
gemfile = lockfile_definition[:gemfile]
|
370
|
+
# use avoid Definition.build, so that we don't have to evaluate
|
371
|
+
# the gemfile multiple times, each time we need a separate definition
|
372
|
+
builder = Dsl.new
|
373
|
+
builder.eval_gemfile(gemfile, &prepare_block) if prepare_block
|
374
|
+
builder.eval_gemfile(gemfile)
|
375
|
+
|
376
|
+
definition = builder.to_definition(lockfile, {})
|
377
|
+
definition.instance_variable_set(:@dependency_changes, dependency_changes) if dependency_changes
|
378
|
+
orig_definition = definition.dup # we might need it twice
|
379
|
+
|
380
|
+
current_lockfile = lockfile_definition[:lockfile]
|
381
|
+
if current_lockfile.exist?
|
382
|
+
definition.instance_variable_set(:@lockfile_contents, current_lockfile.read)
|
383
|
+
if install
|
384
|
+
current_definition = builder.to_definition(current_lockfile, {})
|
385
|
+
begin
|
386
|
+
current_definition.resolve_only_locally!
|
387
|
+
if current_definition.missing_specs.any?
|
388
|
+
Bundler.with_default_lockfile(current_lockfile) do
|
389
|
+
Installer.install(gemfile.dirname, current_definition, {})
|
390
|
+
end
|
391
|
+
end
|
392
|
+
rescue RubyVersionMismatch, GemNotFound, SolveFailure
|
393
|
+
# ignore
|
394
|
+
end
|
395
|
+
end
|
396
|
+
end
|
367
397
|
|
368
398
|
resolved_remotely = false
|
369
399
|
begin
|
@@ -372,7 +402,7 @@ module Bundler
|
|
372
402
|
begin
|
373
403
|
definition.resolve_with_cache!
|
374
404
|
rescue GemNotFound, SolveFailure
|
375
|
-
definition =
|
405
|
+
definition = orig_definition
|
376
406
|
|
377
407
|
definition.resolve_remotely!
|
378
408
|
resolved_remotely = true
|
@@ -391,18 +421,6 @@ module Bundler
|
|
391
421
|
end
|
392
422
|
|
393
423
|
!definition.nothing_changed?
|
394
|
-
ensure
|
395
|
-
self.prepare_block = nil
|
396
|
-
end
|
397
|
-
|
398
|
-
def build_definition(lockfile_definition, lockfile, dependency_changes:)
|
399
|
-
definition = Definition.build(lockfile_definition[:gemfile], lockfile, false)
|
400
|
-
definition.instance_variable_set(:@dependency_changes, dependency_changes) if dependency_changes
|
401
|
-
if lockfile_definition[:lockfile].exist?
|
402
|
-
definition.instance_variable_set(:@lockfile_contents,
|
403
|
-
lockfile_definition[:lockfile].read)
|
404
|
-
end
|
405
|
-
definition
|
406
424
|
end
|
407
425
|
end
|
408
426
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bundler-multilock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Instructure
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-09-
|
11
|
+
date: 2023-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|