dirstate.status: don't ignore symlink placeholders in the normal set
On Windows, there are two ways symlinks can manifest themselves:
1. As placeholders: text files containing the symlink's target. This is what
usually happens with fresh clones on Windows.
2. With their dereferenced contents. This happens with clones accessed over NFS
or Samba.
In order to handle case 2,
ca6cebd8734e made dirstate.status ignore all symlink
placeholders on Windows. It doesn't ignore symlinks in the lookup set, though,
since those don't have the link bit set. This is problematic because it
violates the invariant that `hg status` with every file in the normal set
produces the same output as `hg status` with every file in the lookup set.
With this change, symlink placeholders in the normal set are no longer ignored.
We instead rely on code in localrepo.status that uses heuristics to look for
suspect placeholders.
An upcoming patch will test this out by no longer adding files written in the
last second of an update to the lookup set.
issues when status queries are issued when dirstate is dirty
$ "$TESTDIR/hghave" inotify || exit 80
$ echo "[extensions]" >> $HGRCPATH
$ echo "inotify=" >> $HGRCPATH
$ echo "fetch=" >> $HGRCPATH
issue1810: inotify and fetch
$ hg init test; cd test
$ hg inserve -d --pid-file=../hg.pid
$ cat ../hg.pid >> "$DAEMON_PIDS"
$ echo foo > foo
$ hg add
adding foo
$ hg ci -m foo
$ cd ..
$ hg --config "inotify.pidfile=../hg2.pid" clone test test2
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cat ../hg2.pid >> "$DAEMON_PIDS"
$ cd test2
$ echo bar > bar
$ hg add
adding bar
$ hg ci -m bar
$ cd ../test
$ echo spam > spam
$ hg add
adding spam
$ hg ci -m spam
$ cd ../test2
$ hg st
abort, outstanding changes
$ hg fetch -q
$ hg st
$ cd ..
issue1719: inotify and mq
$ echo "mq=" >> $HGRCPATH
$ hg init test-1719
$ cd test-1719
inserve
$ hg inserve -d --pid-file=../hg-test-1719.pid
$ cat ../hg-test-1719.pid >> "$DAEMON_PIDS"
$ echo content > file
$ hg add file
$ hg qnew -f test.patch
$ hg status
$ hg qpop
popping test.patch
patch queue now empty
st should not output anything
$ hg status
$ hg qpush
applying test.patch
now at: test.patch
st should not output anything
$ hg status
$ hg qrefresh
$ hg status
$ cd ..