[PATCH 8 of 8 v2] ancestor: remove unused genericancestor
Mads Kiilerich
mads at kiilerich.com
Tue Feb 25 13:40:30 CST 2014
# HG changeset patch
# User Mads Kiilerich <madski at unity3d.com>
# Date 1393356769 -3600
# Tue Feb 25 20:32:49 2014 +0100
# Node ID 6ebe9a3da30dc0a969cc9fdc45a811ffa738884b
# Parent 22f35a8f551d88fb95dec2e19a3358420b99f5c7
ancestor: remove unused genericancestor
diff --git a/mercurial/ancestor.py b/mercurial/ancestor.py
--- a/mercurial/ancestor.py
+++ b/mercurial/ancestor.py
@@ -129,89 +129,6 @@ def ancestors(pfunc, *orignodes):
return gca
return deepest(gca)
-def genericancestor(a, b, pfunc):
- """
- Returns the common ancestor of a and b that is furthest from a
- root (as measured by longest path) or None if no ancestor is
- found. If there are multiple common ancestors at the same
- distance, the first one found is returned.
-
- pfunc must return a list of parent vertices for a given vertex
- """
-
- if a == b:
- return a
-
- a, b = sorted([a, b])
-
- # find depth from root of all ancestors
- # depth is stored as a negative for heapq
- parentcache = {}
- visit = [a, b]
- depth = {}
- while visit:
- vertex = visit[-1]
- pl = [p for p in pfunc(vertex) if p != nullrev]
- parentcache[vertex] = pl
- if not pl:
- depth[vertex] = 0
- visit.pop()
- else:
- for p in pl:
- if p == a or p == b: # did we find a or b as a parent?
- return p # we're done
- if p not in depth:
- visit.append(p)
- if visit[-1] == vertex:
- # -(maximum distance of parents + 1)
- depth[vertex] = min([depth[p] for p in pl]) - 1
- visit.pop()
-
- # traverse ancestors in order of decreasing distance from root
- def ancestors(vertex):
- h = [(depth[vertex], vertex)]
- seen = set()
- while h:
- d, n = heapq.heappop(h)
- if n not in seen:
- seen.add(n)
- yield (d, n)
- for p in parentcache[n]:
- heapq.heappush(h, (depth[p], p))
-
- def generations(vertex):
- sg, s = None, set()
- for g, v in ancestors(vertex):
- if g != sg:
- if sg:
- yield sg, s
- sg, s = g, set((v,))
- else:
- s.add(v)
- yield sg, s
-
- x = generations(a)
- y = generations(b)
- gx = x.next()
- gy = y.next()
-
- # increment each ancestor list until it is closer to root than
- # the other, or they match
- try:
- while True:
- if gx[0] == gy[0]:
- for v in gx[1]:
- if v in gy[1]:
- return v
- gy = y.next()
- gx = x.next()
- elif gx[0] > gy[0]:
- gy = y.next()
- else:
- gx = x.next()
- except StopIteration:
- return None
-
def missingancestors(revs, bases, pfunc):
"""Return all the ancestors of revs that are not ancestors of bases.
More information about the Mercurial-devel
mailing list