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()
This commit is contained in:
Gerard Korsten 2008-11-01 14:05:13 +02:00
parent 2e3aa68a1d
commit 069ac42a71
3 changed files with 57 additions and 4 deletions

View File

@ -337,10 +337,11 @@ class Watcher(object):
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('!')

36
tests/test-inotify-issue1371 Executable file
View File

@ -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`

View File

@ -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