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
add()
{
echo $2 >> $1
}
hg init t
cd t
# set up a boring main branch
add a a
hg add a
mkdir x
add x/x x
hg add x/x
hg ci -m0
add a m1
hg ci -m1
add a m2
add x/y y1
hg add x/y
hg ci -m2
cd ..
show()
{
echo "- $2: $1"
hg st -C $1
echo
hg diff --git $1
echo
}
count=0
# make a new branch and get diff/status output
# $1 - first commit
# $2 - second commit
# $3 - working dir action
# $4 - test description
tb()
{
hg clone t t2 ; cd t2
hg co -q -C 0
add a $count
count=`expr $count + 1`
hg ci -m "t0"
$1
hg ci -m "t1"
$2
hg ci -m "t2"
$3
echo "** $4 **"
echo "** $1 / $2 / $3"
show "" "working to parent"
show "--rev 0" "working to root"
show "--rev 2" "working to branch"
show "--rev 0 --rev ." "root to parent"
show "--rev . --rev 0" "parent to root"
show "--rev 2 --rev ." "branch to parent"
show "--rev . --rev 2" "parent to branch"
echo
cd ..
rm -rf t2
}
tb "add a a1" "add a a2" "hg mv a b" "rename in working dir"
tb "add a a1" "add a a2" "hg cp a b" "copy in working dir"
tb "hg mv a b" "add b b1" "add b w" "single rename"
tb "hg cp a b" "add b b1" "add a w" "single copy"
tb "hg mv a b" "hg mv b c" "hg mv c d" "rename chain"
tb "hg cp a b" "hg cp b c" "hg cp c d" "copy chain"
tb "add a a1" "hg mv a b" "hg mv b a" "circular rename"
tb "hg mv x y" "add y/x x1" "add y/x x2" "directory move"