From 8edd2f991238119ee790ebd8257c8d959b97e456 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Tue, 28 Apr 2015 20:58:07 +0100 Subject: [PATCH] Enable Windows inotify support. Signed-off-by: Daira Hopwood --- src/allmydata/frontends/drop_upload.py | 10 ++++++++-- src/allmydata/test/test_client.py | 3 ++- src/allmydata/test/test_drop_upload.py | 8 +++----- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/allmydata/frontends/drop_upload.py b/src/allmydata/frontends/drop_upload.py index 6a3149ce..7796efd8 100644 --- a/src/allmydata/frontends/drop_upload.py +++ b/src/allmydata/frontends/drop_upload.py @@ -18,7 +18,8 @@ from allmydata.scripts import backupdb class DropUploader(service.MultiService): name = 'drop-upload' - def __init__(self, client, upload_dircap, local_dir, dbfile, inotify=None): + def __init__(self, client, upload_dircap, local_dir, dbfile, inotify=None, + pending_delay=1.0): precondition_abspath(local_dir) service.MultiService.__init__(self) @@ -30,7 +31,10 @@ class DropUploader(service.MultiService): self._dbfile = dbfile if inotify is None: - from twisted.internet import inotify + if sys.platform == "win32": + from allmydata.windows import inotify + else: + from twisted.internet import inotify self._inotify = inotify if not self._local_path.exists(): @@ -52,6 +56,8 @@ class DropUploader(service.MultiService): self._uploaded_callback = lambda ign: None self._notifier = inotify.INotify() + if hasattr(self._notifier, 'set_pending_delay'): + self._notifier.set_pending_delay(pending_delay) # We don't watch for IN_CREATE, because that would cause us to read and upload a # possibly-incomplete file before the application has closed it. There should always diff --git a/src/allmydata/test/test_client.py b/src/allmydata/test/test_client.py index 1331c63f..8a75070f 100644 --- a/src/allmydata/test/test_client.py +++ b/src/allmydata/test/test_client.py @@ -303,7 +303,8 @@ class Basic(testutil.ReallyEqualMixin, testutil.NonASCIIPathMixin, unittest.Test class MockDropUploader(service.MultiService): name = 'drop-upload' - def __init__(self, client, upload_dircap, local_dir, dbfile, inotify=None): + def __init__(self, client, upload_dircap, local_dir, dbfile, inotify=None, + pending_delay=1.0): service.MultiService.__init__(self) self.client = client self.upload_dircap = upload_dircap diff --git a/src/allmydata/test/test_drop_upload.py b/src/allmydata/test/test_drop_upload.py index 8e871cbc..336cfab1 100644 --- a/src/allmydata/test/test_drop_upload.py +++ b/src/allmydata/test/test_drop_upload.py @@ -168,11 +168,6 @@ class RealTest(DropUploadTestMixin, unittest.TestCase): """This is skipped unless both Twisted and the platform support inotify.""" def test_drop_upload(self): - # We should always have runtime.platform.supportsINotify, because we're using - # Twisted >= 10.1. - if not runtime.platform.supportsINotify(): - raise unittest.SkipTest("Drop-upload support can only be tested for-real on an OS that supports inotify or equivalent.") - self.inotify = None # use the appropriate inotify for the platform self.basedir = "drop_upload.RealTest.test_drop_upload" return self._test() @@ -180,3 +175,6 @@ class RealTest(DropUploadTestMixin, unittest.TestCase): def notify_close_write(self, path): # Writing to the file causes the notification. pass + +if sys.platform != "win32" and not runtime.platform.supportsINotify(): + RealTest.skip = "Drop-upload support can only be tested for-real on an OS that supports inotify or equivalent." -- 2.45.2