fsmonitor: use vfs instead of opener (issue5938)
authorFUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Fri, 12 Oct 2018 16:45:46 +0900
changeset 40209 6b1a8c396b05
parent 40208 b7ba1cfba174
child 40210 8f192f2c4a1e
fsmonitor: use vfs instead of opener (issue5938) "opener" of localrepository object was dropped at Mercurial 4.3 (or a7e210167c28). "vfs" should be used instead. wlock is required to write into a file under .hg directory. For efficiency, we should change _cmpsets() from: 1. acquire wlock 2. open log file under .hg directory with write mode 3. compare between result of watchman and Mercurial's dirstate logic 4. write out error info into a file, if error is detected 5. release wlock to: 1. compare between result of watchman and Mercurial's dirstate logic 2. acquire wlock, if error is detected 3. open and write error info into a file 4. release wlock But this is another issue.
hgext/fsmonitor/__init__.py
--- a/hgext/fsmonitor/__init__.py	Fri Oct 12 16:07:08 2018 +0900
+++ b/hgext/fsmonitor/__init__.py	Fri Oct 12 16:45:46 2018 +0900
@@ -460,7 +460,7 @@
                 f = open(fn, 'wb')
             else:
                 fn = 'fsmonitorfail.log'
-                f = self.opener(fn, 'wb')
+                f = self.vfs.open(fn, 'wb')
         except (IOError, OSError):
             self.ui.warn(_('warning: unable to write to %s\n') % fn)
             return
@@ -564,8 +564,10 @@
             self.ui.fout, self.ui.ferr = fout, ferr
 
         # clean isn't tested since it's set to True above
-        _cmpsets([modified, added, removed, deleted, unknown, ignored, clean],
-                 rv2)
+        with self.wlock():
+            _cmpsets(
+                [modified, added, removed, deleted, unknown, ignored, clean],
+                rv2)
         modified, added, removed, deleted, unknown, ignored, clean = rv2
 
     return scmutil.status(