From 05b856df2339fe8469698a3d4ba47ae893924d2f Mon Sep 17 00:00:00 2001 From: Federico Ceratto Date: Wed, 2 Dec 2015 16:05:50 +0000 Subject: [PATCH 1/2] Closes: #3611 --- lib/pure/fsmonitor.nim | 41 ++++++++++++++++++++++++--------------- tests/misc/tfsmonitor.nim | 12 ++++++++++++ 2 files changed, 37 insertions(+), 16 deletions(-) create mode 100644 tests/misc/tfsmonitor.nim diff --git a/lib/pure/fsmonitor.nim b/lib/pure/fsmonitor.nim index 787acb5d4d..8c98391708 100644 --- a/lib/pure/fsmonitor.nim +++ b/lib/pure/fsmonitor.nim @@ -78,21 +78,21 @@ proc add*(monitor: FSMonitor, target: string, ## watched paths of ``monitor``. ## You can specify the events to report using the ``filters`` parameter. - var INFilter = -1 + var INFilter = 0 for f in filters: case f - of MonitorAccess: INFilter = INFilter and IN_ACCESS - of MonitorAttrib: INFilter = INFilter and IN_ATTRIB - of MonitorCloseWrite: INFilter = INFilter and IN_CLOSE_WRITE - of MonitorCloseNoWrite: INFilter = INFilter and IN_CLOSE_NO_WRITE - of MonitorCreate: INFilter = INFilter and IN_CREATE - of MonitorDelete: INFilter = INFilter and IN_DELETE - of MonitorDeleteSelf: INFilter = INFilter and IN_DELETE_SELF - of MonitorModify: INFilter = INFilter and IN_MODIFY - of MonitorMoveSelf: INFilter = INFilter and IN_MOVE_SELF - of MonitorMoved: INFilter = INFilter and IN_MOVED_FROM and IN_MOVED_TO - of MonitorOpen: INFilter = INFilter and IN_OPEN - of MonitorAll: INFilter = INFilter and IN_ALL_EVENTS + of MonitorAccess: INFilter = INFilter or IN_ACCESS + of MonitorAttrib: INFilter = INFilter or IN_ATTRIB + of MonitorCloseWrite: INFilter = INFilter or IN_CLOSE_WRITE + of MonitorCloseNoWrite: INFilter = INFilter or IN_CLOSE_NO_WRITE + of MonitorCreate: INFilter = INFilter or IN_CREATE + of MonitorDelete: INFilter = INFilter or IN_DELETE + of MonitorDeleteSelf: INFilter = INFilter or IN_DELETE_SELF + of MonitorModify: INFilter = INFilter or IN_MODIFY + of MonitorMoveSelf: INFilter = INFilter or IN_MOVE_SELF + of MonitorMoved: INFilter = INFilter or IN_MOVED_FROM or IN_MOVED_TO + of MonitorOpen: INFilter = INFilter or IN_OPEN + of MonitorAll: INFilter = INFilter or IN_ALL_EVENTS result = inotifyAddWatch(monitor.fd, target, INFilter.uint32) if result < 0: @@ -200,9 +200,18 @@ proc register*(d: Dispatcher, monitor: FSMonitor, when not defined(testing) and isMainModule: proc main = - var disp = newDispatcher() - var monitor = newMonitor() - echo monitor.add("/home/dom/inotifytests/") + var + disp = newDispatcher() + monitor = newMonitor() + n = 0 + n = monitor.add("/tmp") + assert n == 1 + n = monitor.add("/tmp", {MonitorAll}) + assert n == 1 + n = monitor.add("/tmp", {MonitorCloseWrite, MonitorCloseNoWrite}) + assert n == 1 + n = monitor.add("/tmp", {MonitorMoved, MonitorOpen, MonitorAccess}) + assert n == 1 disp.register(monitor, proc (m: FSMonitor, ev: MonitorEvent) = echo("Got event: ", ev.kind) diff --git a/tests/misc/tfsmonitor.nim b/tests/misc/tfsmonitor.nim new file mode 100644 index 0000000000..27e1a2e323 --- /dev/null +++ b/tests/misc/tfsmonitor.nim @@ -0,0 +1,12 @@ +# +# fsmonitor test +# + +import unittest +import fsmonitor + +suite "fsmonitor": + test "should not raise OSError, bug# 3611": + let m = newMonitor() + m.add("foo", {MonitorCloseWrite, MonitorCloseNoWrite}) + From 97540b2ce44d8a31c2645f714f1d78edcae4218e Mon Sep 17 00:00:00 2001 From: Federico Ceratto Date: Thu, 3 Dec 2015 15:57:55 +0000 Subject: [PATCH 2/2] Fix typo, minor rephrasing. --- lib/pure/fsmonitor.nim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pure/fsmonitor.nim b/lib/pure/fsmonitor.nim index 8c98391708..115c4739e7 100644 --- a/lib/pure/fsmonitor.nim +++ b/lib/pure/fsmonitor.nim @@ -34,8 +34,8 @@ type MonitorEventType* = enum ## Monitor event type MonitorAccess, ## File was accessed. MonitorAttrib, ## Metadata changed. - MonitorCloseWrite, ## Writtable file was closed. - MonitorCloseNoWrite, ## Unwrittable file closed. + MonitorCloseWrite, ## Writable file was closed. + MonitorCloseNoWrite, ## Non-writable file closed. MonitorCreate, ## Subfile was created. MonitorDelete, ## Subfile was deleted. MonitorDeleteSelf, ## Watched file/directory was itself deleted.