match: strengthen visit_children_set invariant, Recursive means "all files"
My previous interpretation of "Recursive" was too relaxed: I thought it
instructed the caller to do something like this:
> you can stop calling `visit_children_set` because you'll need to descend into
> every directory recursively, but you should still check every file if it
> matches or not
Whereas the real instruction seems to be:
> I guarantee that everything in this subtree matches, you can stop
> querying the matcher for all files and dirs altogether.
The evidence to support this:
- the test actually passes with the stronger invariant, revealing no
exceptions from this rule
- the implementation of `visit_children_set` for `DifferenceMatcher`
clearly relies on this requirement, so it must hold for that not to
lead to bugs.
#require test-repo slow docker
$ . "$TESTDIR/helpers-testrepo.sh"
$ testrepohgenv
Ensure debuild doesn't run the testsuite, as that could get silly.
$ DEB_BUILD_OPTIONS=nocheck
$ export DEB_BUILD_OPTIONS
$ OUTPUTDIR=`pwd`
$ export OUTPUTDIR
$ cd "$TESTDIR"/..
$ make docker-debian-buster > $OUTPUTDIR/build.log 2>&1
$ cd $OUTPUTDIR
$ ls *.deb
mercurial-common_*.deb (glob)
mercurial_*.deb (glob)
We check debian package contents with portable tools so that when
we're on non-debian machines we can still test the packages that are
built using docker.
main deb should have .so but no .py
$ ar x mercurial_*.deb
$ tar tf data.tar* | grep -E '(localrepo|parsers)'
./usr/lib/python2.7/dist-packages/mercurial/parsers*.so (glob)
mercurial-common should have .py but no .so or .pyc
$ ar x mercurial-common_*.deb
$ tar tf data.tar* | grep -E '(localrepo|parsers)'
./usr/lib/python2.7/dist-packages/mercurial/pure/parsers.py
./usr/lib/python2.7/dist-packages/mercurial/localrepo.py