inotify: do not rely on stat(.hg/dirstate) to invalidate our dirstate
stat() is not reliable when several events happen quickly. Which means
that if two hg actions occur in the same second, stat() result will not
reflect the second change. And only _one_ invalidate() call was done.
Also ignore the events that occur when wlock is held, since wlock release
will trigger a full rescan anyway.
Fixes 17 run-tests.py --inotify tests.
#!/bin/sh
hglocate()
{
echo "hg locate $@"
hg locate "$@"
ret=$?
echo
return $ret
}
mkdir t
cd t
hg init
echo 0 > a
echo 0 > b
echo 0 > t.h
mkdir t
echo 0 > t/x
echo 0 > t/b
echo 0 > t/e.h
mkdir dir.h
echo 0 > dir.h/foo
hg ci -A -m m -d "1000000 0"
touch nottracked
hglocate a && echo locate succeeded || echo locate failed
hglocate NONEXISTENT && echo locate succeeded || echo locate failed
hglocate
hg rm a
hg ci -m m -d "1000000 0"
hglocate a
hglocate NONEXISTENT
hglocate relpath:NONEXISTENT
hglocate
hglocate -r 0 a
hglocate -r 0 NONEXISTENT
hglocate -r 0 relpath:NONEXISTENT
hglocate -r 0
echo % -I/-X with relative path should work
cd t
hglocate
hglocate -I ../t
# test issue294
cd ..
rm -r t
hglocate 't/**'
mkdir otherdir
cd otherdir
hglocate b
hglocate '*.h'
hglocate path:t/x
hglocate 're:.*\.h$'
hglocate -r 0 b
hglocate -r 0 '*.h'
hglocate -r 0 path:t/x
hglocate -r 0 're:.*\.h$'