mirror of
https://github.com/facebook/sapling.git
synced 2024-10-06 23:07:18 +03:00
discovery: stop using nodemap for membership testing
Nodemap is not aware of filtering so we need to ask the changelog itself if a node is known. This is probably a bit slower but such check does not dominated discovery time. This is necessary if we want to run discovery on filtered repo.
This commit is contained in:
parent
5cf610755f
commit
df72d3d98f
@ -34,9 +34,9 @@ def findcommonincoming(repo, remote, heads=None, force=False):
|
||||
|
||||
if heads:
|
||||
allknown = True
|
||||
nm = repo.changelog.nodemap
|
||||
knownnode = repo.changelog.hasnode # no nodemap until it is filtered
|
||||
for h in heads:
|
||||
if nm.get(h) is None:
|
||||
if not knownnode(h):
|
||||
allknown = False
|
||||
break
|
||||
if allknown:
|
||||
@ -172,8 +172,9 @@ def _headssummary(repo, remote, outgoing):
|
||||
remotebranches.add(branch)
|
||||
known = []
|
||||
unsynced = []
|
||||
knownnode = cl.hasnode # do not use nodemap until it is filtered
|
||||
for h in heads:
|
||||
if h in cl.nodemap:
|
||||
if knownnode(h):
|
||||
known.append(h)
|
||||
else:
|
||||
unsynced.append(h)
|
||||
@ -204,11 +205,11 @@ def _headssummary(repo, remote, outgoing):
|
||||
def _oldheadssummary(repo, remoteheads, outgoing, inc=False):
|
||||
"""Compute branchmapsummary for repo without branchmap support"""
|
||||
|
||||
cl = repo.changelog
|
||||
# 1-4b. old servers: Check for new topological heads.
|
||||
# Construct {old,new}map with branch = None (topological branch).
|
||||
# (code based on update)
|
||||
oldheads = set(h for h in remoteheads if h in cl.nodemap)
|
||||
knownnode = repo.changelog.hasnode # no nodemap until it is filtered
|
||||
oldheads = set(h for h in remoteheads if knownnode(h))
|
||||
# all nodes in outgoing.missing are children of either:
|
||||
# - an element of oldheads
|
||||
# - another element of outgoing.missing
|
||||
|
@ -19,7 +19,7 @@ def findcommonincoming(repo, remote, heads=None, force=False):
|
||||
"heads" is either the supplied heads, or else the remote's heads.
|
||||
"""
|
||||
|
||||
m = repo.changelog.nodemap
|
||||
knownnode = repo.changelog.hasnode
|
||||
search = []
|
||||
fetch = set()
|
||||
seen = set()
|
||||
@ -41,7 +41,7 @@ def findcommonincoming(repo, remote, heads=None, force=False):
|
||||
|
||||
unknown = []
|
||||
for h in heads:
|
||||
if h not in m:
|
||||
if not knownnode(h):
|
||||
unknown.append(h)
|
||||
else:
|
||||
base.add(h)
|
||||
@ -71,23 +71,23 @@ def findcommonincoming(repo, remote, heads=None, force=False):
|
||||
elif n in seenbranch:
|
||||
repo.ui.debug("branch already found\n")
|
||||
continue
|
||||
elif n[1] and n[1] in m: # do we know the base?
|
||||
elif n[1] and knownnode(n[1]): # do we know the base?
|
||||
repo.ui.debug("found incomplete branch %s:%s\n"
|
||||
% (short(n[0]), short(n[1])))
|
||||
search.append(n[0:2]) # schedule branch range for scanning
|
||||
seenbranch.add(n)
|
||||
else:
|
||||
if n[1] not in seen and n[1] not in fetch:
|
||||
if n[2] in m and n[3] in m:
|
||||
if knownnode(n[2]) and knownnode(n[3]):
|
||||
repo.ui.debug("found new changeset %s\n" %
|
||||
short(n[1]))
|
||||
fetch.add(n[1]) # earliest unknown
|
||||
for p in n[2:4]:
|
||||
if p in m:
|
||||
if knownnode(p):
|
||||
base.add(p) # latest known
|
||||
|
||||
for p in n[2:4]:
|
||||
if p not in req and p not in m:
|
||||
if p not in req and not knownnode(p):
|
||||
r.append(p)
|
||||
req.add(p)
|
||||
seen.add(n[0])
|
||||
@ -114,7 +114,7 @@ def findcommonincoming(repo, remote, heads=None, force=False):
|
||||
f = 1
|
||||
for i in l:
|
||||
repo.ui.debug("narrowing %d:%d %s\n" % (f, len(l), short(i)))
|
||||
if i in m:
|
||||
if knownnode(i):
|
||||
if f <= 2:
|
||||
repo.ui.debug("found new branch changeset %s\n" %
|
||||
short(p))
|
||||
@ -130,7 +130,7 @@ def findcommonincoming(repo, remote, heads=None, force=False):
|
||||
|
||||
# sanity check our fetch list
|
||||
for f in fetch:
|
||||
if f in m:
|
||||
if knownnode(f):
|
||||
raise error.RepoError(_("already have changeset ")
|
||||
+ short(f[:4]))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user