# HG changeset patch # User FUJIWARA Katsunori # Date 1347971952 -32400 # Node ID 3a524b6478970371a8412427e1181044d4770f24 # Parent b83c18204c36f4ab83b50be848f6c60db68198f0 context: add "descendant()" to changectx for efficient descendant examination This patch adds "descendant()", which uses "revlog.descendant()" for descendant examination, to changectx. This implementation is more efficient than "new in old.descendants()" expression, because: - "changectx.descendants()" creates temporary "changectx" objects, but "revlog.descendant()" doesn't "revlog.descendant()" checks only revision numbers of descendants. - "revlog.descendant()" stops scanning, when scanning of all revisions less than one of examination target is finished this can avoid useless scanning in "not descendant" case. diff -r b83c18204c36 -r 3a524b647897 mercurial/context.py --- a/mercurial/context.py Tue Sep 18 21:39:12 2012 +0900 +++ b/mercurial/context.py Tue Sep 18 21:39:12 2012 +0900 @@ -288,6 +288,10 @@ n = self._repo.changelog.ancestor(self._node, n2) return changectx(self._repo, n) + def descendant(self, other): + """True if other is descendant of this changeset""" + return self._repo.changelog.descendant(self._rev, other._rev) + def walk(self, match): fset = set(match.files()) # for dirstate.walk, files=['.'] means "walk the whole tree".