# HG changeset patch # User Pierre-Yves David # Date 1357265768 -3600 # Node ID a58260bc101f32e958e421aba0ba87340def2a88 # Parent 834ef7e70d0f196fb20a6707a3361508db1f3cfb performance: speedup computation of extinct revisions In their current state, revset calls can be very costly, as we test predicates on the entire repository. This change drops revset calls 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: ! extinct ! wall 0.015124 After: ! extinct ! wall 0.009424 Performance test on a Mozilla central checkout: - 117293 total changesets, - 1 obsolete changeset, - 1 obsolescence marker. Before: ! extinct ! wall 0.032844 After: ! extinct ! wall 0.000066 diff -r 834ef7e70d0f -r a58260bc101f mercurial/obsolete.py --- a/mercurial/obsolete.py Fri Jan 04 03:15:44 2013 +0100 +++ b/mercurial/obsolete.py Fri Jan 04 03:16:08 2013 +0100 @@ -677,7 +677,7 @@ @cachefor('extinct') def _computeextinctset(repo): """the set of obsolete parents without non obsolete descendants""" - return set(repo.revs('obsolete() - obsolete()::unstable()')) + return getrevs(repo, 'obsolete') - getrevs(repo, 'suspended') @cachefor('bumped')