phases: sparsify phaseroots and phasesets
As final step of dealing with the holes in the phase numbers, make
phaseroots and phasesets both dictionaries indexed by the phase number.
Further adjust the interface of the C module by pushing the node to
revision mapping down as it is cheaper on the C side to deal with
revision numbers.
Overall, the patch series improves a no-change "hg up" for my NetBSD test
repository from 4.7s to 1.3s.
Differential Revision: https://phab.mercurial-scm.org/D8698
$ cat >> $HGRCPATH << EOF
> [extensions]
> absorb=
> EOF
Abort absorb if there is an unfinished operation.
$ hg init abortunresolved
$ cd abortunresolved
$ echo "foo1" > foo.whole
$ hg commit -Aqm "foo 1"
$ hg update null
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo "foo2" > foo.whole
$ hg commit -Aqm "foo 2"
$ hg --config extensions.rebase= rebase -r 1 -d 0
rebasing 1:c3b6dc0e177a "foo 2" (tip)
merging foo.whole
warning: conflicts while merging foo.whole! (edit, then use 'hg resolve --mark')
unresolved conflicts (see hg resolve, then hg rebase --continue)
[1]
$ hg --config extensions.rebase= absorb
abort: rebase in progress
(use 'hg rebase --continue' or 'hg rebase --abort')
[255]