toys-core 0.14.4 → 0.14.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 98a66e07f9f052b2011ab3d960dd8b8bff11f3f03a3c6de67e0d14b1507421ee
4
- data.tar.gz: c6712de855eb63cb80eba5b32c956590a2b50d2944079df0ad4e58c9c8e7c8c4
3
+ metadata.gz: 4a49ffadd96ca26cf194b2c779f91704490fe6f345e5eb306638f61215e15920
4
+ data.tar.gz: 79bfe7f58285f0881a16383ffb0ba5f6fcad79b6001e4efd2effea178d1cedd7
5
5
  SHA512:
6
- metadata.gz: e6be869c95ca6a9c4a7451581b04a656fe8d11f4b10d7a9197c4719fda776720bc07124295683d21bf81a19a0d5a3366fb0b31f5ffd92dd6b518aab3a18cc6d8
7
- data.tar.gz: 0f48bdb37ce11ee8f3ece13b7ba8e4f85633b566b68d2ba15cd18ef26ddcd9b0455b49e2f56bef7b0f240cfde4d5e461b81a05965ec77928cd4d09a974794c8d
6
+ metadata.gz: d3d8bc7d78af759121c749b06454b585404c2093342a7476655e8ff3ac1f5e7d52fc729402e5669b42e75820babdd7f997f36a53d462276f2c26da5eff83fd5c
7
+ data.tar.gz: f04c5b0fdcbeb344f6733611bf134230586fc35a3fe73ffddeaba4aa602c1ff86726b2f1cd832e2a00dfbded1b30a59eaa5851c75df06e908b126682da627a81
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Release History
2
2
 
3
+ ### v0.14.6 / 2023-06-29
4
+
5
+ * FIXED: Fixed a GitCache exception when loading a repository containing a broken symlink
6
+
7
+ ### v0.14.5 / 2023-03-20
8
+
9
+ * FIXED: Rescue broken pipe errors by default when running a pager
10
+
3
11
  ### v0.14.4 / 2023-01-23
4
12
 
5
13
  * FIXED: Fixed missing require when "toys/utils/xdg" or "toys/utils/git_cache" is required without the rest of toys-core
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.14.4"
12
+ VERSION = "0.14.6"
13
13
  end
14
14
 
15
15
  ##
@@ -8,16 +8,16 @@ module Toys
8
8
  # This mixin provides an instance of {Toys::Utils::GitCache}, providing
9
9
  # cached access to files from a remote git repo.
10
10
  #
11
- # Example usage:
11
+ # @example
12
12
  #
13
- # include :git_cache
13
+ # include :git_cache
14
14
  #
15
- # def run
16
- # # Pull and cache the HEAD commit from the Toys repo.
17
- # dir = git_cache.find("https://github.com/dazuma/toys.git")
18
- # # Display the contents of the readme file.
19
- # puts File.read(File.join(dir, "README.md"))
20
- # end
15
+ # def run
16
+ # # Pull and cache the HEAD commit from the Toys repo.
17
+ # dir = git_cache.get("https://github.com/dazuma/toys.git")
18
+ # # Display the contents of the readme file.
19
+ # puts File.read(File.join(dir, "README.md"))
20
+ # end
21
21
  #
22
22
  module GitCache
23
23
  include Mixin
@@ -8,6 +8,10 @@ module Toys
8
8
  # This mixin provides an instance of {Toys::Utils::Pager}, which invokes
9
9
  # an external pager for output.
10
10
  #
11
+ # You can also pass additional keyword arguments to the `include` directive
12
+ # to configure the pager object. These will be passed on to
13
+ # {Toys::Utils::Pager#initialize}.
14
+ #
11
15
  # @example
12
16
  #
13
17
  # include :pager
@@ -44,13 +48,12 @@ module Toys
44
48
  self[KEY].start(&block)
45
49
  end
46
50
 
47
- on_initialize do
51
+ on_initialize do |**opts|
48
52
  require "toys/utils/pager"
49
- exec_service =
50
- if defined?(::Toys::StandardMixins::Exec)
51
- self[::Toys::StandardMixins::Exec::KEY]
52
- end
53
- self[KEY] = Utils::Pager.new(exec_service: exec_service)
53
+ if !opts.key?(:exec_service) && defined?(::Toys::StandardMixins::Exec)
54
+ opts[:exec_service] = self[::Toys::StandardMixins::Exec::KEY]
55
+ end
56
+ self[KEY] = Utils::Pager.new(**opts)
54
57
  end
55
58
  end
56
59
  end
@@ -402,7 +402,7 @@ module Toys
402
402
  Array(remotes).map do |remote|
403
403
  dir = repo_base_dir_for(remote)
404
404
  if ::File.directory?(dir)
405
- ::FileUtils.chmod_R("u+w", dir)
405
+ ::FileUtils.chmod_R("u+w", dir, force: true)
406
406
  ::FileUtils.rm_rf(dir)
407
407
  remote
408
408
  end
@@ -568,9 +568,9 @@ module Toys
568
568
  source_path = ::File.join(dir, sha)
569
569
  unless repo_lock.source_exists?(sha, path)
570
570
  ::FileUtils.mkdir_p(source_path)
571
- ::FileUtils.chmod_R("u+w", source_path)
571
+ ::FileUtils.chmod_R("u+w", source_path, force: true)
572
572
  copy_from_repo(repo_path, source_path, sha, path)
573
- ::FileUtils.chmod_R("a-w", source_path)
573
+ ::FileUtils.chmod_R("a-w", source_path, force: true)
574
574
  end
