bundler-multilock 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: caaabd6305d7178a0f13e9892ad6c3ef7a87de1c18cc2098ee76761820dfee5d
4
- data.tar.gz: c1cf4f2100eeeba5882a073e6db8db7b287e2a891bb6e8991d62f6f6512ac52b
3
+ metadata.gz: 514c6dd3f4961f833ea20dee15047941b649cdbe787f94808d9547e310ac7ff0
4
+ data.tar.gz: 79b046545b14b3b29c33a629e528cf9bf60712337052b0381fc1b6bf240228c1
5
5
  SHA512:
6
- metadata.gz: ec3b461286a3f046a12f2ec0539b441ba15c8367037994c53ece2f8c679a17788e93dfe85c88046b1e8ddeca6303b3d8be968edb12ffcaec9a900e80aeb756ba
7
- data.tar.gz: 8c1e2d525bc7c6955d750be9ef8c30cf5f120cb07d65fa844a0fcfa61ea54eecdb7faf10e38a7e5a4591a928c3aaaa2574dc7156207c8135976bd611c8497cb1
6
+ metadata.gz: d071c456f788219cfb144b70cfb3161f1b53d9add8d9a2d5395be1bceb56f1681abd787047ec1e6f109c2937944756cf9b7f4cd85ff6ad9483666d46f3acfa2d
7
+ data.tar.gz: 887dbb68890c5f643fdfb925eade83055afd262115a3a8970dd900955d1793ba4109569a56f9d4f273229023a051b63aec86c05fce2c6bf7ecc6bfe59f00e95b
@@ -23,9 +23,20 @@ module Bundler
23
23
  return true unless Bundler.default_lockfile.exist?
24
24
 
25
25
  success = true
26
+ missing_specs = base_check({ gemfile: Bundler.default_gemfile, lockfile: Bundler.default_lockfile },
27
+ return_missing: true).to_set
28
+
26
29
  Multilock.lockfile_definitions.each do |lockfile_definition|
27
- next unless lockfile_definition[:lockfile].exist?
30
+ next if lockfile_definition[:lockfile] == Bundler.default_lockfile
31
+
32
+ unless lockfile_definition[:lockfile].exist?
33
+ Bundler.ui.error("Lockfile #{lockfile_definition[:lockfile]} does not exist.")
34
+ success = false
35
+ end
28
36
 
37
+ new_missing = base_check(lockfile_definition, log_missing: missing_specs, return_missing: true)
38
+ success = false unless new_missing.empty?
39
+ missing_specs.merge(new_missing)
29
40
  success = false unless check(lockfile_definition)
30
41
  end
31
42
  success
@@ -33,21 +44,32 @@ module Bundler
33
44
 
34
45
  # this is mostly equivalent to the built in checks in `bundle check`, but even
35
46
  # more conservative, and returns false instead of exiting on failure
36
- def base_check(lockfile_definition)
37
- return false unless lockfile_definition[:lockfile].file?
47
+ def base_check(lockfile_definition, log_missing: false, return_missing: false)
48
+ return return_missing ? [] : false unless lockfile_definition[:lockfile].file?
38
49
 
39
50
  Multilock.prepare_block = lockfile_definition[:prepare]
40
51
  definition = Definition.build(lockfile_definition[:gemfile], lockfile_definition[:lockfile], false)
41
- return false unless definition.send(:current_platform_locked?)
52
+ return return_missing ? [] : false unless definition.send(:current_platform_locked?)
42
53
 
43
54
  begin
44
55
  definition.validate_runtime!
45
56
  definition.resolve_only_locally!
46
57
  not_installed = definition.missing_specs
47
58
  rescue RubyVersionMismatch, GemNotFound, SolveFailure
48
- return false
59
+ return return_missing ? [] : false
60
+ end
61
+
62
+ if log_missing
63
+ not_installed.each do |spec|
64
+ next if log_missing.include?(spec)
65
+
66
+ Bundler.ui.error "The following gems are missing" if log_missing.empty?
67
+ Bundler.ui.error(" * #{spec.name} (#{spec.version})")
68
+ end
49
69
  end
50
70
 
71
+ return not_installed if return_missing
72
+
51
73
  not_installed.empty? && definition.no_resolve_needed?
52
74
  ensure
53
75
  Multilock.prepare_block = nil
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Bundler
4
4
  module Multilock
5
- VERSION = "1.0.3"
5
+ VERSION = "1.0.4"
6
6
  end
7
7
  end
@@ -362,8 +362,36 @@ module Bundler
362
362
  end
363
363
 
364
364
  def write_lockfile(lockfile_definition, lockfile, install:, dependency_changes: false)
365
- self.prepare_block = lockfile_definition[:prepare]
366
- definition = build_definition(lockfile_definition, lockfile, dependency_changes: dependency_changes)
365
+ prepare_block = lockfile_definition[:prepare]
366
+
367
+ gemfile = lockfile_definition[:gemfile]
368
+ # use avoid Definition.build, so that we don't have to evaluate
369
+ # the gemfile multiple times, each time we need a separate definition
370
+ builder = Dsl.new
371
+ builder.eval_gemfile(gemfile, &prepare_block) if prepare_block
372
+ builder.eval_gemfile(gemfile)
373
+
374
+ definition = builder.to_definition(lockfile, {})
375
+ definition.instance_variable_set(:@dependency_changes, dependency_changes) if dependency_changes
376
+ orig_definition = definition.dup # we might need it twice
377
+
378
+ current_lockfile = lockfile_definition[:lockfile]
379
+ if current_lockfile.exist?
380
+ definition.instance_variable_set(:@lockfile_contents, current_lockfile.read)
381
+ if install
382
+ current_definition = builder.to_definition(current_lockfile, {})
383
+ begin
384
+ current_definition.resolve_only_locally!
385
+ if current_definition.missing_specs.any?
386
+ Bundler.with_default_lockfile(current_lockfile) do
387
+ Installer.install(gemfile.dirname, current_definition, {})
388
+ end
389
+ end
390
+ rescue RubyVersionMismatch, GemNotFound, SolveFailure
391
+ # ignore
392
+ end
393
+ end
394
+ end
367
395
 
368
396
  resolved_remotely = false
369
397
  begin
@@ -372,7 +400,7 @@ module Bundler
372
400
  begin
373
401
  definition.resolve_with_cache!
374
402
  rescue GemNotFound, SolveFailure
375
- definition = build_definition(lockfile_definition, lockfile, dependency_changes: dependency_changes)
403
+ definition = orig_definition
376
404
 
377
405
  definition.resolve_remotely!
378
406
  resolved_remotely = true
@@ -391,18 +419,6 @@ module Bundler
391
419
  end
392
420
 
393
421
  !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
422
  end
407
423
  end
408
424
 
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.3
4
+ version: 1.0.4
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-13 00:00:00.000000000 Z
11
+ date: 2023-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler