The issue came from the 63f9ab8034d1 fix for issue586 working only for
manifest.add() fast path, where the incorrect removed file set was
ignored. This path was no longer taken after 5958346d119e refactoring.
Due to the fix to the pull race, to avoid sending unnecessary
changesets, use changegroupsubset if possible.
This will increase the load on the server.
This enables for example "hg clone --config format.usefncache=0" which
creates a non-fncache repository, which then can be read by Mercurial
versions before 74698d160f52.
changegroup() has a problem when nodes which does not descend from a node
in <bases> are added to remote after the discovery phase.
If that happens, changegroup() won't send the correct set of nodes, ie.
some nodes will be missing.
To correct it we have to find the set of nodes that both remote and self
have (called <common>), and send all the nodes not in <common>.
This fix has some overhead, in the worst case it will re-send a whole branch.
A proper fix to avoid this overhead might be to change the protocol so that
the <common> nodes are sent (instead of the <bases> of the missing nodes).
* adds a new entry 'fncache' to '.hg/requires' for new repos
* writes new file '.hg/store/fncache'
* hash-encodes filenames with long paths (issue839)
* encodes Windows reserved filenames (issue793)
Allow status() to take contexts as well as nodes. This lets us avoid
unpacking manifests multiple times and intelligently unpack manifests
in revision order. Also, we can avoid unpacking manifests at all when
there are no changes in the working directory.
If we copy a file followed by an update, it's possible for the parent
manifest to no longer contain the source file of the copy, which could cause
commit to fail. If this happens, we search backwares from the first
parent to find the most likely original revision.
This makes editors like Emacs wrap the commit message correctly. With
no empty line between the commit message and the 'HG:' lines, the
'HG:' lines would be wrapped as if they belonged to the commit message
and so lose their significance to Mercurial.
This makes no difference to what is stored by the commit -- whitespace
was already stripped from the beginning and end of commit messages.
- rename lookup to cmp for formatting reasons
- reduce nesting level of fixup code
- sort fixup results
- group comparison cases in a separate clause
- make list initialization simpler
- delay flag lookup for working directory
- sort removed list in comparison
- avoid sorting already sorted lists