tests/test-empty-manifest-index.t
author Arseniy Alekseyev <aalekseyev@janestreet.com>
Mon, 15 Apr 2024 16:33:37 +0100
branchstable
changeset 51571 74230abb2504
parent 48199 9d0e5629cfbf
permissions -rw-r--r--
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]