From: Daira Hopwood <daira@jacaranda.org>
Date: Tue, 28 Apr 2015 19:58:07 +0000 (+0100)
Subject: Enable Windows inotify support.
X-Git-Url: https://git.rkrishnan.org/specifications/components?a=commitdiff_plain;h=6fda089109924fe74503d98d305ca528aabcee55;p=tahoe-lafs%2Ftahoe-lafs.git

Enable Windows inotify support.

Signed-off-by: Daira Hopwood <daira@jacaranda.org>
---

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