subrepo: implement "storeclean" method for mercurial subrepos
The mercurial subrepo "storeclean" method works by calculating a "store hash" of
the repository state and comparing it to a cached store hash. The store hash is
always cached when the repository is cloned from or pushed to a remote
repository, but also on pull as long as the repository already had a clean
store. If the hashes match the store is "clean" versus the selected repository.
Note that this method is currenty unused, but it will be used by a later patch.
The store hash is calculated by hashing several key repository files, such as
the bookmarks file the phaseroots file and the changelog. Note that the hash
comparison is done file by file so that we can exit early if a pair of hashes
do not match. Also the hashes are calculated starting with the file that is
most likely to be smaller upto the file that is more likely to be larger.
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 ..