Enable Windows inotify support.

Signed-off-by: Daira Hopwood <daira@jacaranda.org>
This commit is contained in:
Daira Hopwood 2015-04-28 20:58:07 +01:00
parent 1607724c59
commit 67239ffa9c
3 changed files with 13 additions and 8 deletions

View File

@ -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

View File

@ -306,7 +306,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

View File

@ -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."