inotify: server raising an error when removing a file (issue1371)
When a file is deleted via hg rm <file> the dirstate marks the file with a
status of 'r'. The physical file has been deleted, but the inotify server
tries to do a stat on the file after it's been removed.
Patch catches the exception and correctly call updatestatus()
--- a/hgext/inotify/server.py Sat Nov 01 15:15:14 2008 +0300
+++ b/hgext/inotify/server.py Sat Nov 01 14:05:13 2008 +0200
@@ -337,10 +337,11 @@
for wfn, state in ds.iteritems():
if not wfn.startswith(wtopdir):
continue
- status = state[0]
- st = self.stat(wfn)
- if status == 'r' and not st:
- self.updatestatus(wfn, st, status=status)
+ try:
+ st = self.stat(wfn)
+ except OSError:
+ status = state[0]
+ self.updatestatus(wfn, None, status=status)
else:
self.updatestatus(wfn, st)
self.check_deleted('!')
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-inotify-issue1371 Sat Nov 01 14:05:13 2008 +0200
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+"$TESTDIR/hghave" inotify || exit 80
+
+hg init
+
+touch a b c d e f
+
+echo "[extensions]" >> $HGRCPATH
+echo "inotify=" >> $HGRCPATH
+echo inserv1
+
+echo % inserve
+hg inserve -d --pid-file=hg.pid 2>&1
+cat hg.pid >> "$DAEMON_PIDS"
+
+hg ci -Am m
+
+
+# let the daemon finish its stuff
+sleep 1
+
+#Need to test all file opperations
+hg rm a
+rm b
+echo c >> c
+touch g
+hg add g
+hg mv e h
+hg status
+
+
+sleep 5
+echo "Are we able to kill the service? if not, the service died on some error"
+kill `cat hg.pid`
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-inotify-issue1371.out Sat Nov 01 14:05:13 2008 +0200
@@ -0,0 +1,16 @@
+inserv1
+% inserve
+adding a
+adding b
+adding c
+adding d
+adding e
+adding f
+adding hg.pid
+M c
+A g
+A h
+R a
+R e
+! b
+Are we able to kill the service? if not, the service died on some error