575
575
  repo_lock.access_source!(sha, path)
576
576
  path == "." ? source_path : ::File.join(source_path, path)
@@ -579,7 +579,7 @@ module Toys
579
579
  def copy_files(dir, sha, path, repo_lock, into)
580
580
  repo_path = ::File.join(dir, REPO_DIR_NAME)
581
581
  ::FileUtils.mkdir_p(into)
582
- ::FileUtils.chmod_R("u+w", into)
582
+ ::FileUtils.chmod_R("u+w", into, force: true)
583
583
  Compat.dir_children(into).each { |child| ::FileUtils.rm_rf(::File.join(into, child)) }
584
584
  result = copy_from_repo(repo_path, into, sha, path)
585
585
  repo_lock.access_repo!
@@ -594,7 +594,7 @@ module Toys
594
594
  to_path = ::File.join(into, entry)
595
595
  unless ::File.exist?(to_path)
596
596
  from_path = ::File.join(repo_dir, entry)
597
- ::FileUtils.cp_r(from_path, to_path)
597
+ ::FileUtils.copy_entry(from_path, to_path)
598
598
  end
599
599
  end
600
600
  into
@@ -603,7 +603,7 @@ module Toys
603
603
  unless ::File.exist?(to_path)
604
604
  from_path = ::File.join(repo_dir, path)
605
605
  ::FileUtils.mkdir_p(::File.dirname(to_path))
606
- ::FileUtils.cp_r(from_path, to_path)
606
+ ::FileUtils.copy_entry(from_path, to_path)
607
607
  end
608
608
  to_path
609
609
  end
@@ -34,12 +34,18 @@ module Toys
34
34
  # executing commands, or `nil` (the default) to use a default.
35
35
  # @param fallback_io [IO] An IO-like object to write to if the pager is
36
36
  # disabled. Defaults to `$stdout`.
37
+ # @param rescue_broken_pipes [boolean] If `true` (the default), broken
38
+ # pipes are silently rescued. This prevents the exception from
39
+ # propagating out if the pager is interrupted. Set this parameter to
40
+ # `false` to disable this behavior.
37
41
  #
38
- def initialize(command: true, exec_service: nil, fallback_io: nil)
42
+ def initialize(command: true, exec_service: nil, fallback_io: nil,
43
+ rescue_broken_pipes: true)
39
44
  @command = command == true ? Pager.default_command : command
40
45
  @command ||= nil
41
46
  @exec_service = exec_service || Pager.default_exec_service
42
47
  @fallback_io = fallback_io || $stdout
48
+ @rescue_broken_pipes = rescue_broken_pipes
43
49
  end
44
50
 
45
51
  ##
@@ -60,7 +66,11 @@ module Toys
60
66
  def start
61
67
  if @command
62
68
  result = @exec_service.exec(@command, in: :controller) do |controller|
63
- yield controller.in if controller.pid
69
+ begin
70
+ yield controller.in if controller.pid
71
+ rescue ::Errno::EPIPE => e
72
+ raise e unless @rescue_broken_pipes
73
+ end
64
74
  end
65
75
  return result.exit_code unless result.failed?
66
76
  end
@@ -100,6 +110,10 @@ module Toys
100
110
  # executing commands, or `nil` (the default) to use a default.
101
111
  # @param fallback_io [IO] An IO-like object to write to if the pager is
102
112
  # disabled. Defaults to `$stdout`.
113
+ # @param rescue_broken_pipes [boolean] If `true` (the default), broken
114
+ # pipes are silently rescued. This prevents the exception from
115
+ # propagating out if the pager is interrupted. Set this parameter to
116
+ # `false` to disable this behavior.
103
117
  # @return [Integer] The exit code of the pager process.
104
118
  #
105
119
  # @example
@@ -107,8 +121,14 @@ module Toys
107
121
  # Toys::Utils::Pager.start do |io|
108
122
  # io.puts "A long string\n"
109
123
  # end
110
- def start(command: true, exec_service: nil, fallback_io: nil, &block)
111
- pager = new(command: command, exec_service: exec_service, fallback_io: fallback_io)
124
+ #
125
+ def start(command: true,
126
+ exec_service: nil,
127
+ fallback_io: nil,
128
+ rescue_broken_pipes: true,
129
+ &block)
130
+ pager = new(command: command, exec_service: exec_service, fallback_io: fallback_io,
131
+ rescue_broken_pipes: rescue_broken_pipes)
112
132
  pager.start(&block)
113
133
  end
114
134
 
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.14.4
4
+ version: 0.14.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Azuma
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-23 00:00:00.000000000 Z
11
+ date: 2023-06-29 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.
@@ -78,10 +78,10 @@ homepage: https://github.com/dazuma/toys
78
78
  licenses:
79
79
  - MIT
80
80
  metadata:
81
- changelog_uri: https://dazuma.github.io/toys/gems/toys-core/v0.14.4/file.CHANGELOG.html
81
+ changelog_uri: https://dazuma.github.io/toys/gems/toys-core/v0.14.6/file.CHANGELOG.html
82
82
  source_code_uri: https://github.com/dazuma/toys/tree/main/toys-core
83
83
  bug_tracker_uri: https://github.com/dazuma/toys/issues
84
- documentation_uri: https://dazuma.github.io/toys/gems/toys-core/v0.14.4
84
+ documentation_uri: https://dazuma.github.io/toys/gems/toys-core/v0.14.6
85
85
  post_install_message:
86
86
  rdoc_options: []
87
87
  require_paths: