toys-core 0.11.4 → 0.11.5

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: 387c4a7088a856603e671a0c6156982eaa5639a41d1168a7912892b6ca9ca822
4
- data.tar.gz: f47e0683edea4d3fcfa848e0517299648c0d6a0564b7d9316405487ed2e6d4dd
3
+ metadata.gz: ae396604e3a0005b460ad94f95187b603f36e8d10d1147da2a78b069232f7963
4
+ data.tar.gz: 267209d6e7ab4575053219eee5fb1c6be47b9bd6ac6468b6da5c9abb9ed227c2
5
5
  SHA512:
6
- metadata.gz: f1a9e2501458d1c8cebeafc044a6fe9f4de131c687df533e73a8567aa81afef2a5ed02fbb769e0da9ed7f4632c2c4f9046efec21281a3bc8c8072437d4ecb844
7
- data.tar.gz: f9c22a3b8d531825353d9eebc70735b3bdfddfc8f22ce55bc8bf62685bbbf9443fbb6d875b7671d70f8ee2ca1eb0990238d2b35b92289b5c1c3b7e392bae9537
6
+ metadata.gz: 527f51e0e679f93786ecd671ff14386615e2014e0dbd4995fd4bb6e58040cb00b27d83d3721c412eb8cc83fdc82fe7dff63c97e0e3d8bca8f8b8d7b04a5d9f41
7
+ data.tar.gz: 07c617895710b6f5dd69c6fdb16613c2ed7474361a1cbd8617ae1d271eca647ffa457e77bec7e1b30915b1e01ad25173c74251f1728f261a5d5565ca29b80d68
data/CHANGELOG.md CHANGED
@@ -1,16 +1,22 @@
1
1
  # Release History
2
2
 
3
+ ### v0.11.5 / 2021-03-28
4
+
5
+ * BREAKING CHANGE: The exit_on_nonzero_status option to exec now exits on signals and failures to spawn, in addition to error codes.
6
+ * ADDED: Support retries in the bundler integration.
7
+ * FIXED: Fix a bundler 2.2 integration issue that fails install in certain cases when an update is needed.
8
+
3
9
  ### v0.11.4 / 2020-10-11
4
10
 
5
11
  * FIXED: Doesn't modify bundler lockfiles when adding Toys to a bundle
6
12
 
7
13
  ### v0.11.3 / 2020-09-13
8
14
 
9
- * FIXED: The Exec library recognizes the argv0 option, and logs it appropriately
15
+ * FIXED: The Exec library recognizes the argv0 option, and logs it appropriately
10
16
 
11
17
  ### v0.11.2 / 2020-09-06
12
18
 
13
- * FIXED: Fix a JRuby-specific race condition when capturing exec streams
19
+ * FIXED: Fix a JRuby-specific race condition when capturing exec streams
14
20
 
15
21
  ### v0.11.1 / 2020-08-24
16
22
 
data/lib/toys/core.rb CHANGED
@@ -9,7 +9,7 @@ module Toys
9
9
  # Current version of Toys core.
10
10
  # @return [String]
11
11
  #
12
- VERSION = "0.11.4"
12
+ VERSION = "0.11.5"
13
13
  end
14
14
 
15
15
  ## @private deprecated
@@ -57,6 +57,9 @@ module Toys
57
57
  # * `:ignore` - just silently proceed without bundling again.
58
58
  # * `:warn` - print a warning and proceed without bundling again.
59
59
  #
60
+ # * `:retries` (Integer) Number of times to retry bundler operations
61
+ # (optional)
62
+ #
60
63
  # * `:terminal` (Toys::Utils::Terminal) Terminal to use (optional)
61
64
  # * `:input` (IO) Input IO (optional, defaults to STDIN)
62
65
  # * `:output` (IO) Output IO (optional, defaults to STDOUT)
@@ -100,6 +103,7 @@ module Toys
100
103
  groups: nil,
101
104
  on_missing: nil,
102
105
  on_conflict: nil,
106
+ retries: nil,
103
107
  terminal: nil,
104
108
  input: nil,
105
109
  output: nil)
