# HG changeset patch # User Pierre-Yves David # Date 1384576123 18000 # Node ID d2704c48f4176d8cd6f21d33500820d44763585c # Parent 34d4a037dcede355c97a49c283da7d8db990d9bb 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. diff -r 34d4a037dced -r d2704c48f417 mercurial/discovery.py --- a/mercurial/discovery.py Fri Nov 15 23:27:39 2013 -0500 +++ b/mercurial/discovery.py Fri Nov 15 23:28:43 2013 -0500 @@ -34,9 +34,9 @@ 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 @@ 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 _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 diff -r 34d4a037dced -r d2704c48f417 mercurial/treediscovery.py --- a/mercurial/treediscovery.py Fri Nov 15 23:27:39 2013 -0500 +++ b/mercurial/treediscovery.py Fri Nov 15 23:28:43 2013 -0500 @@ -19,7 +19,7 @@ "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 @@ 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 @@ 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 @@ 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 @@ # 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]))