# HG changeset patch # User Pierre-Yves David # Date 1400618487 25200 # Node ID 2cde59f3cb5d545f32eb63d1fb283accdbda0b9c # Parent b107f3549ec204109586babc70bf5c3005bebb45 evolve: add a push pass using bundle2 Instead of using a dedicated wireprotocol commands, we use bundle2 to transmit an obs marker parts. This aims at both testing bundle2 more and to limit the amount of special code we needs to put in simple for server to fit our needs. The massive test changes comes from the fact we can use this fast path for both remote and local push. diff -r b107f3549ec2 -r 2cde59f3cb5d README --- a/README Mon Jun 02 14:44:13 2014 -0700 +++ b/README Tue May 20 13:41:27 2014 -0700 @@ -64,6 +64,7 @@ - added progress when pulling obsmarkers - only pull markers relevant to pulled subset - avoid exchanging common markers in some case + - use bundle2 as transport when available. - add a hook related to the new commands 3.3.2 -- 2014-05-14 diff -r b107f3549ec2 -r 2cde59f3cb5d hgext/evolve.py --- a/hgext/evolve.py Mon Jun 02 14:44:13 2014 -0700 +++ b/hgext/evolve.py Tue May 20 13:41:27 2014 -0700 @@ -66,6 +66,7 @@ from mercurial import wireproto from mercurial import localrepo from mercurial.hgweb import hgweb_mod +from mercurial import bundle2 _pack = struct.pack @@ -2275,6 +2276,26 @@ markers = [] if not markers: repo.ui.status("OBSEXC: no marker to push\n") + elif remote.capable('_evoext_b2x_obsmarkers_0_pushonly'): + obsdata = StringIO() + _encodemarkersstream(obsdata, markers) + obsdata.seek(0) + repo.ui.status("OBSEXC: pushing %i markers (%i bytes)\n" + % (len(markers), len(obsdata.getvalue()))) + bundler = bundle2.bundle20(pushop.ui, {}) + capsblob = bundle2.encodecaps(pushop.repo.bundle2caps) + bundler.addpart(bundle2.bundlepart('b2x:replycaps', data=capsblob)) + cgpart = bundle2.bundlepart('EVOLVE:B2X:OBSMARKERV1', data=obsdata.getvalue()) + bundler.addpart(cgpart) + stream = util.chunkbuffer(bundler.getchunks()) + try: + reply = pushop.remote.unbundle(stream, ['force'], 'push') + except bundle2.UnknownPartError, exc: + raise util.Abort('missing support for %s' % exc) + try: + op = bundle2.processbundle(pushop.repo, reply) + except bundle2.UnknownPartError, exc: + raise util.Abort('missing support for %s' % exc) elif remote.capable('_evoext_pushobsmarkers_0'): obsdata = pushobsmarkerStringIO() _encodemarkersstream(obsdata, markers) @@ -2348,6 +2369,12 @@ repo.hook('evolve_pushobsmarkers') return wireproto.pushres(0) +@bundle2.parthandler('evolve:b2x:obsmarkerv1') +def handleobsmarkerv1(op, inpart): + """add a stream of obsmarker to the repo""" + tr = op.gettransaction() + op.repo.obsstore.mergemarkers(tr, inpart.read()) + def _buildpullobsmerkersboundaries(pullop): """small funtion returning the argument for pull markers call may to contains 'heads' and 'common'. skip the key for None. @@ -2582,12 +2609,14 @@ caps += ' _evoext_pushobsmarkers_0' caps += ' _evoext_pullobsmarkers_0' caps += ' _evoext_obshash_0' + caps += ' _evoext_b2x_obsmarkers_0_pushonly' return caps @eh.extsetup def _installwireprotocol(ui): localrepo.moderncaps.add('_evoext_pullobsmarkers_0') + localrepo.moderncaps.add('_evoext_b2x_obsmarkers_0_pushonly') hgweb_mod.perms['evoext_pushobsmarkers_0'] = 'push' hgweb_mod.perms['evoext_pullobsmarkers_0'] = 'pull' hgweb_mod.perms['evoext_obshash'] = 'pull' diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-corrupt.t --- a/tests/test-corrupt.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-corrupt.t Tue May 20 13:41:27 2014 -0700 @@ -113,7 +113,7 @@ added 1 changesets with 2 changes to 2 files OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 4 nodes - OBSEXC: pushing 2 markers in 1 pushkey payload (184 bytes) + OBSEXC: pushing 2 markers (147 bytes) OBSEXC: DONE $ hg -R ../other verify checking changesets diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-exchange-A1.t --- a/tests/test-exchange-A1.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-exchange-A1.t Tue May 20 13:41:27 2014 -0700 @@ -74,7 +74,7 @@ added 1 changesets with 1 changes to 1 files OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 1 markers in 1 pushkey payload (78 bytes) + OBSEXC: pushing 1 markers (62 bytes) OBSEXC: DONE ## post push state # obstore: main @@ -124,7 +124,7 @@ added 1 changesets with 1 changes to 1 files OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 1 markers in 1 pushkey payload (78 bytes) + OBSEXC: pushing 1 markers (62 bytes) OBSEXC: DONE ## post push state # obstore: main @@ -233,7 +233,7 @@ added 2 changesets with 2 changes to 2 files OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 3 nodes - OBSEXC: pushing 1 markers in 1 pushkey payload (78 bytes) + OBSEXC: pushing 1 markers (62 bytes) OBSEXC: DONE ## post push state # obstore: main @@ -280,7 +280,7 @@ added 2 changesets with 2 changes to 2 files OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 3 nodes - OBSEXC: pushing 1 markers in 1 pushkey payload (78 bytes) + OBSEXC: pushing 1 markers (62 bytes) OBSEXC: DONE ## post push state # obstore: main diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-exchange-A2.t --- a/tests/test-exchange-A2.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-exchange-A2.t Tue May 20 13:41:27 2014 -0700 @@ -82,7 +82,7 @@ added 1 changesets with 1 changes to 1 files OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 1 markers in 1 pushkey payload (78 bytes) + OBSEXC: pushing 1 markers (62 bytes) OBSEXC: DONE ## post push state # obstore: main diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-exchange-A3.t --- a/tests/test-exchange-A3.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-exchange-A3.t Tue May 20 13:41:27 2014 -0700 @@ -94,7 +94,7 @@ added 1 changesets with 1 changes to 1 files OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 1 markers in 1 pushkey payload (78 bytes) + OBSEXC: pushing 1 markers (62 bytes) OBSEXC: DONE ## post push state # obstore: main @@ -198,7 +198,7 @@ added 1 changesets with 1 changes to 1 files (+1 heads) OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 1 markers in 1 pushkey payload (78 bytes) + OBSEXC: pushing 1 markers (62 bytes) OBSEXC: DONE ## post push state # obstore: main diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-exchange-A4.t --- a/tests/test-exchange-A4.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-exchange-A4.t Tue May 20 13:41:27 2014 -0700 @@ -87,7 +87,7 @@ added 2 changesets with 2 changes to 2 files OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 3 nodes - OBSEXC: pushing 1 markers in 1 pushkey payload (78 bytes) + OBSEXC: pushing 1 markers (62 bytes) OBSEXC: DONE ## post push state # obstore: main diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-exchange-A5.t --- a/tests/test-exchange-A5.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-exchange-A5.t Tue May 20 13:41:27 2014 -0700 @@ -95,7 +95,7 @@ added 1 changesets with 1 changes to 1 files OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 1 markers in 1 pushkey payload (78 bytes) + OBSEXC: pushing 1 markers (62 bytes) OBSEXC: DONE ## post push state # obstore: main diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-exchange-A6.t --- a/tests/test-exchange-A6.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-exchange-A6.t Tue May 20 13:41:27 2014 -0700 @@ -82,7 +82,7 @@ no changes found OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 1 markers in 1 pushkey payload (78 bytes) + OBSEXC: pushing 1 markers (62 bytes) OBSEXC: DONE ## post push state # obstore: main @@ -121,7 +121,7 @@ no changes found OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 3 nodes - OBSEXC: pushing 1 markers in 1 pushkey payload (78 bytes) + OBSEXC: pushing 1 markers (62 bytes) OBSEXC: DONE ## post push state # obstore: main diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-exchange-B1.t --- a/tests/test-exchange-B1.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-exchange-B1.t Tue May 20 13:41:27 2014 -0700 @@ -73,7 +73,7 @@ added 1 changesets with 1 changes to 1 files OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 1 markers in 1 pushkey payload (112 bytes) + OBSEXC: pushing 1 markers (89 bytes) OBSEXC: DONE ## post push state # obstore: main @@ -120,7 +120,7 @@ added 1 changesets with 1 changes to 1 files OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 1 markers in 1 pushkey payload (112 bytes) + OBSEXC: pushing 1 markers (89 bytes) OBSEXC: DONE ## post push state # obstore: main diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-exchange-B2.t --- a/tests/test-exchange-B2.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-exchange-B2.t Tue May 20 13:41:27 2014 -0700 @@ -65,7 +65,7 @@ no changes found OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 1 markers in 1 pushkey payload (112 bytes) + OBSEXC: pushing 1 markers (89 bytes) OBSEXC: DONE ## post push state # obstore: main @@ -104,7 +104,7 @@ no changes found OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 1 markers in 1 pushkey payload (112 bytes) + OBSEXC: pushing 1 markers (89 bytes) OBSEXC: DONE ## post push state # obstore: main diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-exchange-B4.t --- a/tests/test-exchange-B4.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-exchange-B4.t Tue May 20 13:41:27 2014 -0700 @@ -91,7 +91,7 @@ no changes found OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 1 markers in 1 pushkey payload (112 bytes) + OBSEXC: pushing 1 markers (89 bytes) OBSEXC: DONE ## post push state # obstore: main @@ -130,7 +130,7 @@ no changes found OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 3 nodes - OBSEXC: pushing 1 markers in 1 pushkey payload (112 bytes) + OBSEXC: pushing 1 markers (89 bytes) OBSEXC: DONE ## post push state # obstore: main diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-exchange-B5.t --- a/tests/test-exchange-B5.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-exchange-B5.t Tue May 20 13:41:27 2014 -0700 @@ -93,7 +93,7 @@ added 2 changesets with 2 changes to 2 files OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 3 nodes - OBSEXC: pushing 2 markers in 1 pushkey payload (188 bytes) + OBSEXC: pushing 2 markers (150 bytes) OBSEXC: DONE ## post push state # obstore: main @@ -148,7 +148,7 @@ added 2 changesets with 2 changes to 2 files OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 3 nodes - OBSEXC: pushing 2 markers in 1 pushkey payload (188 bytes) + OBSEXC: pushing 2 markers (150 bytes) OBSEXC: DONE ## post push state # obstore: main diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-exchange-B6.t --- a/tests/test-exchange-B6.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-exchange-B6.t Tue May 20 13:41:27 2014 -0700 @@ -77,7 +77,7 @@ no changes found OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 2 markers in 1 pushkey payload (188 bytes) + OBSEXC: pushing 2 markers (150 bytes) OBSEXC: DONE ## post push state # obstore: main diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-exchange-C1.t --- a/tests/test-exchange-C1.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-exchange-C1.t Tue May 20 13:41:27 2014 -0700 @@ -72,7 +72,7 @@ no changes found OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 2 markers in 1 pushkey payload (222 bytes) + OBSEXC: pushing 2 markers (177 bytes) OBSEXC: DONE ## post push state # obstore: main @@ -117,7 +117,7 @@ no changes found OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 2 markers in 1 pushkey payload (222 bytes) + OBSEXC: pushing 2 markers (177 bytes) OBSEXC: DONE ## post push state # obstore: main diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-exchange-C2.t --- a/tests/test-exchange-C2.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-exchange-C2.t Tue May 20 13:41:27 2014 -0700 @@ -82,7 +82,7 @@ added 1 changesets with 1 changes to 1 files OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 2 markers in 1 pushkey payload (188 bytes) + OBSEXC: pushing 2 markers (150 bytes) OBSEXC: DONE ## post push state # obstore: main @@ -135,7 +135,7 @@ added 1 changesets with 1 changes to 1 files OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 2 markers in 1 pushkey payload (188 bytes) + OBSEXC: pushing 2 markers (150 bytes) OBSEXC: DONE ## post push state # obstore: main diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-exchange-C3.t --- a/tests/test-exchange-C3.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-exchange-C3.t Tue May 20 13:41:27 2014 -0700 @@ -85,7 +85,7 @@ no changes found OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 3 markers in 1 pushkey payload (298 bytes) + OBSEXC: pushing 3 markers (238 bytes) OBSEXC: DONE ## post push state # obstore: main @@ -136,7 +136,7 @@ no changes found OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 3 markers in 1 pushkey payload (298 bytes) + OBSEXC: pushing 3 markers (238 bytes) OBSEXC: DONE ## post push state # obstore: main diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-exchange-C4.t --- a/tests/test-exchange-C4.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-exchange-C4.t Tue May 20 13:41:27 2014 -0700 @@ -93,7 +93,7 @@ no changes found OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 2 markers in 1 pushkey payload (188 bytes) + OBSEXC: pushing 2 markers (150 bytes) OBSEXC: DONE ## post push state # obstore: main diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-exchange-D1.t --- a/tests/test-exchange-D1.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-exchange-D1.t Tue May 20 13:41:27 2014 -0700 @@ -76,7 +76,7 @@ added 1 changesets with 1 changes to 1 files OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 2 markers in 1 pushkey payload (188 bytes) + OBSEXC: pushing 2 markers (150 bytes) OBSEXC: DONE ## post push state # obstore: main diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-exchange-D2.t --- a/tests/test-exchange-D2.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-exchange-D2.t Tue May 20 13:41:27 2014 -0700 @@ -69,7 +69,7 @@ no changes found OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 2 markers in 1 pushkey payload (188 bytes) + OBSEXC: pushing 2 markers (150 bytes) OBSEXC: DONE ## post push state # obstore: main diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-exchange-D4.t --- a/tests/test-exchange-D4.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-exchange-D4.t Tue May 20 13:41:27 2014 -0700 @@ -92,7 +92,7 @@ added 1 changesets with 1 changes to 1 files OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 2 markers in 1 pushkey payload (154 bytes) + OBSEXC: pushing 2 markers (123 bytes) OBSEXC: DONE ## post push state # obstore: main diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-obsolete.t --- a/tests/test-obsolete.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-obsolete.t Tue May 20 13:41:27 2014 -0700 @@ -183,7 +183,7 @@ added 5 changesets with 5 changes to 5 files (+1 heads) OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 5 nodes - OBSEXC: pushing 2 markers in 1 pushkey payload (154 bytes) + OBSEXC: pushing 2 markers (123 bytes) OBSEXC: DONE $ hg -R ../other-new verify checking changesets @@ -240,7 +240,7 @@ added 1 changesets with 1 changes to 1 files (+1 heads) OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 5 nodes - OBSEXC: pushing 3 markers in 1 pushkey payload (230 bytes) + OBSEXC: pushing 3 markers (184 bytes) OBSEXC: DONE $ qlog -R ../other-new 5 @@ -265,7 +265,7 @@ no changes found OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 5 nodes - OBSEXC: pushing 3 markers in 1 pushkey payload (230 bytes) + OBSEXC: pushing 3 markers (184 bytes) OBSEXC: DONE [1] @@ -548,7 +548,7 @@ added 2 changesets with 1 changes to [12] files (re) OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 5 nodes - OBSEXC: pushing 7 markers in 1 pushkey payload (565 bytes) + OBSEXC: pushing 7 markers (452 bytes) OBSEXC: DONE $ hg up -q 10 $ mkcommit "obsol_d'''" @@ -563,7 +563,7 @@ added 1 changesets with 1 changes to 1 files (+1 heads) OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 5 nodes - OBSEXC: pushing 8 markers in 1 pushkey payload (642 bytes) + OBSEXC: pushing 8 markers (513 bytes) OBSEXC: DONE $ cd .. diff -r b107f3549ec2 -r 2cde59f3cb5d tests/test-tutorial.t --- a/tests/test-tutorial.t Mon Jun 02 14:44:13 2014 -0700 +++ b/tests/test-tutorial.t Tue May 20 13:41:27 2014 -0700 @@ -407,7 +407,7 @@ added 3 changesets with 3 changes to 1 files OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 5 nodes - OBSEXC: pushing 6 markers in 1 pushkey payload (609 bytes) + OBSEXC: pushing 6 markers (487 bytes) OBSEXC: DONE for simplicity sake we get the bathroom change in line again @@ -740,7 +740,7 @@ added 2 changesets with 2 changes to 1 files (+1 heads) OBSEXC: computing relevant nodes OBSEXC: computing markers relevant to 7 nodes - OBSEXC: pushing 10 markers in 1 pushkey payload (1004 bytes) + OBSEXC: pushing 10 markers (803 bytes) OBSEXC: DONE remote get a warning that current working directory is based on an obsolete changeset