diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py --- a/mercurial/bundle2.py +++ b/mercurial/bundle2.py @@ -1729,7 +1729,7 @@ if opts.get(b'obsolescence', False): obsmarkers = repo.obsstore.relevantmarkers(outgoing.missing) - buildobsmarkerspart(bundler, obsmarkers) + buildobsmarkerspart(bundler, obsmarkers, False) if opts.get(b'phases', False): headsbyphase = phases.subsetphaseheads(repo, outgoing.missing) @@ -1852,7 +1852,7 @@ part.addparam(b'requirements', requirements, mandatory=True) -def buildobsmarkerspart(bundler, markers): +def buildobsmarkerspart(bundler, markers, mandatory): """add an obsmarker part to the bundler with No part is created if markers is empty. @@ -1866,7 +1866,7 @@ if version is None: raise ValueError(b'bundler does not support common obsmarker format') stream = obsolete.encodemarkers(markers, True, version=version) - return bundler.newpart(b'obsmarkers', data=stream) + return bundler.newpart(b'obsmarkers', data=stream, mandatory=mandatory) def writebundle( diff --git a/mercurial/exchange.py b/mercurial/exchange.py --- a/mercurial/exchange.py +++ b/mercurial/exchange.py @@ -1157,7 +1157,7 @@ pushop.stepsdone.add(b'obsmarkers') if pushop.outobsmarkers: markers = obsutil.sortedmarkers(pushop.outobsmarkers) - bundle2.buildobsmarkerspart(bundler, markers) + bundle2.buildobsmarkerspart(bundler, markers, True) @b2partsgenerator(b'bookmarks') @@ -2615,7 +2615,7 @@ subset = [c.node() for c in repo.set(b'::%ln', heads)] markers = repo.obsstore.relevantmarkers(subset) markers = obsutil.sortedmarkers(markers) - bundle2.buildobsmarkerspart(bundler, markers) + bundle2.buildobsmarkerspart(bundler, markers, True) @getbundle2partsgenerator(b'phases') diff --git a/tests/test-obsolete-bundle-strip.t b/tests/test-obsolete-bundle-strip.t --- a/tests/test-obsolete-bundle-strip.t +++ b/tests/test-obsolete-bundle-strip.t @@ -1444,3 +1444,35 @@ # unbundling: new changesets 9ac430e15fca (1 drafts) # unbundling: (1 other changesets obsolete on arrival) # unbundling: (run 'hg update' to get a working copy) + +Test that obsolescence markers in bundles are ignored if unsupported + + $ hg init repo-with-obs + $ cd repo-with-obs + $ hg debugbuilddag +1 + $ hg debugobsolete `getid 0` + 1 new obsolescence markers + obsoleted 1 changesets + $ hg bundle --config experimental.evolution.bundle-obsmarker=true --all --hidden bundle-with-obs + 1 changesets found + $ cd .. + $ hg init repo-without-obs + $ cd repo-without-obs + $ hg --config experimental.evolution=False unbundle ../repo-with-obs/bundle-with-obs --debug + bundle2-input-bundle: 1 params with-transaction + bundle2-input-part: "changegroup" (params: 1 mandatory 1 advisory) supported + adding changesets + add changeset 1ea73414a91b + adding manifests + adding file changes + bundle2-input-part: total payload size 190 + bundle2-input-part: "cache:rev-branch-cache" (advisory) supported + bundle2-input-part: total payload size 39 + bundle2-input-part: "obsmarkers" (advisory) supported + bundle2-input-part: total payload size 50 + ignoring obsolescence markers, feature not enabled + bundle2-input-bundle: 3 parts total + updating the branch cache + added 1 changesets with 0 changes to 0 files + new changesets 1ea73414a91b (1 drafts) + (run 'hg update' to get a working copy) 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 @@ -103,7 +103,7 @@ changegroup -- {nbchanges: 1, version: 02} (mandatory: True) f89bcc95eba5174b1ccc3e33a82e84c96e8338ee cache:rev-branch-cache -- {} (mandatory: False) - obsmarkers -- {} (mandatory: True) + obsmarkers -- {} (mandatory: False) version: 1 (70 bytes) 9d73aac1b2ed7d53835eaeec212ed41ea47da53a f89bcc95eba5174b1ccc3e33a82e84c96e8338ee 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} diff --git a/tests/test-obsolete-distributed.t b/tests/test-obsolete-distributed.t --- a/tests/test-obsolete-distributed.t +++ b/tests/test-obsolete-distributed.t @@ -138,14 +138,42 @@ $ hg up 'desc("ROOT")' 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg pull --confirm --config ui.interactive=True << EOF + $ hg pull --debug --confirm --config ui.interactive=True << EOF > n > EOF pulling from $TESTTMP/distributed-chain-building/server + query 1; heads searching for changes + taking quick initial sample + query 2; still undecided: 1, sample size is: 1 + 2 total queries in 0.0091s + 1 changesets found + list of changesets: + 391a2bf12b1b8b05a72400ae36b26d50a091dc22 + listing keys for "bookmarks" + bundle2-output-bundle: "HG20", 5 parts total + bundle2-output-part: "changegroup" (params: 1 mandatory 1 advisory) streamed payload + bundle2-output-part: "listkeys" (params: 1 mandatory) empty payload + bundle2-output-part: "obsmarkers" streamed payload + bundle2-output-part: "phase-heads" 48 bytes payload + bundle2-output-part: "cache:rev-branch-cache" (advisory) streamed payload + bundle2-input-bundle: with-transaction + bundle2-input-part: "changegroup" (params: 1 mandatory 1 advisory) supported adding changesets + add changeset 391a2bf12b1b adding manifests adding file changes + adding c_B1 revisions + bundle2-input-part: total payload size 485 + bundle2-input-part: "listkeys" (params: 1 mandatory) supported + bundle2-input-part: "obsmarkers" supported + bundle2-input-part: total payload size 143 + bundle2-input-part: "phase-heads" supported + bundle2-input-part: total payload size 48 + bundle2-input-part: "cache:rev-branch-cache" (advisory) supported + bundle2-input-part: total payload size 39 + bundle2-input-bundle: 5 parts total + checking for updated bookmarks adding 1 changesets with 1 changes to 1 files (+1 heads) 1 new obsolescence markers obsoleting 1 changesets diff --git a/tests/test-obsolete.t b/tests/test-obsolete.t --- a/tests/test-obsolete.t +++ b/tests/test-obsolete.t @@ -1632,7 +1632,7 @@ e016b03fd86fcccc54817d120b90b751aaf367d6 b0551702f918510f01ae838ab03a463054c67b46 cache:rev-branch-cache -- {} (mandatory: False) - obsmarkers -- {} (mandatory: True) + obsmarkers -- {} (mandatory: False) version: 1 (92 bytes) e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} phase-heads -- {} (mandatory: True)