##// END OF EJS Templates
obsolete: order of magnitude speedup in _computebumpedset...
Pierre-Yves David -
r20207:cd62532c default
parent child Browse files
Show More
@@ -84,6 +84,7 b' The header is followed by the markers. E'
84 """
84 """
85 import struct
85 import struct
86 import util, base85, node
86 import util, base85, node
87 import phases
87 from i18n import _
88 from i18n import _
88
89
89 _pack = struct.pack
90 _pack = struct.pack
@@ -786,14 +787,26 b' def _computeextinctset(repo):'
786 @cachefor('bumped')
787 @cachefor('bumped')
787 def _computebumpedset(repo):
788 def _computebumpedset(repo):
788 """the set of revs trying to obsolete public revisions"""
789 """the set of revs trying to obsolete public revisions"""
789 # get all possible bumped changesets
790 bumped = set()
790 tonode = repo.changelog.node
791 # utils function (avoid attribut lookup in the loop)
791 publicnodes = (tonode(r) for r in repo.revs('public()'))
792 phase = repo._phasecache.phase # would be faster to grab the full list
792 successors = allsuccessors(repo.obsstore, publicnodes,
793 public = phases.public
793 ignoreflags=bumpedfix)
794 cl = repo.changelog
794 # revision public or already obsolete don't count as bumped
795 torev = cl.nodemap.get
795 query = '%ld - obsolete() - public()'
796 obs = getrevs(repo, 'obsolete')
796 return set(repo.revs(query, _knownrevs(repo, successors)))
797 for rev in repo:
798 # We only evaluate mutable, non-obsolete revision
799 if (public < phase(repo, rev)) and (rev not in obs):
800 node = cl.node(rev)
801 # (future) A cache of precursors may worth if split is very common
802 for pnode in allprecursors(repo.obsstore, [node],
803 ignoreflags=bumpedfix):
804 prev = torev(pnode) # unfiltered! but so is phasecache
805 if (prev is not None) and (phase(repo, prev) <= public):
806 # we have a public precursors
807 bumped.add(rev)
808 break # Next draft!
809 return bumped
797
810
798 @cachefor('divergent')
811 @cachefor('divergent')
799 def _computedivergentset(repo):
812 def _computedivergentset(repo):
General Comments 0
You need to be logged in to leave comments. Login now