784 |
785 |
785 |
786 |
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): |
800 """the set of rev that compete to be the final successors of some revision. |
813 """the set of rev that compete to be the final successors of some revision. |
801 """ |
814 """ |