diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py --- a/mercurial/bundle2.py +++ b/mercurial/bundle2.py @@ -1348,7 +1348,10 @@ def writenewbundle(ui, repo, source, fil elif not bundletype.startswith('HG20'): raise error.ProgrammingError('unknown bundle type: %s' % bundletype) - bundle = bundle20(ui) + caps = {} + if 'obsolescence' in opts: + caps['obsmarkers'] = ('V1',) + bundle = bundle20(ui, caps) bundle.setcompression(compression, compopts) _addpartsfromopts(ui, repo, bundle, source, outgoing, opts) chunkiter = bundle.getchunks() @@ -1377,6 +1380,10 @@ def _addpartsfromopts(ui, repo, bundler, addparttagsfnodescache(repo, bundler, outgoing) + if opts.get('obsolescence', False): + obsmarkers = repo.obsstore.relevantmarkers(outgoing.missing) + buildobsmarkerspart(bundler, obsmarkers) + def addparttagsfnodescache(repo, bundler, outgoing): # we include the tags fnode cache for the bundle changeset # (as an optional parts) diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -1326,6 +1326,8 @@ def bundle(ui, repo, fname, dest=None, * contentopts = {'cg.version': cgversion} + if repo.ui.configbool('experimental', 'evolution.bundle-obsmarker', False): + contentopts['obsolescence'] = True bundle2.writenewbundle(ui, repo, 'bundle', fname, bversion, outgoing, contentopts, compression=bcompression, compopts=compopts) diff --git a/tests/test-obsolete-changeset-exchange.t b/tests/test-obsolete-changeset-exchange.t --- a/tests/test-obsolete-changeset-exchange.t +++ b/tests/test-obsolete-changeset-exchange.t @@ -83,6 +83,21 @@ check that bundle is not affected adding file changes added 1 changesets with 0 changes to 1 files (+1 heads) (run 'hg heads' to see heads) + +check-that bundle can contain markers: + + $ hg bundle --hidden --rev f89bcc95eba5 --base "f89bcc95eba5^" ../f89bcc95eba5-obs.hg --config experimental.evolution.bundle-obsmarker=1 + 1 changesets found + $ hg debugbundle ../f89bcc95eba5.hg + Stream params: sortdict([('Compression', 'BZ')]) + changegroup -- "sortdict([('version', '02'), ('nbchanges', '1')])" + f89bcc95eba5174b1ccc3e33a82e84c96e8338ee + $ hg debugbundle ../f89bcc95eba5-obs.hg + Stream params: sortdict([('Compression', 'BZ')]) + changegroup -- "sortdict([('version', '02'), ('nbchanges', '1')])" + f89bcc95eba5174b1ccc3e33a82e84c96e8338ee + obsmarkers -- 'sortdict()' + $ cd .. pull does not fetch excessive changesets when common node is hidden (issue4982)