# HG changeset patch # User Boris Feld # Date 1539123662 -7200 # Node ID 968dd7e02ac5ed059b1dba6e883538b835dd38c5 # Parent 6a917075535aa9648a8aecb951d08e51c9159b4b changegroup: allow to force delta to be against p1 This new developer option is useful to general more "generic" bundle. Without this option, a bundle generated from the repository use deltas similar to the one stored in the specific repository it was generated from. This makes performance testing a bit tricky. Using deltas similar to the final result means all delta stored in the bundle can be applied to the target repository without any further processing (except for the rare case of a full snapshot). The application of such bundles (almost) never exercises the (slower) path of searching for a new valid delta. This result in unrealistic and too favorable timing and profile. Instead, we introduce an option to make sure all revisions are stored as a delta against p1. It might not be the best generation option, but it guarantees that the content will be "generic", not favoring a specific target. diff -r 6a917075535a -r 968dd7e02ac5 mercurial/changegroup.py --- a/mercurial/changegroup.py Tue Oct 09 23:26:35 2018 +0200 +++ b/mercurial/changegroup.py Wed Oct 10 00:21:02 2018 +0200 @@ -697,9 +697,16 @@ progress = repo.ui.makeprogress(topic, unit=_('chunks'), total=len(nodes)) + configtarget = repo.ui.config('devel', 'bundle.delta') + if configtarget not in ('', 'p1'): + msg = _("""config "devel.bundle.delta" as unknown value: %s""") + repo.ui.warn(msg % configtarget) + deltamode = repository.CG_DELTAMODE_STD if forcedeltaparentprev: deltamode = repository.CG_DELTAMODE_PREV + elif configtarget == 'p1': + deltamode = repository.CG_DELTAMODE_P1 revisions = store.emitrevisions( nodes, diff -r 6a917075535a -r 968dd7e02ac5 mercurial/configitems.py --- a/mercurial/configitems.py Tue Oct 09 23:26:35 2018 +0200 +++ b/mercurial/configitems.py Wed Oct 10 00:21:02 2018 +0200 @@ -329,6 +329,9 @@ coreconfigitem('devel', 'bundle2.debug', default=False, ) +coreconfigitem('devel', 'bundle.delta', + default='', +) coreconfigitem('devel', 'cache-vfs', default=None, ) diff -r 6a917075535a -r 968dd7e02ac5 mercurial/repository.py --- a/mercurial/repository.py Tue Oct 09 23:26:35 2018 +0200 +++ b/mercurial/repository.py Wed Oct 10 00:21:02 2018 +0200 @@ -42,6 +42,7 @@ CG_DELTAMODE_STD = b'default' CG_DELTAMODE_PREV = b'previous' CG_DELTAMODE_FULL = b'fulltext' +CG_DELTAMODE_P1 = b'p1' class ipeerconnection(interfaceutil.Interface): """Represents a "connection" to a repository. diff -r 6a917075535a -r 968dd7e02ac5 mercurial/utils/storageutil.py --- a/mercurial/utils/storageutil.py Tue Oct 09 23:26:35 2018 +0200 +++ b/mercurial/utils/storageutil.py Wed Oct 10 00:21:02 2018 +0200 @@ -373,6 +373,9 @@ # We're instructed to send fulltext. Honor that. elif deltamode == repository.CG_DELTAMODE_FULL: baserev = nullrev + # We're instructed to use p1. Honor that + elif deltamode == repository.CG_DELTAMODE_P1: + baserev = p1rev # There is a delta in storage. We try to use that because it # amounts to effectively copying data from storage and is diff -r 6a917075535a -r 968dd7e02ac5 tests/test-bundle.t --- a/tests/test-bundle.t Tue Oct 09 23:26:35 2018 +0200 +++ b/tests/test-bundle.t Wed Oct 10 00:21:02 2018 +0200 @@ -900,3 +900,8 @@ $ hg update -R ../update2bundled.hg -r 0 0 files updated, 0 files merged, 2 files removed, 0 files unresolved #endif + +Test the option that create slim bundle + + $ hg bundle -a --config devel.bundle.delta=p1 ./slim.hg + 3 changesets found