HomePhabricator

transactions: convert changes['phases'] to list of ranges

Authored by joerg.sonnenberger.

Description

transactions: convert changes['phases'] to list of ranges

Consecutive revisions are often in the same phase, especially public
revisions. This means that a dictionary keyed by the revision for the
phase transitions is highly redundant. Build a list of (range, (old,
new)) entries instead and aggressively merge ranges with the same
transition. For the test case in issue5691, this reduces memory use by
~20MB.

Differential Revision: https://phab.mercurial-scm.org/D8125