fsmonitor: centralize setup procedures for dirstate
authorFUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Mon, 10 Jul 2017 23:09:52 +0900
changeset 33386 5a9b4370bb3b
parent 33385 8bb4c69c4000
child 33387 68e9762a357b
fsmonitor: centralize setup procedures for dirstate
hgext/fsmonitor/__init__.py
--- a/hgext/fsmonitor/__init__.py	Mon Jul 10 23:09:52 2017 +0900
+++ b/hgext/fsmonitor/__init__.py	Mon Jul 10 23:09:52 2017 +0900
@@ -536,8 +536,8 @@
                      status.deleted + status.unknown)
         wctx.repo()._fsmonitorstate.set(clock, hashignore, notefiles)
 
-def makedirstate(cls):
-    class fsmonitordirstate(cls):
+def makedirstate(repo, dirstate):
+    class fsmonitordirstate(dirstate.__class__):
         def _fsmonitorinit(self, fsmonitorstate, watchmanclient):
             # _fsmonitordisable is used in paranoid mode
             self._fsmonitordisable = False
@@ -558,14 +558,14 @@
             self._fsmonitorstate.invalidate()
             return super(fsmonitordirstate, self).invalidate(*args, **kwargs)
 
-    return fsmonitordirstate
+    dirstate.__class__ = fsmonitordirstate
+    dirstate._fsmonitorinit(repo._fsmonitorstate, repo._watchmanclient)
 
 def wrapdirstate(orig, self):
     ds = orig(self)
     # only override the dirstate when Watchman is available for the repo
     if util.safehasattr(self, '_fsmonitorstate'):
-        ds.__class__ = makedirstate(ds.__class__)
-        ds._fsmonitorinit(self._fsmonitorstate, self._watchmanclient)
+        makedirstate(self, ds)
     return ds
 
 def extsetup(ui):
@@ -701,8 +701,8 @@
         # at this point since fsmonitorstate wasn't present, repo.dirstate is
         # not a fsmonitordirstate
         dirstate = repo.dirstate
-        dirstate.__class__ = makedirstate(dirstate.__class__)
-        dirstate._fsmonitorinit(fsmonitorstate, client)
+        makedirstate(repo, dirstate)
+
         # invalidate property cache, but keep filecache which contains the
         # wrapped dirstate object
         del repo.unfiltered().__dict__['dirstate']