listen 3.0.3 → 3.0.4
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/README.md +28 -40
- data/lib/listen/adapter/config.rb +3 -0
- data/lib/listen/adapter/darwin.rb +29 -13
- data/lib/listen/adapter/linux.rb +1 -1
- data/lib/listen/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c7fe2432921c30a0fc8bd2552a7bd2bac7b62b1
|
4
|
+
data.tar.gz: b0fab87bbb62064ab57b6ddf9c8c9e08a9fa4d6a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fcf5fda1fd7cd0a63652d481cf2570f724cad065fa3ff63d7fc81cf02f74f6fb3856c97625fbcbe5a067d8b4a30e15ca03d2a60f48556b7400af7e5e535e866d
|
7
|
+
data.tar.gz: 6bd097ccf35884c62428ee1271c4b695ba90236adde490d39d44cbf18f883026599abdd30b11059c155d468b4b04e51401cf974998d70741360119d2f6ab2605
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
:exclamation: Listen is currently accepting more maintainers. Please [read this](https://github.com/guard/guard/wiki/Maintainers) if you're interested in joining the team.
|
2
2
|
|
3
3
|
# Listen
|
4
4
|
|
@@ -6,19 +6,6 @@
|
|
6
6
|
|
7
7
|
The Listen gem listens to file modifications and notifies you about the changes.
|
8
8
|
|
9
|
-
## Known issues / Quickfixes / Workarounds
|
10
|
-
|
11
|
-
*NOTE: TCP functionality has been removed from Listen 3.x - please use Listen
|
12
|
-
2.x until alternative server and client gems are created/released for 3.x.*
|
13
|
-
|
14
|
-
*NOTE: Ruby 1.9.3 is no longer maintained (and may not work with Listen) - it's best to upgrade to Ruby 2.2.2*
|
15
|
-
|
16
|
-
For other issues, just head over here: https://github.com/guard/listen/wiki/Quickfixes,-known-issues-and-workarounds
|
17
|
-
|
18
|
-
## Tips and Techniques
|
19
|
-
|
20
|
-
Make sure you know these few basic tricks: https://github.com/guard/listen/wiki/Tips-and-Techniques
|
21
|
-
|
22
9
|
## Features
|
23
10
|
|
24
11
|
* OS-optimized adapters on MRI for Mac OS X 10.6+, Linux, \*BSD and Windows, [more info](#listen-adapters) below.
|
@@ -28,21 +15,21 @@ Make sure you know these few basic tricks: https://github.com/guard/listen/wiki/
|
|
28
15
|
* Increased change detection accuracy on OS X HFS and VFAT volumes.
|
29
16
|
* Tested on MRI Ruby environments (2.0+ only) via [Travis CI](https://travis-ci.org/guard/listen),
|
30
17
|
|
31
|
-
|
32
|
-
|
33
|
-
NOTES:
|
34
|
-
- Some filesystems won't work without polling (VM/Vagrant Shared folders, NFS, Samba, sshfs, etc.)
|
35
|
-
- Specs suite on JRuby and Rubinius aren't reliable on Travis CI, but should work.
|
36
|
-
- Windows and \*BSD adapter aren't continuously and automaticaly tested.
|
37
|
-
|
18
|
+
## Issues / limitations
|
38
19
|
|
39
|
-
|
20
|
+
* Limited support for symlinked directories ([#279](https://github.com/guard/listen/issues/279)):
|
21
|
+
* Symlinks are always followed ([#25](https://github.com/guard/listen/issues/25)).
|
22
|
+
* Symlinked directories pointing within a watched directory are not supported ([#273](https://github.com/guard/listen/pull/273)- see [Duplicate directory errors](https://github.com/guard/listen/wiki/Duplicate-directory-errors)).
|
23
|
+
* No directory/adapter-specific configuration options.
|
24
|
+
* Support for plugins planned for future.
|
25
|
+
* TCP functionality was removed in Listen [3.0.0](https://github.com/guard/listen/releases/tag/v3.0.0) ([#319](https://github.com/guard/listen/issues/319), [#218](https://github.com/guard/listen/issues/218)). There are plans to extract this feature to separate gems ([#258](https://github.com/guard/listen/issues/258)), until this is finished, you can use by locking the `listen` gem to version `'~> 2.10'`.
|
26
|
+
* Some filesystems won't work without polling (VM/Vagrant Shared folders, NFS, Samba, sshfs, etc.).
|
27
|
+
* Specs suite on JRuby and Rubinius aren't reliable on Travis CI, but should work.
|
28
|
+
* Windows and \*BSD adapter aren't continuously and automatically tested.
|
29
|
+
* OSX adapter has some performance limitations ([#342](https://github.com/guard/listen/issues/342)).
|
30
|
+
* Ruby 1.9.3 is no longer maintained (and may not work with Listen) - it's best to upgrade to Ruby 2.2.2.
|
40
31
|
|
41
|
-
|
42
|
-
* Directory/adapter specific configuration options
|
43
|
-
* Support for plugins
|
44
|
-
|
45
|
-
Pull request or help is very welcome for these.
|
32
|
+
Pull requests or help is very welcome for these.
|
46
33
|
|
47
34
|
## Install
|
48
35
|
|
@@ -52,7 +39,6 @@ The simplest way to install Listen is to use [Bundler](http://bundler.io).
|
|
52
39
|
gem 'listen', '~> 3.0' # NOTE: for TCP functionality, use '~> 2.10' for now
|
53
40
|
```
|
54
41
|
|
55
|
-
|
56
42
|
## Usage
|
57
43
|
|
58
44
|
Call `Listen.to` with either a single directory or multiple directories, then define the "changes" callback in a block.
|
@@ -72,7 +58,7 @@ sleep
|
|
72
58
|
Listeners can also be easily paused/unpaused:
|
73
59
|
|
74
60
|
``` ruby
|
75
|
-
listener = Listen.to('dir/path/to/listen') { |modified, added, removed|
|
61
|
+
listener = Listen.to('dir/path/to/listen') { |modified, added, removed| puts 'handle changes here...' }
|
76
62
|
|
77
63
|
listener.start
|
78
64
|
listener.paused? # => false
|
@@ -102,13 +88,13 @@ listener.ignore /\.rb/ # ignore rb extension in addition of pkg.
|
|
102
88
|
sleep
|
103
89
|
```
|
104
90
|
|
105
|
-
Note:
|
91
|
+
Note: `:ignore` regexp patterns are evaluated against relative paths.
|
106
92
|
|
107
|
-
Note:
|
93
|
+
Note: Ignoring paths does not improve performance, except when Polling ([#274](https://github.com/guard/listen/issues/274))
|
108
94
|
|
109
95
|
### Only
|
110
96
|
|
111
|
-
Listen catches all files (less the ignored
|
97
|
+
Listen catches all files (less the ignored ones) by default. If you want to only listen to a specific type of file (i.e., just `.rb` extension), you should use the `only` option/method.
|
112
98
|
|
113
99
|
``` ruby
|
114
100
|
listener = Listen.to('dir/path/to/listen', only: /\.rb$/) { |modified, added, removed| # ... }
|
@@ -117,7 +103,7 @@ listener.only /_spec\.rb$/ # overwrite all existing only patterns.
|
|
117
103
|
sleep
|
118
104
|
```
|
119
105
|
|
120
|
-
Note:
|
106
|
+
Note: `:only` regexp patterns are evaluated only against relative **file** paths.
|
121
107
|
|
122
108
|
|
123
109
|
## Changes callback
|
@@ -174,14 +160,15 @@ force_polling: true # Force the use of the polling a
|
|
174
160
|
relative: false # Whether changes should be relative to current dir or not
|
175
161
|
# default: false
|
176
162
|
|
177
|
-
debug: true # Enable Listen logger
|
178
|
-
# default: false
|
179
|
-
|
180
163
|
polling_fallback_message: 'custom message' # Set a custom polling fallback message (or disable it with false)
|
181
164
|
# default: "Listen will be polling for changes. Learn more at https://github.com/guard/listen#listen-adapters."
|
182
165
|
```
|
183
166
|
|
184
|
-
|
167
|
+
## Debugging
|
168
|
+
|
169
|
+
Setting the environment variable `LISTEN_GEM_DEBUGGING=1` sets up the INFO level logger, while `LISTEN_GEM_DEBUGGING=2` sets up the DEBUG level logger.
|
170
|
+
|
171
|
+
You can also set `Listen.logger` to a custom logger.
|
185
172
|
|
186
173
|
|
187
174
|
## Listen adapters
|
@@ -202,7 +189,7 @@ while initializing the listener.
|
|
202
189
|
|
203
190
|
### On Windows
|
204
191
|
|
205
|
-
If
|
192
|
+
If you are on Windows, it's recommended to use the [`wdm`](https://github.com/Maher4Ever/wdm) adapter instead of polling.
|
206
193
|
|
207
194
|
Please add the following to your Gemfile:
|
208
195
|
|
@@ -212,7 +199,7 @@ gem 'wdm', '>= 0.1.0' if Gem.win_platform?
|
|
212
199
|
|
213
200
|
### On \*BSD
|
214
201
|
|
215
|
-
If
|
202
|
+
If you are on \*BSD you can try to use the [`rb-kqueue`](https://github.com/mat813/rb-kqueue) adapter instead of polling.
|
216
203
|
|
217
204
|
Please add the following to your Gemfile:
|
218
205
|
|
@@ -234,7 +221,6 @@ Please visit the [installation section of the Listen WIKI](https://github.com/gu
|
|
234
221
|
|
235
222
|
See [TROUBLESHOOTING](https://github.com/guard/listen/wiki/Troubleshooting)
|
236
223
|
|
237
|
-
|
238
224
|
## Performance
|
239
225
|
|
240
226
|
If Listen seems slow or unresponsive, make sure you're not using the Polling adapter (you should see a warning upon startup if you are).
|
@@ -255,6 +241,8 @@ Also, if the directories you're watching contain many files, make sure you're:
|
|
255
241
|
|
256
242
|
When in doubt, LISTEN_GEM_DEBUGGING=2 can help discover the actual events and time they happened.
|
257
243
|
|
244
|
+
See also [Tips and Techniques](https://github.com/guard/listen/wiki/Tips-and-Techniques).
|
245
|
+
|
258
246
|
## Development
|
259
247
|
|
260
248
|
* Documentation hosted at [RubyDoc](http://rubydoc.info/github/guard/listen/master/frames).
|
@@ -9,6 +9,9 @@ module Listen
|
|
9
9
|
attr_reader :adapter_options
|
10
10
|
|
11
11
|
def initialize(directories, queue, silencer, adapter_options)
|
12
|
+
# Default to current directory if no directories are supplied
|
13
|
+
directories = [Dir.pwd] if directories.to_a.empty?
|
14
|
+
|
12
15
|
# TODO: fix (flatten, array, compact?)
|
13
16
|
@directories = directories.map do |directory|
|
14
17
|
Pathname.new(directory.to_s).realpath
|
@@ -16,32 +16,27 @@ module Listen
|
|
16
16
|
# NOTE: each directory gets a DIFFERENT callback!
|
17
17
|
def _configure(dir, &callback)
|
18
18
|
require 'rb-fsevent'
|
19
|
+
|
19
20
|
opts = { latency: options.latency }
|
20
21
|
|
21
22
|
@workers ||= ::Queue.new
|
22
23
|
@workers << FSEvent.new.tap do |worker|
|
24
|
+
_log :debug, "fsevent: watching: #{dir.to_s.inspect}"
|
23
25
|
worker.watch(dir.to_s, opts, &callback)
|
24
26
|
end
|
25
27
|
end
|
26
28
|
|
27
|
-
# NOTE: _run is called within a thread, so run every other
|
28
|
-
# worker in it's own thread
|
29
29
|
def _run
|
30
30
|
first = @workers.pop
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
rescue
|
37
|
-
_log_exception 'run() in extra thread(s) failed: %s: %s'
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
first.run
|
31
|
+
|
32
|
+
# NOTE: _run is called within a thread, so run every other
|
33
|
+
# worker in it's own thread
|
34
|
+
_run_workers_in_background(_to_array(@workers))
|
35
|
+
_run_worker(first)
|
42
36
|
end
|
43
37
|
|
44
38
|
def _process_event(dir, event)
|
39
|
+
_log :debug, "fsevent: processing event: #{event.inspect}"
|
45
40
|
event.each do |path|
|
46
41
|
new_path = Pathname.new(path.sub(/\/$/, ''))
|
47
42
|
_log :debug, "fsevent: #{new_path}"
|
@@ -50,6 +45,27 @@ module Listen
|
|
50
45
|
_queue_change(:dir, dir, rel_path, recursive: true)
|
51
46
|
end
|
52
47
|
end
|
48
|
+
|
49
|
+
def _run_worker(worker)
|
50
|
+
_log :debug, "fsevent: running worker: #{worker.inspect}"
|
51
|
+
worker.run
|
52
|
+
rescue
|
53
|
+
_log_exception 'fsevent: running worker failed: %s: %s'
|
54
|
+
end
|
55
|
+
|
56
|
+
def _run_workers_in_background(workers)
|
57
|
+
workers.each do |worker|
|
58
|
+
# NOTE: while passing local variables to the block below is not
|
59
|
+
# thread safe, using 'worker' from the enumerator above is ok
|
60
|
+
Listen::Internals::ThreadPool.add { _run_worker(worker) }
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def _to_array(queue)
|
65
|
+
workers = []
|
66
|
+
workers << queue.pop until queue.empty?
|
67
|
+
workers
|
68
|
+
end
|
53
69
|
end
|
54
70
|
end
|
55
71
|
end
|
data/lib/listen/adapter/linux.rb
CHANGED
data/lib/listen/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: listen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thibaud Guillaume-Gentil
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rb-fsevent
|