Mercurial > public > mercurial-scm > hg
comparison mercurial/changelog.py @ 35308:137a08d82232
transaction: build changes['revs'] as range instead of a set
Revisions are added consecutively, so a range can easily represent them
in the changes list. This saves around 45 Bytes / revision on 64bit
platforms and reduces the memory footprint of issue5691 by 15MB.
Don't copy changes['revs'] in getobsoleted. Ranges have a very efficient
contains implementation already.
Differential Revision: https://phab.mercurial-scm.org/D1615
author | Joerg Sonnenberger <joerg@bec.de> |
---|---|
date | Fri, 08 Dec 2017 01:23:34 +0100 |
parents | 50474f0b3f1b |
children | 8810f0643fa1 |
comparison
equal
deleted
inserted
replaced
35307:4caafe280488 | 35308:137a08d82232 |
---|---|
539 rev = len(self) | 539 rev = len(self) |
540 node = super(changelog, self)._addrevision(node, rawtext, transaction, | 540 node = super(changelog, self)._addrevision(node, rawtext, transaction, |
541 *args, **kwargs) | 541 *args, **kwargs) |
542 revs = transaction.changes.get('revs') | 542 revs = transaction.changes.get('revs') |
543 if revs is not None: | 543 if revs is not None: |
544 revs.add(rev) | 544 if revs: |
545 assert revs[-1] + 1 == rev | |
546 revs = xrange(revs[0], rev + 1) | |
547 else: | |
548 revs = xrange(rev, rev + 1) | |
549 transaction.changes['revs'] = revs | |
545 return node | 550 return node |