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 committed by Brian Warner
parent e7fb665e06
commit 5f143f7635
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)
@ -32,7 +33,10 @@ class DropUploader(service.MultiService):
self.is_upload_ready = False
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():
@ -54,6 +58,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

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

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