Comments
Patch
@@ -19,6 +19,7 @@
from mercurial.node import nullrev
import util
+import revset
import heapq
@@ -233,8 +234,6 @@
if not revs:
return
- cl = repo.changelog
- lowestrev = revs.min()
gpcache = {}
if repo.ui.configbool('experimental', 'graph-group-branches', False):
@@ -256,7 +255,8 @@
for mpar in mpars:
gp = gpcache.get(mpar)
if gp is None:
- gp = gpcache[mpar] = grandparent(cl, lowestrev, revs, mpar)
+ gp = gpcache[mpar] = revset.revsbetween(repo, revs, [mpar],
+ includepath=False)
if not gp:
parents.append(mpar)
else:
@@ -354,24 +354,6 @@
yield (cur, type, data, (col, color), edges)
seen = next
-def grandparent(cl, lowestrev, roots, head):
- """Return all ancestors of head in roots which revision is
- greater or equal to lowestrev.
- """
- pending = set([head])
- seen = set()
- kept = set()
- llowestrev = max(nullrev, lowestrev)
- while pending:
- r = pending.pop()
- if r >= llowestrev and r not in seen:
- if r in roots:
- kept.add(r)
- else:
- pending.update([p for p in cl.parentrevs(r)])
- seen.add(r)
- return sorted(kept)
-
def asciiedges(type, char, lines, seen, rev, parents):
"""adds edge info to changelog DAG walk suitable for ascii()"""
if rev not in seen: