filewatcher 1.0.1 → 1.1.0

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
- SHA256:
3
- metadata.gz: 9221be161e73cc2f85ea6f9706a2e558c31ff314664bc31817e9715439a31927
4
- data.tar.gz: bae2bc1ba2f5b88693fe1c8093b135652885094c69adc3da51193916ada96b44
2
+ SHA1:
3
+ metadata.gz: ed73f2615aeb5418438bb443abc274bc2cd8279f
4
+ data.tar.gz: 716e8b582f81531d486c1a281149da1702a044b7
5
5
  SHA512:
6
- metadata.gz: 0aec2e10e03aad69fd0e4ccda0a6f488efc7c908abe31640319971dda6ed71ca8873588d87693f91309d13ac996bb62a952e3c7430c41b462d663e0064185e8e
7
- data.tar.gz: ebf1581b4e3e56c77c4a18867ce55d2cb9a6fbf97d7804da305192dd9622a39d9b16cfe1392dd880c6dd1c43f47539a66a10f61956de7fad0202f2c43222b64d
6
+ metadata.gz: b37524eaae72f8eaaad40766e4e1793ec5766ebe7dd454e310eb98ba54745c59ecbc8358ea2045e335d242c84d6e48ef5bc1d0718b75546af481bd221f25c5d9
7
+ data.tar.gz: 50690825a35a747dce1491d7f3f77a2edf135797551ca625cdeeafb08efd31caada6e982de54fde6bdad88d4ae934b92bb66d29605a7d74e181bc5d059f9d367
@@ -5,10 +5,10 @@ require_relative '../lib/filewatcher'
5
5
  require_relative '../lib/filewatcher/env'
6
6
  require_relative '../lib/filewatcher/runner'
7
7
  require_relative '../lib/filewatcher/version'
8
- require 'trollop'
9
- require 'thread'
10
8
 
11
- options = Trollop.options do
9
+ require 'optimist'
10
+
11
+ options = Optimist.options do
12
12
  version "filewatcher, version #{Filewatcher::VERSION} by Thomas Flemming 2016"
13
13
  banner File.read File.join(__dir__, 'banner.txt')
14
14
 
@@ -33,7 +33,7 @@ options = Trollop.options do
33
33
  short: 's', type: :boolean, default: false
34
34
  end
35
35
 
36
- Trollop.die Trollop.educate if ARGV.empty?
36
+ Optimist.die Optimist.educate if ARGV.empty?
37
37
 
38
38
  files = ARGV[0..-2]
39
39
 
@@ -50,13 +50,13 @@ end
50
50
  files = split_files_void_escaped_whitespace(files)
51
51
  child_pid = nil
52
52
 
53
- def restart(child_pid, env, cmd)
54
- raise Errno::ESRCH unless child_pid
55
- Process.kill(9, child_pid)
56
- Process.wait(child_pid)
57
- rescue Errno::ESRCH
58
- nil # already killed
59
- ensure
53
+ def restart(pid, env, cmd)
54
+ begin
55
+ Process.kill(9, pid)
56
+ Process.wait(pid)
57
+ rescue Errno::ESRCH
58
+ nil # already killed
59
+ end
60
60
  Process.spawn(env, cmd)
61
61
  end
62
62
 
@@ -29,7 +29,12 @@ class Filewatcher
29
29
  end
30
30
 
31
31
  def watch(&on_update)
32
- %w[HUP INT TERM].each { |signal| trap(signal) { exit } }
32
+ ## The set of available signals depends on the OS
33
+ ## Windows doesn't support `HUP` signal, for example
34
+ (%w[HUP INT TERM] & Signal.list.keys).each do |signal|
35
+ trap(signal) { exit }
36
+ end
37
+
33
38
  @on_update = on_update
34
39
  @keep_watching = true
35
40
  yield('', '') if @immediate
@@ -105,8 +110,6 @@ class Filewatcher
105
110
  def filesystem_updated?(snapshot = mtime_snapshot)
106
111
  @changes = {}
107
112
 
108
- # rubocop:disable Perfomance/HashEachMethods
109
- ## https://github.com/bbatsov/rubocop/issues/4732
110
113
  (snapshot.to_a - last_snapshot.to_a).each do |file, _mtime|
111
114
  @changes[file] = last_snapshot[file] ? :updated : :created
112
115
  end
@@ -3,5 +3,5 @@
3
3
  require_relative '../filewatcher'
4
4
 
5
5
  class Filewatcher
6
- VERSION = '1.0.1'.freeze
6
+ VERSION = '1.1.0'.freeze
7
7
  end
@@ -20,7 +20,7 @@ class WatchRun
20
20
  action: :update
21
21
  )
22
22
  @filename =
23
- filename.start_with?('/', '~') ? filename : File.join(TMP_DIR, filename)
23
+ filename =~ %r{^(/|~|[A-Z]:)} ? filename : File.join(TMP_DIR, filename)
24
24
  @directory = directory
25
25
  @action = action
26
26
  end
@@ -55,6 +55,8 @@ class WatchRun
55
55
  end
56
56
 
57
57
  class RubyWatchRun < WatchRun
58
+ SLEEP_MULTIPLIER = Gem::Platform.local.os == 'darwin' ? 5 : 1
59
+
58
60
  attr_reader :filewatcher, :thread, :watched, :processed
59
61
 