@@ -111,7 +115,7 @@ module Toys
111
115
  end
112
116
  gems = ::Toys::Utils::Gems.new(on_missing: on_missing, on_conflict: on_conflict,
113
117
  terminal: terminal, input: input, output: output)
114
- gems.bundle(groups: groups, gemfile_path: gemfile_path)
118
+ gems.bundle(groups: groups, gemfile_path: gemfile_path, retries: retries)
115
119
  end
116
120
 
117
121
  # @private
@@ -708,7 +708,16 @@ module Toys
708
708
 
709
709
  ## @private
710
710
  def self._interpret_e(value, context)
711
- value ? proc { |r| context.exit(r.exit_code) if r.error? } : nil
711
+ return nil unless value
712
+ proc do |result|
713
+ if result.failed?
714
+ context.exit(127)
715
+ elsif result.signaled?
716
+ context.exit(result.signal_code + 128)
717
+ elsif result.error?
718
+ context.exit(result.exit_code)
719
+ end
720
+ end
712
721
  end
713
722
 
714
723
  ## @private
@@ -797,7 +797,7 @@ module Toys
797
797
  # {Result#success?} or {Result#error?} will return true, and
798
798
  # {Result.exit_code} will return the numeric exit code.
799
799
  # * The process executed but was terminated by an uncaught signal.
800
- # {Result#signaled?} will return true, and {Result#term_signal} will
800
+ # {Result#signaled?} will return true, and {Result#signal_code} will
801
801
  # return the numeric signal code.
802
802
  #
803
803
  class Result
@@ -849,6 +849,8 @@ module Toys
849
849
  # The exception raised if a process couldn't be started.
850
850
  #
851
851
  # Exactly one of {#exception} and {#status} will be non-nil.
852
+ # Exactly one of {#exception}, {#exit_code}, or {#signal_code} will be
853
+ # non-nil.
852
854
  #
853
855
  # @return [Exception] The exception raised from process start.
854
856
  # @return [nil] if the process started successfully.
@@ -858,7 +860,7 @@ module Toys
858
860
  ##
859
861
  # The numeric status code for a process that exited normally,
860
862
  #
861
- # Exactly one of {#exception}, {#exit_code}, and {#term_signal} will be
863
+ # Exactly one of {#exception}, {#exit_code}, or {#signal_code} will be
862
864
  # non-nil.
863
865
  #
864
866
  # @return [Integer] the numeric status code, if the process started
@@ -873,16 +875,17 @@ module Toys
873
875
  ##
874
876
  # The numeric signal code that caused process termination.
875
877
  #
876
- # Exactly one of {#exception}, {#exit_code}, and {#term_signal} will be
878
+ # Exactly one of {#exception}, {#exit_code}, or {#signal_code} will be
877
879
  # non-nil.
878
880
  #
879
881
  # @return [Integer] The signal that caused the process to terminate.
880
882
  # @return [nil] if the process did not start successfully, or executed
881
883
  # and exited with a normal exit code.
882
884
  #
883
- def term_signal
885
+ def signal_code
884
886
  status&.termsig
885
887
  end
888
+ alias term_signal signal_code
886
889
 
887
890
  ##
888
891
  # Returns true if the subprocess failed to start, or false if the
@@ -901,7 +904,7 @@ module Toys
901
904
  # @return [Boolean]
902
905
  #
903
906
  def signaled?
904
- !term_signal.nil?
907
+ !signal_code.nil?
905
908
  end
906
909
 
907
910
  ##
@@ -170,12 +170,16 @@ module Toys
170
170
  # recognized as Gemfiles, when searching because gemfile_path is not
171
171
  # given. Defaults to {DEFAULT_GEMFILE_NAMES}.
172
172
  #
173
+ # @param retries [Integer] Number of times to retry bundler operations.
174
+ # Optional.
175
+ #
173
176
  # @return [void]
174
177
  #
175
178
  def bundle(groups: nil,
176
179
  gemfile_path: nil,
177
180
  search_dirs: nil,
178
- gemfile_names: nil)
181
+ gemfile_names: nil,
182
+ retries: nil)
179
183
  Array(search_dirs).each do |dir|
