Mercurial > hg-stable
changeset 18276:834ef7e70d0f
performance: speedup computation of suspended revisions
In their current state, revset calls can be very costly, as we test
predicates on the entire repository.
This change drops a revset call in favor of direct testing of the
phase of changesets.
Performance test on my Mercurial checkout
- 19857 total changesets,
- 1584 obsolete changesets,
- 13310 obsolescence markers.
Before:
! suspended
! wall 0.014319
After:
! suspended
! wall 0.009559
Performance test on a Mozilla central checkout:
- 117293 total changesets,
- 1 obsolete changeset,
- 1 obsolescence marker.
Before:
! suspended
! wall 0.033373
After:
! suspended
! wall 0.000053
author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
---|---|
date | Fri, 04 Jan 2013 03:15:44 +0100 |
parents | 9818f22785b7 |
children | a58260bc101f |
files | mercurial/obsolete.py |
diffstat | 1 files changed, 2 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/obsolete.py Fri Jan 04 03:15:21 2013 +0100 +++ b/mercurial/obsolete.py Fri Jan 04 03:15:44 2013 +0100 @@ -671,7 +671,8 @@ @cachefor('suspended') def _computesuspendedset(repo): """the set of obsolete parents with non obsolete descendants""" - return set(repo.revs('obsolete() and obsolete()::unstable()')) + suspended = repo.changelog.ancestors(getrevs(repo, 'unstable')) + return set(r for r in getrevs(repo, 'obsolete') if r in suspended) @cachefor('extinct') def _computeextinctset(repo):