phases: sparsify phase lists
When the internal and archived phase was added, allphase became a large,
sparsely populated list. This dramatically increased the number of
lookup operations for public relations in `phasecache.phase`. As a first
step, define allphases and related lists explicitly to contain only the
actual phases. Make phasenames a dictionary and create corresponding
dictionaries for mapping phase names back to numbers. Adjust various
list to be sparse as well with the exception of phaseroots and phasesets
members of phasecache. Keep those as a separate step as it involves
changes to the C module.
Differential Revision: https://phab.mercurial-scm.org/D8697
# Copyright 2016-present Facebook. All Rights Reserved.
#
# error: errors used in fastannotate
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
from __future__ import absolute_import
class CorruptedFileError(Exception):
pass
class CannotReuseError(Exception):
"""cannot reuse or update the cache incrementally"""