180
184
  break if gemfile_path
181
185
  gemfile_path = Gems.find_gemfile(dir, gemfile_names: gemfile_names)
@@ -186,7 +190,7 @@ module Toys
186
190
  activate("bundler", "~> 2.1")
187
191
  require "bundler"
188
192
  lockfile_path = find_lockfile_path(gemfile_path)
189
- setup_bundle(gemfile_path, lockfile_path, groups || [])
193
+ setup_bundle(gemfile_path, lockfile_path, groups: groups, retries: retries)
190
194
  end
191
195
  end
192
196
  end
@@ -296,14 +300,15 @@ module Toys
296
300
  end
297
301
  end
298
302
 
299
- def setup_bundle(gemfile_path, lockfile_path, groups)
303
+ def setup_bundle(gemfile_path, lockfile_path, groups: nil, retries: nil)
304
+ groups = Array(groups)
300
305
  old_lockfile_contents = save_old_lockfile(lockfile_path)
301
306
  begin
302
307
  modify_bundle_definition(gemfile_path, lockfile_path)
303
308
  ::Bundler.ui.silence { ::Bundler.setup(*groups) }
304
309
  rescue ::Bundler::GemNotFound, ::Bundler::VersionConflict
305
310
  restore_toys_libs
306
- install_bundle(gemfile_path)
311
+ install_bundle(gemfile_path, retries: retries)
307
312
  old_lockfile_contents = save_old_lockfile(lockfile_path)
308
313
  ::Bundler.reset!
309
314
  modify_bundle_definition(gemfile_path, lockfile_path)
@@ -383,19 +388,21 @@ module Toys
383
388
  end
384
389
  end
385
390
 
386
- def install_bundle(gemfile_path)
391
+ def install_bundle(gemfile_path, retries: nil)
387
392
  gemfile_dir = ::File.dirname(gemfile_path)
388
393
  unless permission_to_bundle?
389
394
  raise BundleNotInstalledError,
390
395
  "Your bundle is not installed. Consider running" \
391
396
  " `cd #{gemfile_dir} && bundle install`"
392
397
  end
398
+ retries = retries.to_i
399
+ args = retries.positive? ? ["--retry=#{retries}"] : []
393
400
  require "bundler/cli"
394
401
  begin
395
- ::Bundler::CLI.start(["install"])
396
- rescue ::Bundler::GemNotFound, ::Bundler::InstallError
402
+ ::Bundler::CLI.start(["install"] + args)
403
+ rescue ::Bundler::GemNotFound, ::Bundler::InstallError, ::Bundler::VersionConflict
397
404
  terminal.puts("Failed to install. Trying update...")
398
- ::Bundler::CLI.start(["update"])
405
+ ::Bundler::CLI.start(["update"] + args)
399
406
  end
400
407
  end
401
408
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toys-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.4
4
+ version: 0.11.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Azuma
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-11 00:00:00.000000000 Z
11
+ date: 2021-03-28 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Toys-Core is the command line tool framework underlying Toys. It can
14
14
  be used to create command line executables using the Toys DSL and classes.
@@ -69,10 +69,10 @@ homepage: https://github.com/dazuma/toys
69
69
  licenses:
70
70
  - MIT
71
71
  metadata:
72
- changelog_uri: https://dazuma.github.io/toys/gems/toys-core/v0.11.4/file.CHANGELOG.html
73
- source_code_uri: https://github.com/dazuma/toys
72
+ changelog_uri: https://dazuma.github.io/toys/gems/toys-core/v0.11.5/file.CHANGELOG.html
73
+ source_code_uri: https://github.com/dazuma/toys/tree/main/toys-core
74
74
  bug_tracker_uri: https://github.com/dazuma/toys/issues
75
- documentation_uri: https://dazuma.github.io/toys/gems/toys-core/v0.11.4
75
+ documentation_uri: https://dazuma.github.io/toys/gems/toys-core/v0.11.5
76
76
  post_install_message:
77
77
  rdoc_options: []
78
78
  require_paths: