[PATCH 2 of 7 V3] obsolete: add the detection of bumped changeset
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Tue Oct 16 15:48:06 CDT 2012
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at logilab.fr>
# Date 1350419877 -7200
# Node ID 8192b7575461b04cd4797d59315a231f426aea77
# Parent cf9539941c46582f731f82c8642539e9584bcf40
obsolete: add the detection of bumped changeset.
Bumped changeset are non-public changeset that tries to succeed to a public()
changeset.
diff --git a/mercurial/obsolete.py b/mercurial/obsolete.py
--- a/mercurial/obsolete.py
+++ b/mercurial/obsolete.py
@@ -366,6 +366,16 @@
seen.add(suc)
remaining.add(suc)
+def _knownrevs(repo, nodes):
+ """yield revision number of known nodes passed in parameters
+
+ Unknown revision are silently ignore."""
+ torev = repo.changelog.nodemap.get
+ for n in nodes:
+ rev = torev(n)
+ if rev is not None:
+ yield rev
+
# mapping of 'set-name' -> <function to computer this set>
cachefuncs = {}
def cachefor(name):
@@ -430,6 +440,18 @@
"""the set of obsolete parents without non obsolete descendants"""
return set(repo.revs('obsolete() - obsolete()::unstable()'))
+
+ at cachefor('bumped')
+def _computebumpedset(repo):
+ """the set of rev trying to obsolete public revision"""
+ # get all possible bumped changesets
+ tonode = repo.changelog.node
+ publicnodes = (tonode(r) for r in repo.revs('public()'))
+ successors = anysuccessors(repo.obsstore, publicnodes)
+ # revision public or already obsolete don't count as bumped
+ query = '%ld - obsolete() - public()'
+ return set(repo.revs(query, _knownrevs(repo, successors)))
+
def createmarkers(repo, relations, flag=0, metadata=None):
"""Add obsolete markers between changesets in a repo
More information about the Mercurial-devel
mailing list