60
62
  def initialize(
@@ -72,18 +74,24 @@ class RubyWatchRun < WatchRun
72
74
  super
73
75
  @thread = thread_initialize
74
76
  # thread needs a chance to start
75
- wait 3 do
77
+ wait 12 do
76
78
  filewatcher.keep_watching
77
79
  end
80
+
81
+ # a little more time
82
+ sleep 1 * SLEEP_MULTIPLIER
78
83
  end
79
84
 
80
85
  def stop
81
86
  thread.exit
82
87
 
83
- wait 3 do
88
+ wait 12 do
84
89
  thread.stop?
85
90
  end
86
91
 
92
+ # a little more time
93
+ sleep 1 * SLEEP_MULTIPLIER
94
+
87
95
  super
88
96
  end
89
97
 
@@ -94,7 +102,7 @@ class RubyWatchRun < WatchRun
94
102
 
95
103
  # Some OS, filesystems and Ruby interpretators
96
104
  # doesn't catch milliseconds of `File.mtime`
97
- wait 3 do
105
+ wait 12 do
98
106
  processed.any?
99
107
  end
100
108
  end
@@ -149,11 +157,7 @@ class ShellWatchRun < WatchRun
149
157
  def start
150
158
  super
151
159
 
152
- @pid = spawn(
153
- "#{EXECUTABLE} #{@options_string} \"#{@filename}\"" \
154
- " \"ruby #{File.join(__dir__, 'dumpers', "#{@dumper}_dumper.rb")}\"",
155
- pgroup: true
156
- )
160
+ @pid = spawn_filewatcher
157
161
 
158
162
  Process.detach(@pid)
159
163
 
@@ -166,10 +170,7 @@ class ShellWatchRun < WatchRun
166
170
  end
167
171
 
168
172
  def stop
169
- ## Problems: https://github.com/thomasfl/filewatcher/pull/83
170
- ## Solution: https://stackoverflow.com/a/45032252/2630849
171
- Process.kill('TERM', -Process.getpgid(@pid))
172
- Process.waitall
173
+ kill_filewatcher
173
174
 
174
175
  wait 12 do
175
176
  pid_state.empty?
@@ -183,6 +184,16 @@ class ShellWatchRun < WatchRun
183
184
 
184
185
  private
185
186
 
187
+ SPAWN_OPTIONS = Gem.win_platform? ? {} : { pgroup: true }
188
+
189
+ def spawn_filewatcher
190
+ spawn(
191
+ "#{EXECUTABLE} #{@options_string} \"#{@filename}\"" \
192
+ " \"ruby #{File.join(__dir__, "dumpers/#{@dumper}_dumper.rb")}\"",
193
+ **SPAWN_OPTIONS
194
+ )
195
+ end
196
+
186
197
  def make_changes
187
198
  super
188
199
 
@@ -191,6 +202,17 @@ class ShellWatchRun < WatchRun
191
202
  end
192
203
  end
193
204
 
205
+ def kill_filewatcher
206
+ if Gem.win_platform?
207
+ Process.kill('KILL', @pid)
208
+ else
209
+ ## Problems: https://github.com/thomasfl/filewatcher/pull/83
210
+ ## Solution: https://stackoverflow.com/a/45032252/2630849
211
+ Process.kill('TERM', -Process.getpgid(@pid))
212
+ Process.waitall
213
+ end
214
+ end
215
+
194
216
  def pid_state
195
217
  ## For macOS output:
196
218
  ## https://travis-ci.org/thomasfl/filewatcher/jobs/304433538
@@ -212,13 +212,15 @@ describe Filewatcher do
212
212
  (1..4).each do |n|
213
213
  File.write("test/tmp/file#{n}.txt", "content#{n}")
214
214
  end
215
- sleep 0.2 # Give filewatcher time to respond
215
+ # Give filewatcher time to respond
216
+ sleep 1 * RubyWatchRun::SLEEP_MULTIPLIER
216
217
 
217
218
  # update block should not have been called
218
219
  wr.processed.should.be.empty
219
220
 
220
221
  wr.filewatcher.resume
221
- sleep 0.2 # Give filewatcher time to respond
222
+ # Give filewatcher time to respond
223
+ sleep 1 * RubyWatchRun::SLEEP_MULTIPLIER
222
224
 
223
225
  # update block still should not have been called
224
226
  wr.processed.should.be.empty
@@ -227,7 +229,8 @@ describe Filewatcher do
227
229
  File.write(file = "test/tmp/file#{n}.txt", "content#{n}")
228
230
  file
229
231
  end
230
- sleep 0.2 # Give filewatcher time to respond
232
+ # Give filewatcher time to respond
233
+ sleep 1 * RubyWatchRun::SLEEP_MULTIPLIER
231
234
 
232
235
  wr.filewatcher.stop
233
236
  wr.stop
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: filewatcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Flemming
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-20 00:00:00.000000000 Z
11
+ date: 2018-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bacon
@@ -25,25 +25,19 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.2'
27
27
  - !ruby/object:Gem::Dependency
28
- name: trollop
28
+ name: optimist
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '2.1'
34
- - - ">="
35
- - !ruby/object:Gem::Version
36
- version: 2.1.2
33
+ version: '3.0'
37
34
  type: :runtime
38
35
  prerelease: false
39
36
  version_requirements: !ruby/object:Gem::Requirement
40
37
  requirements:
41
38
  - - "~>"
42
39
  - !ruby/object:Gem::Version
43
- version: '2.1'
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: 2.1.2
40
+ version: '3.0'
47
41
  - !ruby/object:Gem::Dependency
48
42
  name: rake
49
43
  requirement: !ruby/object:Gem::Requirement
@@ -64,14 +58,14 @@ dependencies:
64
58
  requirements:
65
59
  - - "~>"
66
60
  - !ruby/object:Gem::Version
67
- version: '0.51'
61
+ version: '0.57'
68
62
  type: :development
69
63
  prerelease: false
70
64
  version_requirements: !ruby/object:Gem::Requirement
71
65
  requirements:
72
66
  - - "~>"
73
67
  - !ruby/object:Gem::Version
74
- version: '0.51'
68
+ version: '0.57'
75
69
  description: Detect changes in filesystem. Works anywhere.
76
70
  email:
77
71
  - thomas.flemming@gmail.com
@@ -114,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
108
  version: '0'
115
109
  requirements: []
116
110
  rubyforge_project:
117
- rubygems_version: 2.7.2
111
+ rubygems_version: 2.6.14.1
118
112
  signing_key:
119
113
  specification_version: 4
120
114
  summary: Lighweight filewatcher.