diff --git a/mercurial/debugcommands.py b/mercurial/debugcommands.py
--- a/mercurial/debugcommands.py
+++ b/mercurial/debugcommands.py
@@ -978,6 +978,7 @@
# make sure tests are repeatable
random.seed(int(opts[b'seed']))
+ data = {}
if opts.get(b'old'):
def doit(pushedrevs, remoteheads, remote=remote):
@@ -985,7 +986,7 @@
# enable in-client legacy support
remote = localrepo.locallegacypeer(remote.local())
common, _in, hds = treediscovery.findcommonincoming(
- repo, remote, force=True
+ repo, remote, force=True, audit=data
)
common = set(common)
if not opts.get(b'nonheads'):
@@ -1007,7 +1008,7 @@
revs = scmutil.revrange(repo, pushedrevs)
nodes = [repo[r].node() for r in revs]
common, any, hds = setdiscovery.findcommonheads(
- ui, repo, remote, ancestorsof=nodes
+ ui, repo, remote, ancestorsof=nodes, audit=data
)
return common, hds
@@ -1042,7 +1043,6 @@
common_initial_undecided = initial_undecided & common
missing_initial_undecided = initial_undecided & missing
- data = {}
data[b'elapsed'] = t.elapsed
data[b'nb-common-heads'] = len(heads_common)
data[b'nb-common-heads-local'] = len(heads_common_local)
@@ -1068,6 +1068,7 @@
# display discovery summary
ui.writenoi18n(b"elapsed time: %(elapsed)f seconds\n" % data)
+ ui.writenoi18n(b"round-trips: %(total-roundtrips)9d\n" % data)
ui.writenoi18n(b"heads summary:\n")
ui.writenoi18n(b" total common heads: %(nb-common-heads)9d\n" % data)
ui.writenoi18n(
diff --git a/mercurial/setdiscovery.py b/mercurial/setdiscovery.py
--- a/mercurial/setdiscovery.py
+++ b/mercurial/setdiscovery.py
@@ -291,9 +291,14 @@
abortwhenunrelated=True,
ancestorsof=None,
samplegrowth=1.05,
+ audit=None,
):
"""Return a tuple (common, anyincoming, remoteheads) used to identify
missing nodes from or in remote.
+
+ The audit argument is an optional dictionnary that a caller can pass. it
+ will be updated with extra data about the discovery, this is useful for
+ debug.
"""
start = util.timer()
@@ -379,6 +384,9 @@
srvheadhashes, yesno = fheads.result(), fknown.result()
+ if audit is not None:
+ audit[b'total-roundtrips'] = 1
+
if cl.tip() == nullid:
if srvheadhashes != [nullid]:
return [nullid], True, srvheadhashes
@@ -473,6 +481,9 @@
missing = set(result) - set(knownsrvheads)
ui.log(b'discovery', msg, len(result), len(missing), roundtrips, elapsed)
+ if audit is not None:
+ audit[b'total-roundtrips'] = roundtrips
+
if not result and srvheadhashes != [nullid]:
if abortwhenunrelated:
raise error.Abort(_(b"repository is unrelated"))
diff --git a/mercurial/treediscovery.py b/mercurial/treediscovery.py
--- a/mercurial/treediscovery.py
+++ b/mercurial/treediscovery.py
@@ -20,7 +20,7 @@
)
-def findcommonincoming(repo, remote, heads=None, force=False):
+def findcommonincoming(repo, remote, heads=None, force=False, audit=None):
"""Return a tuple (common, fetch, heads) used to identify the common
subset of nodes between repo and remote.
@@ -41,6 +41,9 @@
with remote.commandexecutor() as e:
heads = e.callcommand(b'heads', {}).result()
+ if audit is not None:
+ audit[b'total-roundtrips'] = 1
+
if repo.changelog.tip() == nullid:
base.add(nullid)
if heads != [nullid]:
@@ -181,5 +184,7 @@
progress.complete()
repo.ui.debug(b"%d total queries\n" % reqcnt)
+ if audit is not None:
+ audit[b'total-roundtrips'] = reqcnt
return base, list(fetch), heads
diff --git a/tests/test-setdiscovery.t b/tests/test-setdiscovery.t
--- a/tests/test-setdiscovery.t
+++ b/tests/test-setdiscovery.t
@@ -44,6 +44,7 @@
searching for changes
unpruned common: 01241442b3c2 66f7d451a68b b5714e113bc0
elapsed time: * seconds (glob)
+ round-trips: 2
heads summary:
total common heads: 2
also local heads: 2
@@ -75,6 +76,7 @@
searching for changes
all local changesets known remotely
elapsed time: * seconds (glob)
+ round-trips: 1
heads summary:
total common heads: 2
also local heads: 2
@@ -106,6 +108,7 @@
searching for changes
all local changesets known remotely
elapsed time: * seconds (glob)
+ round-trips: 1
heads summary:
total common heads: 1
also local heads: 1
@@ -136,6 +139,7 @@
searching for changes
unpruned common: 01241442b3c2 b5714e113bc0
elapsed time: * seconds (glob)
+ round-trips: 1
heads summary:
total common heads: 2
also local heads: 1
@@ -167,6 +171,7 @@
searching for changes
all remote heads known locally
elapsed time: * seconds (glob)
+ round-trips: 1
heads summary:
total common heads: 2
also local heads: 1
@@ -198,6 +203,7 @@
searching for changes
all remote heads known locally
elapsed time: * seconds (glob)
+ round-trips: 1
heads summary:
total common heads: 2
also local heads: 1
@@ -235,6 +241,7 @@
searching for changes
unpruned common: bebd167eb94d
elapsed time: * seconds (glob)
+ round-trips: 2
heads summary:
total common heads: 1
also local heads: 1
@@ -269,6 +276,7 @@
query 2; still undecided: 29, sample size is: 29
2 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 2
heads summary:
total common heads: 1
also local heads: 1
@@ -303,6 +311,7 @@
query 2; still undecided: 31, sample size is: 31
2 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 2
heads summary:
total common heads: 1
also local heads: 0
@@ -333,6 +342,7 @@
searching for changes
unpruned common: 66f7d451a68b bebd167eb94d
elapsed time: * seconds (glob)
+ round-trips: 4
heads summary:
total common heads: 1
also local heads: 0
@@ -367,6 +377,7 @@
query 2; still undecided: 2, sample size is: 2
2 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 2
heads summary:
total common heads: 1
also local heads: 0
@@ -401,6 +412,7 @@
query 2; still undecided: 2, sample size is: 2
2 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 2
heads summary:
total common heads: 1
also local heads: 0
@@ -437,6 +449,7 @@
searching for changes
unpruned common: 2dc09a01254d
elapsed time: * seconds (glob)
+ round-trips: 4
heads summary:
total common heads: 1
also local heads: 1
@@ -471,6 +484,7 @@
query 2; still undecided: 29, sample size is: 29
2 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 2
heads summary:
total common heads: 1
also local heads: 1
@@ -505,6 +519,7 @@
query 2; still undecided: 31, sample size is: 31
2 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 2
heads summary:
total common heads: 1
also local heads: 0
@@ -535,6 +550,7 @@
searching for changes
unpruned common: 2dc09a01254d 66f7d451a68b
elapsed time: * seconds (glob)
+ round-trips: 4
heads summary:
total common heads: 1
also local heads: 0
@@ -569,6 +585,7 @@
query 2; still undecided: 29, sample size is: 29
2 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 2
heads summary:
total common heads: 1
also local heads: 0
@@ -603,6 +620,7 @@
query 2; still undecided: 29, sample size is: 29
2 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 2
heads summary:
total common heads: 1
also local heads: 0
@@ -640,6 +658,7 @@
searching for changes
unpruned common: 66f7d451a68b
elapsed time: * seconds (glob)
+ round-trips: 4
heads summary:
total common heads: 1
also local heads: 0
@@ -674,6 +693,7 @@
query 2; still undecided: 31, sample size is: 31
2 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 2
heads summary:
total common heads: 1
also local heads: 0
@@ -708,6 +728,7 @@
query 2; still undecided: 31, sample size is: 31
2 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 2
heads summary:
total common heads: 1
also local heads: 0
@@ -738,6 +759,7 @@
searching for changes
unpruned common: 66f7d451a68b
elapsed time: * seconds (glob)
+ round-trips: 4
heads summary:
total common heads: 1
also local heads: 0
@@ -772,6 +794,7 @@
query 2; still undecided: 31, sample size is: 31
2 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 2
heads summary:
total common heads: 1
also local heads: 0
@@ -806,6 +829,7 @@
query 2; still undecided: 31, sample size is: 31
2 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 2
heads summary:
total common heads: 1
also local heads: 0
@@ -843,6 +867,7 @@
searching for changes
unpruned common: 66f7d451a68b
elapsed time: * seconds (glob)
+ round-trips: 4
heads summary:
total common heads: 1
also local heads: 0
@@ -877,6 +902,7 @@
query 2; still undecided: 51, sample size is: 51
2 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 2
heads summary:
total common heads: 1
also local heads: 0
@@ -911,6 +937,7 @@
query 2; still undecided: 51, sample size is: 51
2 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 2
heads summary:
total common heads: 1
also local heads: 0
@@ -941,6 +968,7 @@
searching for changes
unpruned common: 66f7d451a68b
elapsed time: * seconds (glob)
+ round-trips: 3
heads summary:
total common heads: 1
also local heads: 0
@@ -975,6 +1003,7 @@
query 2; still undecided: 31, sample size is: 31
2 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 2
heads summary:
total common heads: 1
also local heads: 0
@@ -1009,6 +1038,7 @@
query 2; still undecided: 31, sample size is: 31
2 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 2
heads summary:
total common heads: 1
also local heads: 0
@@ -1046,6 +1076,7 @@
searching for changes
unpruned common: 7ead0cba2838
elapsed time: * seconds (glob)
+ round-trips: 4
heads summary:
total common heads: 1
also local heads: 0
@@ -1083,6 +1114,7 @@
query 3; still undecided: 31, sample size is: 31
3 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 3
heads summary:
total common heads: 1
also local heads: 0
@@ -1120,6 +1152,7 @@
query 3; still undecided: 31, sample size is: 31
3 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 3
heads summary:
total common heads: 1
also local heads: 0
@@ -1150,6 +1183,7 @@
searching for changes
unpruned common: 7ead0cba2838
elapsed time: * seconds (glob)
+ round-trips: 3
heads summary:
total common heads: 1
also local heads: 0
@@ -1187,6 +1221,7 @@
query 3; still undecided: 15, sample size is: 15
3 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 3
heads summary:
total common heads: 1
also local heads: 0
@@ -1224,6 +1259,7 @@
query 3; still undecided: 15, sample size is: 15
3 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 3
heads summary:
total common heads: 1
also local heads: 0
@@ -1313,6 +1349,7 @@
query 6; still undecided: 63, sample size is: 63
6 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 6
heads summary:
total common heads: 1
also local heads: 0
@@ -1349,6 +1386,7 @@
query 3; still undecided: 3, sample size is: 3
3 total queries in *.????s (glob)
elapsed time: * seconds (glob)
+ round-trips: 3
heads summary:
total common heads: 1
also local heads: 0
@@ -1476,6 +1514,7 @@
comparing with $TESTTMP/ancestorsof/a
searching for changes
elapsed time: * seconds (glob)
+ round-trips: 1
heads summary:
total common heads: 1
also local heads: 1