annotate mercurial/treediscovery.py @ 49017:f054a557aab8

discovery: also audit the number of queries done In addition to the number of roundtrip, we now also track the number of queries we perform, this is useful to assert the tradeoff between number of roundtrip and the number of queries. Differential Revision: https://phab.mercurial-scm.org/D12398
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 14 Mar 2022 05:59:20 +0100
parents 6000f5b25c9b
children d44e3c45f0e4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11313
0bb14798cd07 discovery: fix description line
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11301
diff changeset
1 # discovery.py - protocol changeset discovery functions
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
2 #
46819
d4ba4d51f85f contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents: 46110
diff changeset
3 # Copyright 2010 Olivia Mackall <olivia@selenic.com>
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
4 #
8225
46293a0c7e9f updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents: 8210
diff changeset
5 # This software may be used and distributed according to the terms of the
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 9954
diff changeset
6 # GNU General Public License version 2 or any later version.
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
7
25987
c6d049a5de43 treediscovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25113
diff changeset
8
25113
0ca8410ea345 util: drop alias for collections.deque
Martin von Zweigbergk <martinvonz@google.com>
parents: 20225
diff changeset
9 import collections
25987
c6d049a5de43 treediscovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25113
diff changeset
10
c6d049a5de43 treediscovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25113
diff changeset
11 from .i18n import _
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46819
diff changeset
12 from .node import short
25987
c6d049a5de43 treediscovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25113
diff changeset
13 from . import (
c6d049a5de43 treediscovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25113
diff changeset
14 error,
38783
e7aa113b14f7 global: use pycompat.xrange()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38400
diff changeset
15 pycompat,
25987
c6d049a5de43 treediscovery: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25113
diff changeset
16 )
8109
496ae1ea4698 switch lock releasing in the core from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 8108
diff changeset
17
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
18
46110
d90f439ff19f debugdiscovery: display the number of roundtrip used
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45942
diff changeset
19 def findcommonincoming(repo, remote, heads=None, force=False, audit=None):
14164
cb98fed52495 discovery: add new set-based discovery
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14073
diff changeset
20 """Return a tuple (common, fetch, heads) used to identify the common
14073
72c84f24b420 discovery: drop findoutgoing and simplify findcommonincoming's api
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 13742
diff changeset
21 subset of nodes between repo and remote.
2601
00fc88b0b256 move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2581
diff changeset
22
14073
72c84f24b420 discovery: drop findoutgoing and simplify findcommonincoming's api
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 13742
diff changeset
23 "common" is a list of (at least) the heads of the common subset.
14164
cb98fed52495 discovery: add new set-based discovery
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14073
diff changeset
24 "fetch" is a list of roots of the nodes that would be incoming, to be
cb98fed52495 discovery: add new set-based discovery
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14073
diff changeset
25 supplied to changegroupsubset.
14073
72c84f24b420 discovery: drop findoutgoing and simplify findcommonincoming's api
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 13742
diff changeset
26 "heads" is either the supplied heads, or else the remote's heads.
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
27 """
14073
72c84f24b420 discovery: drop findoutgoing and simplify findcommonincoming's api
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 13742
diff changeset
28
20225
d2704c48f417 discovery: stop using nodemap for membership testing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 16834
diff changeset
29 knownnode = repo.changelog.hasnode
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
30 search = []
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
31 fetch = set()
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
32 seen = set()
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
33 seenbranch = set()
12761
11c3c77da62a discovery: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12760
diff changeset
34 base = set()
5657
47915bf68c44 Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents: 5637
diff changeset
35
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
36 if not heads:
37634
0ed11f9368fd treediscovery: switch to command executor interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
37 with remote.commandexecutor() as e:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
38 heads = e.callcommand(b'heads', {}).result()
343
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 337
diff changeset
39
46110
d90f439ff19f debugdiscovery: display the number of roundtrip used
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45942
diff changeset
40 if audit is not None:
d90f439ff19f debugdiscovery: display the number of roundtrip used
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45942
diff changeset
41 audit[b'total-roundtrips'] = 1
49017
f054a557aab8 discovery: also audit the number of queries done
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48875
diff changeset
42 audit[b'total-queries'] = 0
46110
d90f439ff19f debugdiscovery: display the number of roundtrip used
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45942
diff changeset
43
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46819
diff changeset
44 if repo.changelog.tip() == repo.nullid:
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46819
diff changeset
45 base.add(repo.nullid)
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46819
diff changeset
46 if heads != [repo.nullid]:
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46819
diff changeset
47 return [repo.nullid], [repo.nullid], list(heads)
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46819
diff changeset
48 return [repo.nullid], [], heads
3826
b3b868113d24 fix encoding conversion of branch names when mq is loaded
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3803
diff changeset
49
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
50 # assume we're closer to the tip than the root
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
51 # and start by examining the heads
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
52 repo.ui.status(_(b"searching for changes\n"))
6121
7336aeff1a1d automatically update the branch cache when tip changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6120
diff changeset
53
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
54 unknown = []
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
55 for h in heads:
20225
d2704c48f417 discovery: stop using nodemap for membership testing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 16834
diff changeset
56 if not knownnode(h):
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
57 unknown.append(h)
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
58 else:
12761
11c3c77da62a discovery: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12760
diff changeset
59 base.add(h)
7654
816b708f23af store all heads of a branch in the branch cache
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 7644
diff changeset
60
14199
e3dd3dcd6059 treediscovery: fix regression when run against older repos (issue2793)
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14164
diff changeset
61 if not unknown:
e3dd3dcd6059 treediscovery: fix regression when run against older repos (issue2793)
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14164
diff changeset
62 return list(base), [], list(heads)
e3dd3dcd6059 treediscovery: fix regression when run against older repos (issue2793)
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14164
diff changeset
63
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
64 req = set(unknown)
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
65 reqcnt = 0
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
66 progress = repo.ui.makeprogress(_(b'searching'), unit=_(b'queries'))
3417
028fff46a4ac Add branchtags function with cache
Matt Mackall <mpm@selenic.com>
parents: 3377
diff changeset
67
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
68 # search through remote branches
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
69 # a 'branch' here is a linear segment of history, with four parts:
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
70 # head, root, first parent, second parent
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
71 # (a branch always has two parents (or none) by definition)
37634
0ed11f9368fd treediscovery: switch to command executor interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
72 with remote.commandexecutor() as e:
49017
f054a557aab8 discovery: also audit the number of queries done
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48875
diff changeset
73 if audit is not None:
f054a557aab8 discovery: also audit the number of queries done
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48875
diff changeset
74 audit[b'total-queries'] += len(unknown)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
75 branches = e.callcommand(b'branches', {b'nodes': unknown}).result()
37634
0ed11f9368fd treediscovery: switch to command executor interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
76
0ed11f9368fd treediscovery: switch to command executor interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
77 unknown = collections.deque(branches)
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
78 while unknown:
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
79 r = []
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
80 while unknown:
16803
107a3270a24a cleanup: use the deque type where appropriate
Bryan O'Sullivan <bryano@fb.com>
parents: 14698
diff changeset
81 n = unknown.popleft()
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
82 if n[0] in seen:
8954
e67e5b60e55f Branch heads should not include "heads" that are ancestors of other heads.
Brendan Cully <brendan@kublai.com>
parents: 8916
diff changeset
83 continue
1806
a2c69737e65e Automatic nesting into running transactions in the same repository.
mason@suse.com
parents: 1802
diff changeset
84
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
85 repo.ui.debug(b"examining %s:%s\n" % (short(n[0]), short(n[1])))
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46819
diff changeset
86 if n[0] == repo.nullid: # found the end of the branch
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
87 pass
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
88 elif n in seenbranch:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
89 repo.ui.debug(b"branch already found\n")
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
90 continue
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
91 elif n[1] and knownnode(n[1]): # do we know the base?
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
92 repo.ui.debug(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
93 b"found incomplete branch %s:%s\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
94 % (short(n[0]), short(n[1]))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
95 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
96 search.append(n[0:2]) # schedule branch range for scanning
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
97 seenbranch.add(n)
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4914
diff changeset
98 else:
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
99 if n[1] not in seen and n[1] not in fetch:
20225
d2704c48f417 discovery: stop using nodemap for membership testing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 16834
diff changeset
100 if knownnode(n[2]) and knownnode(n[3]):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
101 repo.ui.debug(b"found new changeset %s\n" % short(n[1]))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
102 fetch.add(n[1]) # earliest unknown
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
103 for p in n[2:4]:
20225
d2704c48f417 discovery: stop using nodemap for membership testing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 16834
diff changeset
104 if knownnode(p):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
105 base.add(p) # latest known
1531
2ba8bf7defda add localrepo.wlock for protecting the dirstate
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1516
diff changeset
106
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
107 for p in n[2:4]:
20225
d2704c48f417 discovery: stop using nodemap for membership testing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 16834
diff changeset
108 if p not in req and not knownnode(p):
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
109 r.append(p)
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
110 req.add(p)
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
111 seen.add(n[0])
1716
ef8cd889a78b Refactor excessive merge detection, add test
Matt Mackall <mpm@selenic.com>
parents: 1713
diff changeset
112
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
113 if r:
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
114 reqcnt += 1
38400
2f5c622fcb73 treediscovery: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents: 37634
diff changeset
115 progress.increment()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
116 repo.ui.debug(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
117 b"request %d: %s\n" % (reqcnt, b" ".join(map(short, r)))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
118 )
38783
e7aa113b14f7 global: use pycompat.xrange()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38400
diff changeset
119 for p in pycompat.xrange(0, len(r), 10):
37634
0ed11f9368fd treediscovery: switch to command executor interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
120 with remote.commandexecutor() as e:
49017
f054a557aab8 discovery: also audit the number of queries done
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48875
diff changeset
121 subset = r[p : p + 10]
f054a557aab8 discovery: also audit the number of queries done
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48875
diff changeset
122 if audit is not None:
f054a557aab8 discovery: also audit the number of queries done
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48875
diff changeset
123 audit[b'total-queries'] += len(subset)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
124 branches = e.callcommand(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43077
diff changeset
125 b'branches',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43077
diff changeset
126 {
49017
f054a557aab8 discovery: also audit the number of queries done
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48875
diff changeset
127 b'nodes': subset,
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43077
diff changeset
128 },
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
129 ).result()
37634
0ed11f9368fd treediscovery: switch to command executor interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
130
0ed11f9368fd treediscovery: switch to command executor interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
131 for b in branches:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
132 repo.ui.debug(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
133 b"received %s:%s\n" % (short(b[0]), short(b[1]))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
134 )
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
135 unknown.append(b)
8404
a2bc39ade36b commit: move 'nothing changed' test into commit()
Matt Mackall <mpm@selenic.com>
parents: 8403
diff changeset
136
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
137 # do binary search on the branches we found
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
138 while search:
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
139 newsearch = []
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
140 reqcnt += 1
38400
2f5c622fcb73 treediscovery: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents: 37634
diff changeset
141 progress.increment()
37634
0ed11f9368fd treediscovery: switch to command executor interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
142
0ed11f9368fd treediscovery: switch to command executor interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
143 with remote.commandexecutor() as e:
49017
f054a557aab8 discovery: also audit the number of queries done
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48875
diff changeset
144 if audit is not None:
f054a557aab8 discovery: also audit the number of queries done
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48875
diff changeset
145 audit[b'total-queries'] += len(search)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
146 between = e.callcommand(b'between', {b'pairs': search}).result()
37634
0ed11f9368fd treediscovery: switch to command executor interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
147
0ed11f9368fd treediscovery: switch to command executor interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
148 for n, l in zip(search, between):
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
149 l.append(n[1])
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
150 p = n[0]
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
151 f = 1
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
152 for i in l:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
153 repo.ui.debug(b"narrowing %d:%d %s\n" % (f, len(l), short(i)))
20225
d2704c48f417 discovery: stop using nodemap for membership testing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 16834
diff changeset
154 if knownnode(i):
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
155 if f <= 2:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
156 repo.ui.debug(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
157 b"found new branch changeset %s\n" % short(p)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
158 )
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
159 fetch.add(p)
12761
11c3c77da62a discovery: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12760
diff changeset
160 base.add(i)
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4914
diff changeset
161 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
162 repo.ui.debug(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
163 b"narrowed branch search to %s:%s\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
164 % (short(p), short(i))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
165 )
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
166 newsearch.append((p, i))
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
167 break
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
168 p, f = i, f * 2
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
169 search = newsearch
9150
09a1ee498756 localrepo: add destroyed() method for strip/rollback to use (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9149
diff changeset
170
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
171 # sanity check our fetch list
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
172 for f in fetch:
20225
d2704c48f417 discovery: stop using nodemap for membership testing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 16834
diff changeset
173 if knownnode(f):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
174 raise error.RepoError(_(b"already have changeset ") + short(f[:4]))
4912
312c845edef5 simplify dirstate fixups in repo.status()
Matt Mackall <mpm@selenic.com>
parents: 4910
diff changeset
175
12761
11c3c77da62a discovery: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12760
diff changeset
176 base = list(base)
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46819
diff changeset
177 if base == [repo.nullid]:
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
178 if force:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
179 repo.ui.warn(_(b"warning: repository is unrelated\n"))
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
180 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
181 raise error.Abort(_(b"repository is unrelated"))
4372
4ddc6d374265 localrepository.status: only acquire wlock if actually needed.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4335
diff changeset
182
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
183 repo.ui.debug(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
184 b"found new changesets starting at "
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
185 + b" ".join([short(f) for f in fetch])
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
186 + b"\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38783
diff changeset
187 )
2661
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2621
diff changeset
188
38400
2f5c622fcb73 treediscovery: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents: 37634
diff changeset
189 progress.complete()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
190 repo.ui.debug(b"%d total queries\n" % reqcnt)
46110
d90f439ff19f debugdiscovery: display the number of roundtrip used
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45942
diff changeset
191 if audit is not None:
d90f439ff19f debugdiscovery: display the number of roundtrip used
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45942
diff changeset
192 audit[b'total-roundtrips'] = reqcnt
11301
3d0591a66118 move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11230
diff changeset
193
12761
11c3c77da62a discovery: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12760
diff changeset
194 return base, list(fetch), heads