mercurial/bookmarks.py
changeset 18984 efef056b1ae9
parent 18851 a60963c02f92
child 19110 741d94aa92e4
--- 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)