# HG changeset patch # User Gregory Szorc # Date 1538425058 25200 # Node ID 393e44324037599da66ace46b60616cc9e8a75b4 # Parent 5e5b06087ec5b4692b0285c9e33710315455b422 httppeer: report http statistics Now that keepalive.py records HTTP request count and the number of bytes sent and received as part of performing those requests, we can easily print a report on the activity when closing a peer instance! Exact byte counts are globbed in tests because they are influenced by non-deterministic things, such as hostnames and port numbers. Plus, the exact byte count isn't too important anyway. I feel obliged to note that printing the byte count could have security implications. e.g. if sending a password via HTTP basic auth, the length of that password will influence the byte count and the reporting of the byte count could be a side-channel leak of the password length. I /think/ this is beyond our threshold for concern. But if we think it poses a problem, we can teach the byte count logging code to e.g. ignore sensitive HTTP request headers. We could also consider not reporting the byte count of request headers altogether. But since the wire protocol uses HTTP headers for sending command arguments, it is kind of important to report their size. Differential Revision: https://phab.mercurial-scm.org/D4858 diff -r 5e5b06087ec5 -r 393e44324037 mercurial/httppeer.py --- a/mercurial/httppeer.py Mon Oct 01 12:30:32 2018 -0700 +++ b/mercurial/httppeer.py Mon Oct 01 13:17:38 2018 -0700 @@ -405,7 +405,11 @@ return True def close(self): - pass + self.ui.note(_('(sent %d HTTP requests and %d bytes; ' + 'received %d bytes in responses)\n') % + (self._urlopener.requestscount, + self._urlopener.sentbytescount, + self._urlopener.receivedbytescount)) # End of ipeerconnection interface. @@ -758,7 +762,11 @@ return False def close(self): - pass + self.ui.note(_('(sent %d HTTP requests and %d bytes; ' + 'received %d bytes in responses)\n') % + (self._opener.requestscount, + self._opener.sentbytescount, + self._opener.receivedbytescount)) # End of ipeerconnection. diff -r 5e5b06087ec5 -r 393e44324037 mercurial/url.py --- a/mercurial/url.py Mon Oct 01 12:30:32 2018 -0700 +++ b/mercurial/url.py Mon Oct 01 13:17:38 2018 -0700 @@ -555,6 +555,11 @@ handlers.append(cookiehandler(ui)) opener = urlreq.buildopener(*handlers) + # keepalive.py's handlers will populate these attributes if they exist. + opener.requestscount = 0 + opener.sentbytescount = 0 + opener.receivedbytescount = 0 + # The user agent should should *NOT* be used by servers for e.g. # protocol detection or feature negotiation: there are other # facilities for that. diff -r 5e5b06087ec5 -r 393e44324037 tests/test-clone-uncompressed.t --- a/tests/test-clone-uncompressed.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-clone-uncompressed.t Mon Oct 01 13:17:38 2018 -0700 @@ -261,6 +261,7 @@ bundle2-input-part: total payload size 24 bundle2-input-bundle: 1 parts total checking for updated bookmarks + (sent 5 HTTP requests and * bytes; received * bytes in responses) (glob) #endif #if stream-bundle2 $ hg --debug --config worker.backgroundclose=true --config worker.backgroundcloseminfilecount=1 clone --stream -U http://localhost:$HGPORT clone-background | grep -v adding @@ -282,6 +283,7 @@ bundle2-input-part: "listkeys" (params: 1 mandatory) supported bundle2-input-bundle: 1 parts total checking for updated bookmarks + (sent 3 HTTP requests and * bytes; received * bytes in responses) (glob) #endif Cannot stream clone when there are secret changesets diff -r 5e5b06087ec5 -r 393e44324037 tests/test-clonebundles.t --- a/tests/test-clonebundles.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-clonebundles.t Mon Oct 01 13:17:38 2018 -0700 @@ -27,6 +27,7 @@ adding file changes added 2 changesets with 2 changes to 2 files new changesets 53245c60e682:aaff8d2ffbbf + (sent 3 HTTP requests and * bytes; received * bytes in responses) (glob) $ cat server/access.log * - - [*] "GET /?cmd=capabilities HTTP/1.1" 200 - (glob) @@ -45,6 +46,7 @@ adding file changes added 2 changesets with 2 changes to 2 files new changesets 53245c60e682:aaff8d2ffbbf + (sent 4 HTTP requests and * bytes; received * bytes in responses) (glob) Manifest file with invalid URL aborts diff -r 5e5b06087ec5 -r 393e44324037 tests/test-http-api-httpv2.t --- a/tests/test-http-api-httpv2.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-http-api-httpv2.t Mon Oct 01 13:17:38 2018 -0700 @@ -228,6 +228,7 @@ response: gen[ b'customreadonly bytes response' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Request to read-write command fails because server is read-only by default diff -r 5e5b06087ec5 -r 393e44324037 tests/test-http-protocol.t --- a/tests/test-http-protocol.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-http-protocol.t Mon Oct 01 13:17:38 2018 -0700 @@ -218,6 +218,7 @@ b'namespaces': b'', b'phases': b'' } + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Same thing, but with "httprequest" command @@ -286,6 +287,7 @@ response: [ b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) $ killdaemons.py $ enablehttpv2 empty @@ -350,6 +352,7 @@ response: [ b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) $ killdaemons.py @@ -483,6 +486,7 @@ response: [ b'\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL' ] + (sent 3 HTTP requests and * bytes; received * bytes in responses) (glob) $ killdaemons.py @@ -747,3 +751,4 @@ response: [ b'\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL' ] + (sent 4 HTTP requests and * bytes; received * bytes in responses) (glob) diff -r 5e5b06087ec5 -r 393e44324037 tests/test-lfs-serve-access.t --- a/tests/test-lfs-serve-access.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-lfs-serve-access.t Mon Oct 01 13:17:38 2018 -0700 @@ -140,6 +140,7 @@ getting lfs.bin lfs: found f03217a32529a28a42d03b1244fe09b6e0f9fd06d7b966d4d50567be2abe6c0e in the local lfs store 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + (sent 3 HTTP requests and * bytes; received * bytes in responses) (glob) $ "$PYTHON" $RUNTESTDIR/killdaemons.py $DAEMON_PIDS diff -r 5e5b06087ec5 -r 393e44324037 tests/test-lfs-serve.t --- a/tests/test-lfs-serve.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-lfs-serve.t Mon Oct 01 13:17:38 2018 -0700 @@ -362,6 +362,7 @@ 3 files updated, 0 files merged, 0 files removed, 0 files unresolved updated to "d3b84d50eacb: lfs file with lfs client" 1 other heads for branch "default" + (sent 3 HTTP requests and * bytes; received * bytes in responses) (glob) $ grep 'lfs' $TESTTMP/client6_pull/.hg/requires $SERVER_REQUIRES $TESTTMP/client6_pull/.hg/requires:lfs $TESTTMP/server/.hg/requires:lfs diff -r 5e5b06087ec5 -r 393e44324037 tests/test-schemes.t --- a/tests/test-schemes.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-schemes.t Mon Oct 01 13:17:38 2018 -0700 @@ -42,6 +42,7 @@ searching for changes all remote heads known locally no changes found + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) [1] check that paths are expanded diff -r 5e5b06087ec5 -r 393e44324037 tests/test-stream-bundle-v2.t --- a/tests/test-stream-bundle-v2.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-stream-bundle-v2.t Mon Oct 01 13:17:38 2018 -0700 @@ -117,6 +117,7 @@ E: remote created -> g getting E 5 files updated, 0 files merged, 0 files removed, 0 files unresolved + (sent 4 HTTP requests and * bytes; received * bytes in responses) (glob) $ hg clone --stream http://localhost:$HGPORT streamv2-clone-explicit --debug using http://localhost:$HGPORT/ @@ -172,3 +173,4 @@ E: remote created -> g getting E 5 files updated, 0 files merged, 0 files removed, 0 files unresolved + (sent 4 HTTP requests and * bytes; received * bytes in responses) (glob) diff -r 5e5b06087ec5 -r 393e44324037 tests/test-wireproto-caching.t --- a/tests/test-wireproto-caching.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-wireproto-caching.t Mon Oct 01 13:17:38 2018 -0700 @@ -99,6 +99,7 @@ ] } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) $ sendhttpv2peer << EOF > command manifestdata @@ -152,6 +153,7 @@ ] } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Sending different request doesn't yield cache hit. @@ -214,6 +216,7 @@ ] } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) $ cat .hg/blackbox.log *> cacher constructed for manifestdata (glob) @@ -292,6 +295,7 @@ ] } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) $ sendhttpv2peer << EOF > command manifestdata @@ -345,6 +349,7 @@ ] } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) $ cat .hg/blackbox.log *> cacher constructed for manifestdata (glob) @@ -596,6 +601,7 @@ ] } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) $ test -f .hg/blackbox.log [1] diff -r 5e5b06087ec5 -r 393e44324037 tests/test-wireproto-command-branchmap.t --- a/tests/test-wireproto-command-branchmap.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-wireproto-command-branchmap.t Mon Oct 01 13:17:38 2018 -0700 @@ -88,5 +88,6 @@ b'\xbe\x0e\xf7<\x17\xad\xe3\xfc\x89\xdcAp\x1e\xb9\xfc:\x91\xb5\x82\x82' ] } + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) $ cat error.log diff -r 5e5b06087ec5 -r 393e44324037 tests/test-wireproto-command-capabilities.t --- a/tests/test-wireproto-command-capabilities.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-wireproto-command-capabilities.t Mon Oct 01 13:17:38 2018 -0700 @@ -668,5 +668,6 @@ ] } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) $ cat error.log diff -r 5e5b06087ec5 -r 393e44324037 tests/test-wireproto-command-changesetdata.t --- a/tests/test-wireproto-command-changesetdata.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-wireproto-command-changesetdata.t Mon Oct 01 13:17:38 2018 -0700 @@ -196,6 +196,7 @@ b'node': b'\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11' } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Sending root nodes limits what data is sent @@ -248,6 +249,7 @@ b'node': b'\x0b\xb8\xad\x89J\x15\xb1S\x80\xb2\xa2\xa5\xb1\x83\xe2\x0f*K(\xdd' } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Requesting data on a single node by node works @@ -297,6 +299,7 @@ b'node': b'3\x90\xef\x85\x00s\xfb\xc2\xf0\xdf\xff"D4,\x8e\x92)\x01:' } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Specifying a noderange and nodes takes union @@ -350,6 +353,7 @@ b'node': b'\x0b\xb8\xad\x89J\x15\xb1S\x80\xb2\xa2\xa5\xb1\x83\xe2\x0f*K(\xdd' } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) nodesdepth of 1 limits to exactly requested nodes @@ -400,6 +404,7 @@ b'node': b'\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11' } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) nodesdepth of 2 limits to first ancestor @@ -453,6 +458,7 @@ b'node': b'\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11' } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) nodesdepth with multiple nodes @@ -512,6 +518,7 @@ b'node': b'\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11' } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Parents data is transferred upon request @@ -566,6 +573,7 @@ ] } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Phase data is transferred upon request @@ -617,6 +625,7 @@ b'phase': b'public' } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Revision data is transferred upon request @@ -679,6 +688,7 @@ }, b'1b74476799ec8318045db759b1b4bcc9b839d0aa\ntest\n0 0\na\n\ncommit 3' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Bookmarks key isn't present if no bookmarks data @@ -738,6 +748,7 @@ b'node': b'\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11' } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Bookmarks are sent when requested @@ -808,6 +819,7 @@ b'node': b'\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11' } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Bookmarks are sent when we make a no-new-revisions request @@ -896,6 +908,7 @@ b'node': b'\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11' } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Multiple fields can be transferred @@ -962,6 +975,7 @@ }, b'1b74476799ec8318045db759b1b4bcc9b839d0aa\ntest\n0 0\na\n\ncommit 3' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Base nodes have just their metadata (e.g. phase) transferred @@ -1074,5 +1088,6 @@ }, b'1b74476799ec8318045db759b1b4bcc9b839d0aa\ntest\n0 0\na\n\ncommit 3' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) $ cat error.log diff -r 5e5b06087ec5 -r 393e44324037 tests/test-wireproto-command-filedata.t --- a/tests/test-wireproto-command-filedata.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-wireproto-command-filedata.t Mon Oct 01 13:17:38 2018 -0700 @@ -201,6 +201,7 @@ b'node': b'\n\x862\x1f\x13y\xd1\xa9\xec\xd0W\x9a"\x97z\xf7\xa5\xac\xaf\x11' } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Requesting parents works @@ -258,6 +259,7 @@ ] } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Requesting revision data works (haveparents defaults to False, so fulltext is emitted) @@ -322,6 +324,7 @@ }, b'a0\n00000000000000000000000000000000000000\n11111111111111111111111111111111111111\na1\n' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) haveparents=False should be same as above @@ -386,6 +389,7 @@ }, b'a0\n00000000000000000000000000000000000000\n11111111111111111111111111111111111111\na1\n' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) haveparents=True should emit a delta @@ -448,6 +452,7 @@ }, b'\x00\x00\x00Q\x00\x00\x00Q\x00\x00\x00\x03a1\n' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Requesting multiple revisions works (first revision is a fulltext since haveparents=False by default) @@ -523,6 +528,7 @@ }, b'\x00\x00\x00Q\x00\x00\x00Q\x00\x00\x00\x03a1\n' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Revisions are sorted by DAG order, parents first @@ -597,6 +603,7 @@ }, b'\x00\x00\x00Q\x00\x00\x00Q\x00\x00\x00\x03a1\n' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Requesting parents and revision data works @@ -662,5 +669,6 @@ }, b'a0\n00000000000000000000000000000000000000\n11111111111111111111111111111111111111\na2\n' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) $ cat error.log diff -r 5e5b06087ec5 -r 393e44324037 tests/test-wireproto-command-heads.t --- a/tests/test-wireproto-command-heads.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-wireproto-command-heads.t Mon Oct 01 13:17:38 2018 -0700 @@ -72,6 +72,7 @@ b'\xaeI.6\xb0\xc83\x9f\xfa\xf3(\xd0\x0b\x85\xb4R]\xe1\x16^', b')Dm-\xc5A\x9c_\x97Dz\x8b\xc0b\xe4\xcc2\x8b\xf2A' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Requesting just the public heads works @@ -116,5 +117,6 @@ response: [ b'x\xd2\xdc\xa46\xb2\xf5\xb1\x88\xac&~)\xb8\x1e\x07&m8\xfc' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) $ cat error.log diff -r 5e5b06087ec5 -r 393e44324037 tests/test-wireproto-command-known.t --- a/tests/test-wireproto-command-known.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-wireproto-command-known.t Mon Oct 01 13:17:38 2018 -0700 @@ -60,6 +60,7 @@ s> \r\n received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) response: [] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Single known node works @@ -104,6 +105,7 @@ response: [ True ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Multiple nodes works @@ -150,5 +152,6 @@ False, True ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) $ cat error.log diff -r 5e5b06087ec5 -r 393e44324037 tests/test-wireproto-command-listkeys.t --- a/tests/test-wireproto-command-listkeys.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-wireproto-command-listkeys.t Mon Oct 01 13:17:38 2018 -0700 @@ -68,6 +68,7 @@ b'namespaces': b'', b'phases': b'' } + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Request for phases works @@ -113,6 +114,7 @@ b'be0ef73c17ade3fc89dc41701eb9fc3a91b58282': b'1', b'publishing': b'True' } + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Request for bookmarks works @@ -157,5 +159,6 @@ response: { b'@': b'26805aba1e600a82e93661149f2313866a221a7b' } + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) $ cat error.log diff -r 5e5b06087ec5 -r 393e44324037 tests/test-wireproto-command-lookup.t --- a/tests/test-wireproto-command-lookup.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-wireproto-command-lookup.t Mon Oct 01 13:17:38 2018 -0700 @@ -60,5 +60,6 @@ s> \r\n received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) response: b'Bk\xad\xa5\xc6u\x98\xcae\x03mW\xd9\xe4\xb6K\x0c\x1c\xe7\xa0' + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) $ cat error.log diff -r 5e5b06087ec5 -r 393e44324037 tests/test-wireproto-command-manifestdata.t --- a/tests/test-wireproto-command-manifestdata.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-wireproto-command-manifestdata.t Mon Oct 01 13:17:38 2018 -0700 @@ -191,6 +191,7 @@ b'node': b'F\xa6r\x1b^\xda\xf0\xea\x04\xb7\x9a\\\xb3!\x88T\xa4\xd2\xab\xa0' } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Requesting parents works @@ -246,6 +247,7 @@ ] } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Requesting revision data works (haveparents defaults to false, so fulltext is emitted) @@ -310,6 +312,7 @@ }, b'a\x000879345e39377229634b420c639454156726c6b6\nb\x00819e258d31a5e1606629f365bb902a1b21ee4216\ndir0/c\x00914445346a0ca0629bd47ceb5dfe07e4d4cf2501\ndir0/child0/e\x00bbba6c06b30f443d34ff841bc985c4d0827c6be4\ndir0/child1/f\x0012fc7dcd773b5a0a929ce195228083c6ddc9cec4\ndir0/d\x00538206dc971e521540d6843abfe6d16032f6d426\n' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) haveparents=False yields same output @@ -374,6 +377,7 @@ }, b'a\x000879345e39377229634b420c639454156726c6b6\nb\x00819e258d31a5e1606629f365bb902a1b21ee4216\ndir0/c\x00914445346a0ca0629bd47ceb5dfe07e4d4cf2501\ndir0/child0/e\x00bbba6c06b30f443d34ff841bc985c4d0827c6be4\ndir0/child1/f\x0012fc7dcd773b5a0a929ce195228083c6ddc9cec4\ndir0/d\x00538206dc971e521540d6843abfe6d16032f6d426\n' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) haveparents=True will emit delta @@ -434,6 +438,7 @@ }, b'\x00\x00\x00\x00\x00\x00\x00+\x00\x00\x00+a\x000879345e39377229634b420c639454156726c6b6\n' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Requesting multiple revisions works (haveparents defaults to false, so fulltext is emitted unless a parent @@ -511,6 +516,7 @@ }, b'\x00\x00\x00\x00\x00\x00\x00+\x00\x00\x00+a\x000879345e39377229634b420c639454156726c6b6\n' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) With haveparents=True, first revision is a delta instead of fulltext @@ -587,6 +593,7 @@ }, b'\x00\x00\x00\x00\x00\x00\x00+\x00\x00\x00+a\x000879345e39377229634b420c639454156726c6b6\n' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Revisions are sorted by DAG order, parents first @@ -662,6 +669,7 @@ }, b'\x00\x00\x00\x00\x00\x00\x00+\x00\x00\x00+a\x000879345e39377229634b420c639454156726c6b6\n' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Requesting parents and revision data works @@ -745,5 +753,6 @@ }, b'\x00\x00\x00\x00\x00\x00\x00+\x00\x00\x00+a\x000879345e39377229634b420c639454156726c6b6\n' ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) $ cat error.log diff -r 5e5b06087ec5 -r 393e44324037 tests/test-wireproto-command-pushkey.t --- a/tests/test-wireproto-command-pushkey.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-wireproto-command-pushkey.t Mon Oct 01 13:17:38 2018 -0700 @@ -63,6 +63,7 @@ s> \r\n received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) response: True + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) $ sendhttpv2peer << EOF > command listkeys @@ -105,5 +106,6 @@ response: { b'@': b'426bada5c67598ca65036d57d9e4b64b0c1ce7a0' } + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) $ cat error.log diff -r 5e5b06087ec5 -r 393e44324037 tests/test-wireproto-content-redirects.t --- a/tests/test-wireproto-content-redirects.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-wireproto-content-redirects.t Mon Oct 01 13:17:38 2018 -0700 @@ -317,6 +317,7 @@ } } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Unknown protocol is filtered from compatible targets @@ -610,6 +611,7 @@ } } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Missing SNI support filters targets that require SNI @@ -901,6 +903,7 @@ } } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) $ cat >> $HGRCPATH << EOF > [extensions] @@ -1191,6 +1194,7 @@ } } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Set up the server to issue content redirects to its built-in API server. @@ -1279,6 +1283,7 @@ ] } ] + (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob) Cached entry should be available on server @@ -1381,6 +1386,7 @@ ] } ] + (sent 3 HTTP requests and * bytes; received * bytes in responses) (glob) $ cat error.log $ killdaemons.py diff -r 5e5b06087ec5 -r 393e44324037 tests/test-wireproto-exchangev2.t --- a/tests/test-wireproto-exchangev2.t Mon Oct 01 12:30:32 2018 -0700 +++ b/tests/test-wireproto-exchangev2.t Mon Oct 01 13:17:38 2018 -0700 @@ -130,6 +130,7 @@ received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos) updating the branch cache new changesets 3390ef850073:caa2a465451d (3 drafts) + (sent 5 HTTP requests and * bytes; received * bytes in responses) (glob) All changesets should have been transferred @@ -256,6 +257,7 @@ received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos) updating the branch cache new changesets 3390ef850073:4432d83626e8 + (sent 6 HTTP requests and * bytes; received * bytes in responses) (glob) $ cd client-singlehead @@ -369,6 +371,7 @@ updating the branch cache new changesets cd2534766bec:caa2a465451d (3 drafts) (run 'hg update' to get a working copy) + (sent 5 HTTP requests and * bytes; received * bytes in responses) (glob) $ hg log -G -T '{rev} {node} {phase}\n' o 4 caa2a465451dd1facda0f5b12312c355584188a1 draft @@ -439,6 +442,7 @@ checking for updated bookmarks 2 local changesets published (run 'hg update' to get a working copy) + (sent 3 HTTP requests and * bytes; received * bytes in responses) (glob) $ hg log -G -T '{rev} {node} {phase}\n' o 4 caa2a465451dd1facda0f5b12312c355584188a1 public @@ -555,6 +559,7 @@ received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos) updating the branch cache new changesets 3390ef850073:caa2a465451d (1 drafts) + (sent 5 HTTP requests and * bytes; received * bytes in responses) (glob) $ hg -R client-bookmarks bookmarks book-1 0:3390ef850073 @@ -611,6 +616,7 @@ checking for updated bookmarks updating bookmark book-1 (run 'hg update' to get a working copy) + (sent 3 HTTP requests and * bytes; received * bytes in responses) (glob) $ hg -R client-bookmarks bookmarks book-1 2:cd2534766bec