changeset 10096:a223894ca044

Merge with crew
author Matt Mackall <mpm@selenic.com>
date Fri, 18 Dec 2009 14:27:30 -0600
parents 4e2fb6cc0e1e (diff) 69ce7a10e593 (current diff)
children c7eeec114d99
files
diffstat 3 files changed, 30 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/inotify/linuxserver.py	Tue Dec 15 10:37:23 2009 +0000
+++ b/hgext/inotify/linuxserver.py	Fri Dec 18 14:27:30 2009 -0600
@@ -170,6 +170,7 @@
         server.repowatcher.__init__(self, ui, dirstate, root)
 
         self.lastevent = {}
+        self.dirty = False
         try:
             self.watcher = watcher.watcher()
         except OSError, err:
@@ -214,7 +215,6 @@
     def setup(self):
         self.ui.note(_('watching directories under %r\n') % self.wprefix)
         self.add_watch(self.wprefix + '.hg', inotify.IN_DELETE)
-        self.check_dirstate()
 
     def scan(self, topdir=''):
         ds = self.dirstate._map.copy()
@@ -250,7 +250,7 @@
             self.update_hgignore()
         try:
             st = self.stat(wpath)
-            if stat.S_ISREG(st[0]):
+            if stat.S_ISREG(st[0]) or stat.S_ISLNK(st[0]):
                 self.updatefile(wpath, st)
         except OSError:
             pass
@@ -272,8 +272,6 @@
         if wpath == '.hgignore':
             self.update_hgignore()
         elif wpath.startswith('.hg/'):
-            if wpath == '.hg/wlock':
-                self.check_dirstate()
             return
 
         self.deletefile(wpath, self.dirstate[wpath])
@@ -335,6 +333,10 @@
             self.ui.note(_('%s reading %d events\n') %
                          (self.event_time(), len(events)))
         for evt in events:
+            if evt.fullpath == self.wprefix[:-1]:
+                # events on the root of the repository
+                # itself, e.g. permission changes or repository move
+                continue
             assert evt.fullpath.startswith(self.wprefix)
             wpath = evt.fullpath[self.prefixlen:]
 
@@ -343,16 +345,26 @@
             if wpath.startswith('.hg/') and evt.mask & inotify.IN_ISDIR:
                 # ignore subdirectories of .hg/ (merge, patches...)
                 continue
+            if wpath == ".hg/wlock":
+                if evt.mask & inotify.IN_DELETE:
+                    self.dirstate.invalidate()
+                    self.dirty = False
+                    self.scan()
+                elif evt.mask & inotify.IN_CREATE:
+                    self.dirty = True
+            else:
+                if self.dirty:
+                    continue
 
-            if evt.mask & inotify.IN_UNMOUNT:
-                self.process_unmount(wpath, evt)
-            elif evt.mask & (inotify.IN_MODIFY | inotify.IN_ATTRIB):
-                self.process_modify(wpath, evt)
-            elif evt.mask & (inotify.IN_DELETE | inotify.IN_DELETE_SELF |
-                             inotify.IN_MOVED_FROM):
-                self.process_delete(wpath, evt)
-            elif evt.mask & (inotify.IN_CREATE | inotify.IN_MOVED_TO):
-                self.process_create(wpath, evt)
+                if evt.mask & inotify.IN_UNMOUNT:
+                    self.process_unmount(wpath, evt)
+                elif evt.mask & (inotify.IN_MODIFY | inotify.IN_ATTRIB):
+                    self.process_modify(wpath, evt)
+                elif evt.mask & (inotify.IN_DELETE | inotify.IN_DELETE_SELF |
+                                 inotify.IN_MOVED_FROM):
+                    self.process_delete(wpath, evt)
+                elif evt.mask & (inotify.IN_CREATE | inotify.IN_MOVED_TO):
+                    self.process_create(wpath, evt)
 
         self.lastevent.clear()
 
--- a/hgext/inotify/server.py	Tue Dec 15 10:37:23 2009 +0000
+++ b/hgext/inotify/server.py	Fri Dec 18 14:27:30 2009 -0600
@@ -281,17 +281,6 @@
             del self.statustrees[key].dir(root).files[fn]
             del self.tree.dir(root).files[fn]
 
-    def check_dirstate(self):
-        ds_info = self.dirstate_info()
-        if ds_info == self.ds_info:
-            return
-        self.ds_info = ds_info
-        if not self.ui.debugflag:
-            self.last_event = None
-        self.dirstate.invalidate()
-        self.handle_timeout()
-        self.scan()
-
     def update_hgignore(self):
         # An update of the ignore file can potentially change the
         # states of all unknown and ignored files.
--- a/tests/run-tests.py	Tue Dec 15 10:37:23 2009 +0000
+++ b/tests/run-tests.py	Fri Dec 18 14:27:30 2009 -0600
@@ -251,9 +251,8 @@
 
     return missing, failed
 
-def showdiff(expected, output):
-    for line in difflib.unified_diff(expected, output,
-            "Expected output", "Test output"):
+def showdiff(expected, output, ref, err):
+    for line in difflib.unified_diff(expected, output, ref, err):
         sys.stdout.write(line)
 
 def findprogram(program):
@@ -452,13 +451,13 @@
         if not options.verbose:
             skips.append((test, msg))
         else:
-            print "\nSkipping %s: %s" % (test, msg)
+            print "\nSkipping %s: %s" % (testpath, msg)
         return None
 
     def fail(msg):
         fails.append((test, msg))
         if not options.nodiff:
-            print "\nERROR: %s %s" % (test, msg)
+            print "\nERROR: %s %s" % (testpath, msg)
         return None
 
     vlog("# Test", test)
@@ -565,7 +564,7 @@
         else:
             fail("output changed")
         if not options.nodiff:
-            showdiff(refout, out)
+            showdiff(refout, out, ref, err)
         ret = 1
     elif ret:
         mark = '!'