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.
Test null revisions (node 0000000000000000000000000000000000000000, aka rev -1)
in various circumstances.
Make an empty repo:
$ hg init a
$ cd a
$ hg files -r 0000000000000000000000000000000000000000
[1]
$ hg files -r .
[1]
Add an empty commit (this makes the changelog refer to a null manifest node):
$ hg commit -m "init" --config ui.allowemptycommit=true
$ hg files -r .
[1]
Strip that empty commit (this makes the changelog file empty, as opposed to missing):
$ hg --config 'extensions.strip=' strip . > /dev/null
$ hg files -r .
[1]