diff mercurial/bookmarks.py @ 18984:efef056b1ae9

obsolete: extract foreground computation from bookmark.validdest This foreground logic will be reused by update logic.
author Pierre-Yves David <pierre-yves.david@logilab.fr>
date Tue, 16 Apr 2013 15:16:33 +0200
parents a60963c02f92
children 741d94aa92e4
line wrap: on
line diff
--- a/mercurial/bookmarks.py	Mon Apr 15 17:10:58 2013 +0200
+++ b/mercurial/bookmarks.py	Tue Apr 16 15:16:33 2013 +0200
@@ -292,19 +292,7 @@
         # (new != nullrev has been excluded by the previous check)
         return True
     elif repo.obsstore:
-        # We only need this complicated logic if there is obsolescence
-        # XXX will probably deserve an optimised revset.
-        nm = repo.changelog.nodemap
-        validdests = set([old])
-        plen = -1
-        # compute the whole set of successors or descendants
-        while len(validdests) != plen:
-            plen = len(validdests)
-            succs = set(c.node() for c in validdests)
-            mutable = [c.node() for c in validdests if c.mutable()]
-            succs.update(obsolete.allsuccessors(repo.obsstore, mutable))
-            known = (n for n in succs if n in nm)
-            validdests = set(repo.set('%ln::', known))
-        return new in validdests
+        return new.node() in obsolete.foreground(repo, [old.node()])
     else:
+        # still an independant clause as it is lazyer (and therefore faster)
         return old.descendant(new)