filewatcher-cli 1.0.0.beta1 → 1.0.0.beta2
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/CHANGELOG.md +1 -3
- data/README.md +7 -3
- data/lib/filewatcher/cli/command/options.rb +4 -2
- data/lib/filewatcher/cli/command.rb +21 -2
- data/lib/filewatcher/cli/constants.rb +1 -1
- data/lib/filewatcher/cli/spec_helper/dump_to_file.rb +7 -0
- data/lib/filewatcher/cli/spec_helper/dumpers/env_dumper.rb +9 -0
- data/lib/filewatcher/cli/spec_helper/dumpers/signal_dumper.rb +11 -0
- data/lib/filewatcher/cli/spec_helper/dumpers/watched_dumper.rb +5 -0
- data/lib/filewatcher/cli/spec_helper/shell_watch_run.rb +135 -0
- data/lib/filewatcher/cli/spec_helper.rb +20 -8
- data/lib/filewatcher/cli.rb +1 -1
- metadata +42 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35c5d66e09924f9b4408465b6bbe2be7d90da93abe910dd921773b4b453f308d
|
4
|
+
data.tar.gz: 63559a3e6ea5a7995c586d551d10b25cadfd8da38faae3e6b8e4b735b05b3976
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea9309cb86a87741d3ca49cbce2fb6ef05ada404a77194fb4219faa46aa77db6c60b49f3e761968bf6967e1f4a5cf1ae1fad017606cd9c3941fe8a0597d47902
|
7
|
+
data.tar.gz: d4b312b334552ada570bc75a55c3b7b615769dbda493efaef61a83af219d4da26f2f86af0f4b80eb5801e753001877eae8d566ce8ece48d1e0b276503cd575e2
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# Filewatcher CLI
|
2
2
|
|
3
3
|
[](https://cirrus-ci.com/github/filewatcher/filewatcher-cli)
|
4
|
-
[](https://codecov.io/gh/filewatcher/filewatcher-cli)
|
5
5
|
[](https://codeclimate.com/github/filewatcher/filewatcher-cli)
|
6
6
|
[](https://depfu.com/repos/github/filewatcher/filewatcher-cli)
|
7
|
-
[](https://inch-ci.org/github/filewatcher/filewatcher-cli)
|
8
8
|
[](LICENSE.txt)
|
9
|
-
[](https://rubygems.org/gems/filewatcher-cli)
|
9
|
+
[](https://rubygems.org/gems/filewatcher-cli)
|
10
10
|
|
11
11
|
CLI for [Filewatcher](https://github.com/filewatcher/filewatcher).
|
12
12
|
|
@@ -112,6 +112,10 @@ via `--restart-signal` option:
|
|
112
112
|
$ filewatcher --restart --restart-signal=KILL "**/*.rb" "rake test"
|
113
113
|
```
|
114
114
|
|
115
|
+
Due to [problems with signals on Windows](https://bugs.ruby-lang.org/issues/17820),
|
116
|
+
the default value of restart signal is `KILL` on Windows (while on Unix-like is `TERM`),
|
117
|
+
which is a single one supported at the current moment, so use other values carefully.
|
118
|
+
|
115
119
|
The `--immediate/-I` option starts the command on startup without waiting for file system updates. To start a web server and have it automatically restart when HTML files are updated:
|
116
120
|
|
117
121
|
```sh
|
@@ -17,8 +17,10 @@ class Filewatcher
|
|
17
17
|
option %w[-r --restart --fork], :flag, 'restart process when file system is updated',
|
18
18
|
default: false
|
19
19
|
|
20
|
+
## Signal don't work on Windows for some reason:
|
21
|
+
## https://bugs.ruby-lang.org/issues/17820
|
20
22
|
option '--restart-signal', 'VALUE', 'termination signal for `restart` option',
|
21
|
-
default: 'TERM'
|
23
|
+
default: Gem.win_platform? ? 'KILL' : 'TERM'
|
22
24
|
|
23
25
|
option %w[-l --list], :flag, 'print name of files being watched',
|
24
26
|
default: false
|
@@ -30,7 +32,7 @@ class Filewatcher
|
|
30
32
|
default: File.join('**', '*')
|
31
33
|
|
32
34
|
option '--exclude', 'GLOB', 'exclude file(s) matching', default: nil do |string|
|
33
|
-
split_files_void_escaped_whitespace string.split
|
35
|
+
split_files_void_escaped_whitespace string.split unless string.to_s.empty?
|
34
36
|
end
|
35
37
|
|
36
38
|
option %w[-i --interval], 'SECONDS', 'interval to scan file system', default: 0.5 do |string|
|
@@ -22,6 +22,12 @@ class Filewatcher
|
|
22
22
|
|
23
23
|
parameter '[COMMAND]', 'shell command to execute when file changes'
|
24
24
|
|
25
|
+
option ['-v', '--version'], :flag, 'Print versions' do
|
26
|
+
Filewatcher.print_version
|
27
|
+
puts "Filewatcher CLI #{Filewatcher::CLI::VERSION}"
|
28
|
+
exit 0
|
29
|
+
end
|
30
|
+
|
25
31
|
def execute
|
26
32
|
@child_pid = nil
|
27
33
|
|
@@ -42,9 +48,9 @@ class Filewatcher
|
|
42
48
|
@filewatcher = Filewatcher.new(
|
43
49
|
files,
|
44
50
|
## https://github.com/mdub/clamp/issues/105
|
45
|
-
self.class.declared_options.
|
51
|
+
self.class.declared_options.to_h do |option|
|
46
52
|
[option.attribute_name.to_sym, public_send(option.read_method)]
|
47
|
-
end
|
53
|
+
end
|
48
54
|
)
|
49
55
|
end
|
50
56
|
|
@@ -93,10 +99,23 @@ class Filewatcher
|
|
93
99
|
end
|
94
100
|
end
|
95
101
|
|
102
|
+
WINDOWS_SIGNALS_WARNING = <<~WARN
|
103
|
+
WARNING: Signals don't work on Windows properly: https://bugs.ruby-lang.org/issues/17820
|
104
|
+
It's recommended to use only the `KILL` (default `restart-signal` on Windows).
|
105
|
+
WARN
|
106
|
+
private_constant :WINDOWS_SIGNALS_WARNING
|
107
|
+
|
96
108
|
def restart(pid, restart_signal, env, command)
|
97
109
|
begin
|
98
110
|
raise Errno::ESRCH unless pid
|
99
111
|
|
112
|
+
## Signals don't work on Windows for some reason:
|
113
|
+
## https://cirrus-ci.com/task/5706760947236864?logs=test#L346
|
114
|
+
## https://bugs.ruby-lang.org/issues/17820
|
115
|
+
## https://blog.simplificator.com/2016/01/18/how-to-kill-processes-on-windows-using-ruby/
|
116
|
+
## But `KILL` works.
|
117
|
+
warn WINDOWS_SIGNALS_WARNING if Gem.win_platform? && restart_signal != 'KILL'
|
118
|
+
|
100
119
|
Process.kill(restart_signal, pid)
|
101
120
|
Process.wait(pid)
|
102
121
|
rescue Errno::ESRCH
|
@@ -0,0 +1,135 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'filewatcher/spec_helper'
|
4
|
+
|
5
|
+
class Filewatcher
|
6
|
+
module CLI
|
7
|
+
module SpecHelper
|
8
|
+
class ShellWatchRun
|
9
|
+
include Filewatcher::SpecHelper::WatchRun
|
10
|
+
include CLI::SpecHelper
|
11
|
+
|
12
|
+
executable_path = File.realpath "#{__dir__}/../../../../#{CLI::BINDIR}/filewatcher"
|
13
|
+
EXECUTABLE = "#{'ruby ' if Gem.win_platform?}#{executable_path}" \
|
14
|
+
|
15
|
+
DUMP_FILE = File.join(TMP_DIR, 'dump')
|
16
|
+
|
17
|
+
def initialize(options:, dumper:, dumper_args:, **rest_args)
|
18
|
+
super(**rest_args)
|
19
|
+
@options = options
|
20
|
+
@options[:interval] ||= 0.2
|
21
|
+
debug "options = #{options_string}"
|
22
|
+
@dumper = dumper
|
23
|
+
debug "dumper = #{@dumper}"
|
24
|
+
@dumper_args = dumper_args.join(' ')
|
25
|
+
end
|
26
|
+
|
27
|
+
def start
|
28
|
+
super
|
29
|
+
|
30
|
+
spawn_filewatcher
|
31
|
+
|
32
|
+
wait
|
33
|
+
|
34
|
+
wait seconds: 3 do
|
35
|
+
debug "pid state = #{pid_state.inspect}"
|
36
|
+
dump_file_exists = File.exist?(DUMP_FILE)
|
37
|
+
debug "#{__method__}: File.exist?(DUMP_FILE) = #{dump_file_exists}"
|
38
|
+
pid_ready? && (!@options[:immediate] || dump_file_exists)
|
39
|
+
end
|
40
|
+
|
41
|
+
## Dump file can exists with `--immediate` option, but Filewatcher can not have time
|
42
|
+
## to initialize `@last_snapshot` in main cycle.
|
43
|
+
wait
|
44
|
+
end
|
45
|
+
|
46
|
+
def stop
|
47
|
+
kill_filewatcher
|
48
|
+
|
49
|
+
wait do
|
50
|
+
pid_state.nil?
|
51
|
+
end
|
52
|
+
|
53
|
+
super
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def options_string
|
59
|
+
@options_string ||=
|
60
|
+
@options
|
61
|
+
.map { |key, value| value.is_a?(TrueClass) ? "--#{key}" : "--#{key}=#{value}" }
|
62
|
+
.join(' ')
|
63
|
+
end
|
64
|
+
|
65
|
+
SPAWN_OPTIONS = Gem.win_platform? ? {} : { pgroup: true }
|
66
|
+
|
67
|
+
def spawn_filewatcher
|
68
|
+
dumper_full_command = "#{__dir__}/dumpers/#{@dumper}_dumper.rb #{@dumper_args}"
|
69
|
+
spawn_command =
|
70
|
+
"#{EXECUTABLE} #{options_string} \"#{@filename}\" \"ruby #{dumper_full_command}\""
|
71
|
+
debug "spawn_command = #{spawn_command}"
|
72
|
+
@pid = spawn spawn_command, **SPAWN_OPTIONS
|
73
|
+
|
74
|
+
debug "@pid = #{@pid}"
|
75
|
+
|
76
|
+
debug Process.detach(@pid)
|
77
|
+
end
|
78
|
+
|
79
|
+
def make_changes
|
80
|
+
super
|
81
|
+
|
82
|
+
wait seconds: 3 do
|
83
|
+
dump_file_exists = File.exist?(DUMP_FILE)
|
84
|
+
debug "#{__method__}: File.exist?(DUMP_FILE) = #{dump_file_exists}"
|
85
|
+
debug "#{__method__}: DUMP_FILE content = #{File.read(DUMP_FILE)}" if dump_file_exists
|
86
|
+
dump_file_exists
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def kill_filewatcher
|
91
|
+
# debug __method__
|
92
|
+
if Gem.win_platform?
|
93
|
+
Process.kill('KILL', @pid)
|
94
|
+
else
|
95
|
+
## Problems: https://github.com/thomasfl/filewatcher/pull/83
|
96
|
+
## Solution: https://stackoverflow.com/a/45032252/2630849
|
97
|
+
Process.kill('TERM', -Process.getpgid(@pid))
|
98
|
+
Process.waitall
|
99
|
+
end
|
100
|
+
rescue Errno::ESRCH
|
101
|
+
nil ## already killed
|
102
|
+
ensure
|
103
|
+
wait
|
104
|
+
end
|
105
|
+
|
106
|
+
def pid_state
|
107
|
+
if Gem.win_platform?
|
108
|
+
match = `tasklist /FI "PID eq #{@pid}" /FO "LIST" /V`.match(/Status:\s+(\w+)/)
|
109
|
+
return unless match
|
110
|
+
|
111
|
+
match[1]
|
112
|
+
else
|
113
|
+
## For macOS output:
|
114
|
+
## https://travis-ci.org/thomasfl/filewatcher/jobs/304433538
|
115
|
+
state = `ps -ho state -p #{@pid}`.sub('STAT', '').strip
|
116
|
+
## Return `nil` for consistency with Windows
|
117
|
+
state.empty? ? nil : state
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def pid_ready?
|
122
|
+
ps = pid_state
|
123
|
+
|
124
|
+
return if ps.nil?
|
125
|
+
|
126
|
+
ps == (Gem.win_platform? ? 'Running' : 'S')
|
127
|
+
end
|
128
|
+
|
129
|
+
def wait(seconds: 1)
|
130
|
+
super seconds: seconds, interval: @options[:interval]
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative 'spec_helper/dump_to_file'
|
4
4
|
|
5
5
|
class Filewatcher
|
6
6
|
module CLI
|
@@ -8,16 +8,28 @@ class Filewatcher
|
|
8
8
|
module SpecHelper
|
9
9
|
include Filewatcher::SpecHelper
|
10
10
|
|
11
|
+
ENVIRONMENT_SPECS_COEFFICIENTS = {
|
12
|
+
lambda do
|
13
|
+
RUBY_ENGINE == 'jruby' &&
|
14
|
+
is_a?(Filewatcher::CLI::SpecHelper::ShellWatchRun)
|
15
|
+
end => 2,
|
16
|
+
lambda do
|
17
|
+
RUBY_ENGINE == 'jruby' &&
|
18
|
+
ENV.fetch('CI', false) &&
|
19
|
+
is_a?(Filewatcher::CLI::SpecHelper::ShellWatchRun)
|
20
|
+
end => 1.5,
|
21
|
+
lambda do
|
22
|
+
RUBY_ENGINE == 'truffleruby' &&
|
23
|
+
ENV.fetch('CI', false) &&
|
24
|
+
is_a?(Filewatcher::CLI::SpecHelper::ShellWatchRun)
|
25
|
+
end => 3
|
26
|
+
}.freeze
|
27
|
+
|
11
28
|
def environment_specs_coefficients
|
12
|
-
super.merge
|
13
|
-
## https://cirrus-ci.com/build/6442339705028608
|
14
|
-
lambda do
|
15
|
-
RUBY_PLATFORM == 'java' && ENV['CI'] && is_a?(Filewatcher::Spec::ShellWatchRun)
|
16
|
-
end => 2
|
17
|
-
)
|
29
|
+
@environment_specs_coefficients ||= super.merge ENVIRONMENT_SPECS_COEFFICIENTS
|
18
30
|
end
|
19
31
|
|
20
|
-
## https://github.com/rubocop
|
32
|
+
## https://github.com/rubocop/ruby-style-guide/issues/556#issuecomment-828672008
|
21
33
|
# rubocop:disable Style/ModuleFunction
|
22
34
|
extend self
|
23
35
|
# rubocop:enable Style/ModuleFunction
|
data/lib/filewatcher/cli.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: filewatcher-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.beta2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Flemming
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-07-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: clamp
|
@@ -31,14 +31,14 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 2.0.0.
|
34
|
+
version: 2.0.0.beta5
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: 2.0.0.
|
41
|
+
version: 2.0.0.beta5
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: pry-byebug
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,48 +67,62 @@ dependencies:
|
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '2.0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: bundler-audit
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 0.9.0
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 0.9.0
|
70
84
|
- !ruby/object:Gem::Dependency
|
71
85
|
name: gem_toys
|
72
86
|
requirement: !ruby/object:Gem::Requirement
|
73
87
|
requirements:
|
74
88
|
- - "~>"
|
75
89
|
- !ruby/object:Gem::Version
|
76
|
-
version: 0.
|
90
|
+
version: 0.12.1
|
77
91
|
type: :development
|
78
92
|
prerelease: false
|
79
93
|
version_requirements: !ruby/object:Gem::Requirement
|
80
94
|
requirements:
|
81
95
|
- - "~>"
|
82
96
|
- !ruby/object:Gem::Version
|
83
|
-
version: 0.
|
97
|
+
version: 0.12.1
|
84
98
|
- !ruby/object:Gem::Dependency
|
85
99
|
name: toys
|
86
100
|
requirement: !ruby/object:Gem::Requirement
|
87
101
|
requirements:
|
88
102
|
- - "~>"
|
89
103
|
- !ruby/object:Gem::Version
|
90
|
-
version: 0.
|
104
|
+
version: 0.13.1
|
91
105
|
type: :development
|
92
106
|
prerelease: false
|
93
107
|
version_requirements: !ruby/object:Gem::Requirement
|
94
108
|
requirements:
|
95
109
|
- - "~>"
|
96
110
|
- !ruby/object:Gem::Version
|
97
|
-
version: 0.
|
111
|
+
version: 0.13.1
|
98
112
|
- !ruby/object:Gem::Dependency
|
99
113
|
name: codecov
|
100
114
|
requirement: !ruby/object:Gem::Requirement
|
101
115
|
requirements:
|
102
116
|
- - "~>"
|
103
117
|
- !ruby/object:Gem::Version
|
104
|
-
version: 0.
|
118
|
+
version: 0.6.0
|
105
119
|
type: :development
|
106
120
|
prerelease: false
|
107
121
|
version_requirements: !ruby/object:Gem::Requirement
|
108
122
|
requirements:
|
109
123
|
- - "~>"
|
110
124
|
- !ruby/object:Gem::Version
|
111
|
-
version: 0.
|
125
|
+
version: 0.6.0
|
112
126
|
- !ruby/object:Gem::Dependency
|
113
127
|
name: rspec
|
114
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,28 +143,28 @@ dependencies:
|
|
129
143
|
requirements:
|
130
144
|
- - "~>"
|
131
145
|
- !ruby/object:Gem::Version
|
132
|
-
version: 0.
|
146
|
+
version: 0.21.2
|
133
147
|
type: :development
|
134
148
|
prerelease: false
|
135
149
|
version_requirements: !ruby/object:Gem::Requirement
|
136
150
|
requirements:
|
137
151
|
- - "~>"
|
138
152
|
- !ruby/object:Gem::Version
|
139
|
-
version: 0.
|
153
|
+
version: 0.21.2
|
140
154
|
- !ruby/object:Gem::Dependency
|
141
155
|
name: rubocop
|
142
156
|
requirement: !ruby/object:Gem::Requirement
|
143
157
|
requirements:
|
144
158
|
- - "~>"
|
145
159
|
- !ruby/object:Gem::Version
|
146
|
-
version:
|
160
|
+
version: 1.32.0
|
147
161
|
type: :development
|
148
162
|
prerelease: false
|
149
163
|
version_requirements: !ruby/object:Gem::Requirement
|
150
164
|
requirements:
|
151
165
|
- - "~>"
|
152
166
|
- !ruby/object:Gem::Version
|
153
|
-
version:
|
167
|
+
version: 1.32.0
|
154
168
|
- !ruby/object:Gem::Dependency
|
155
169
|
name: rubocop-performance
|
156
170
|
requirement: !ruby/object:Gem::Requirement
|
@@ -171,14 +185,14 @@ dependencies:
|
|
171
185
|
requirements:
|
172
186
|
- - "~>"
|
173
187
|
- !ruby/object:Gem::Version
|
174
|
-
version: '
|
188
|
+
version: '2.0'
|
175
189
|
type: :development
|
176
190
|
prerelease: false
|
177
191
|
version_requirements: !ruby/object:Gem::Requirement
|
178
192
|
requirements:
|
179
193
|
- - "~>"
|
180
194
|
- !ruby/object:Gem::Version
|
181
|
-
version: '
|
195
|
+
version: '2.0'
|
182
196
|
description: 'CLI for Filewatcher.
|
183
197
|
|
184
198
|
'
|
@@ -201,13 +215,19 @@ files:
|
|
201
215
|
- lib/filewatcher/cli/env.rb
|
202
216
|
- lib/filewatcher/cli/runner.rb
|
203
217
|
- lib/filewatcher/cli/spec_helper.rb
|
218
|
+
- lib/filewatcher/cli/spec_helper/dump_to_file.rb
|
219
|
+
- lib/filewatcher/cli/spec_helper/dumpers/env_dumper.rb
|
220
|
+
- lib/filewatcher/cli/spec_helper/dumpers/signal_dumper.rb
|
221
|
+
- lib/filewatcher/cli/spec_helper/dumpers/watched_dumper.rb
|
222
|
+
- lib/filewatcher/cli/spec_helper/shell_watch_run.rb
|
204
223
|
homepage: https://github.com/filewatcher/filewatcher-cli
|
205
224
|
licenses:
|
206
225
|
- MIT
|
207
226
|
metadata:
|
208
227
|
source_code_uri: https://github.com/filewatcher/filewatcher-cli
|
209
228
|
homepage_uri: https://github.com/filewatcher/filewatcher-cli
|
210
|
-
changelog_uri: https://github.com/filewatcher/filewatcher-cli/blob/
|
229
|
+
changelog_uri: https://github.com/filewatcher/filewatcher-cli/blob/main/CHANGELOG.md
|
230
|
+
rubygems_mfa_required: 'true'
|
211
231
|
post_install_message:
|
212
232
|
rdoc_options: []
|
213
233
|
require_paths:
|
@@ -216,14 +236,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
216
236
|
requirements:
|
217
237
|
- - ">="
|
218
238
|
- !ruby/object:Gem::Version
|
219
|
-
version: '2.
|
239
|
+
version: '2.6'
|
240
|
+
- - "<"
|
241
|
+
- !ruby/object:Gem::Version
|
242
|
+
version: '4'
|
220
243
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
221
244
|
requirements:
|
222
245
|
- - ">"
|
223
246
|
- !ruby/object:Gem::Version
|
224
247
|
version: 1.3.1
|
225
248
|
requirements: []
|
226
|
-
rubygems_version: 3.
|
249
|
+
rubygems_version: 3.3.7
|
227
250
|
signing_key:
|
228
251
|
specification_version: 4
|
229
252
|
summary: CLI for Filewatcher
|