diff --git a/mercurial/configitems.py b/mercurial/configitems.py --- a/mercurial/configitems.py +++ b/mercurial/configitems.py @@ -737,6 +737,14 @@ b'discovery.grow-sample', default=True, ) +# When discovery.grow-sample.dynamic is True, the default, the sample size is +# adapted to the shape of the undecided set (it is set to the max of: +# , len(roots(undecided)), len(heads(undecided) +coreconfigitem( + b'devel', + b'discovery.grow-sample.dynamic', + default=True, +) # discovery.grow-sample.rate control the rate at which the sample grow coreconfigitem( b'devel', diff --git a/mercurial/debugcommands.py b/mercurial/debugcommands.py --- a/mercurial/debugcommands.py +++ b/mercurial/debugcommands.py @@ -1024,6 +1024,12 @@ If False, the sample size used in set discovery will not be increased through the process + * devel.discovery.grow-sample.dynamic=True + + When discovery.grow-sample.dynamic is True, the default, the sample size is + adapted to the shape of the undecided set (it is set to the max of: + , len(roots(undecided)), len(heads(undecided) + * devel.discovery.grow-sample.rate=1.05 the rate at which the sample grow diff --git a/mercurial/setdiscovery.py b/mercurial/setdiscovery.py --- a/mercurial/setdiscovery.py +++ b/mercurial/setdiscovery.py @@ -429,12 +429,16 @@ # full blown discovery # if the server has a limit to its arguments size, we can't grow the sample. - grow_sample = local.ui.configbool(b'devel', b'discovery.grow-sample') + configbool = local.ui.configbool + grow_sample = configbool(b'devel', b'discovery.grow-sample') grow_sample = grow_sample and not remote.limitedarguments + dynamic_sample = configbool(b'devel', b'discovery.grow-sample.dynamic') + hard_limit_sample = not (dynamic_sample or remote.limitedarguments) + randomize = ui.configbool(b'devel', b'discovery.randomize') disco = partialdiscovery( - local, ownheads, not grow_sample, randomize=randomize + local, ownheads, hard_limit_sample, randomize=randomize ) if initial_head_exchange: # treat remote heads (and maybe own heads) as a first implicit sample