tests/test-wireproto-content-redirects.t
changeset 40023 10cf8b116dd8
child 40024 86b22a4cfab1
equal deleted inserted replaced
40022:33eb670e2834 40023:10cf8b116dd8
       
     1   $ . $TESTDIR/wireprotohelpers.sh
       
     2 
       
     3   $ hg init server
       
     4   $ enablehttpv2 server
       
     5   $ cd server
       
     6   $ cat >> .hg/hgrc << EOF
       
     7   > [extensions]
       
     8   > simplecache = $TESTDIR/wireprotosimplecache.py
       
     9   > EOF
       
    10 
       
    11   $ echo a0 > a
       
    12   $ echo b0 > b
       
    13   $ hg -q commit -A -m 'commit 0'
       
    14   $ echo a1 > a
       
    15   $ hg commit -m 'commit 1'
       
    16 
       
    17   $ hg --debug debugindex -m
       
    18      rev linkrev nodeid                                   p1                                       p2
       
    19        0       0 992f4779029a3df8d0666d00bb924f69634e2641 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
       
    20        1       1 a988fb43583e871d1ed5750ee074c6d840bbbfc8 992f4779029a3df8d0666d00bb924f69634e2641 0000000000000000000000000000000000000000
       
    21 
       
    22   $ hg --config simplecache.redirectsfile=redirects.py serve -p $HGPORT -d --pid-file hg.pid -E error.log
       
    23   $ cat hg.pid > $DAEMON_PIDS
       
    24 
       
    25   $ cat > redirects.py << EOF
       
    26   > [
       
    27   >   {
       
    28   >     b'name': b'target-a',
       
    29   >     b'protocol': b'http',
       
    30   >     b'snirequired': False,
       
    31   >     b'tlsversions': [b'1.2', b'1.3'],
       
    32   >     b'uris': [b'http://example.com/'],
       
    33   >   },
       
    34   > ]
       
    35   > EOF
       
    36 
       
    37 Redirect targets advertised when configured
       
    38 
       
    39   $ sendhttpv2peerhandshake << EOF
       
    40   > command capabilities
       
    41   > EOF
       
    42   creating http peer for wire protocol version 2
       
    43   s>     GET /?cmd=capabilities HTTP/1.1\r\n
       
    44   s>     Accept-Encoding: identity\r\n
       
    45   s>     vary: X-HgProto-1,X-HgUpgrade-1\r\n
       
    46   s>     x-hgproto-1: cbor\r\n
       
    47   s>     x-hgupgrade-1: exp-http-v2-0002\r\n
       
    48   s>     accept: application/mercurial-0.1\r\n
       
    49   s>     host: $LOCALIP:$HGPORT\r\n (glob)
       
    50   s>     user-agent: Mercurial debugwireproto\r\n
       
    51   s>     \r\n
       
    52   s> makefile('rb', None)
       
    53   s>     HTTP/1.1 200 OK\r\n
       
    54   s>     Server: testing stub value\r\n
       
    55   s>     Date: $HTTP_DATE$\r\n
       
    56   s>     Content-Type: application/mercurial-cbor\r\n
       
    57   s>     Content-Length: 1970\r\n
       
    58   s>     \r\n
       
    59   s>     \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0002\xa6Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionInoderange\xa3Gdefault\xf6Hrequired\xf4DtypeDlistEnodes\xa3Gdefault\xf6Hrequired\xf4DtypeDlistJnodesdepth\xa3Gdefault\xf6Hrequired\xf4DtypeCintKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullGpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushKcompression\x82\xa1DnameDzstd\xa1DnameDzlibQframingmediatypes\x81X&application/mercurial-exp-framing-0005Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa5DnameHtarget-aHprotocolDhttpKsnirequired\xf4Ktlsversions\x82C1.2C1.3Duris\x81Shttp://example.com/Nv1capabilitiesY\x01\xd8batch branchmap $USUAL_BUNDLE2_CAPS$ changegroupsubset compression=$BUNDLE2_COMPRESSIONS$ getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
       
    60   sending capabilities command
       
    61   s>     POST /api/exp-http-v2-0002/ro/capabilities HTTP/1.1\r\n
       
    62   s>     Accept-Encoding: identity\r\n
       
    63   s>     accept: application/mercurial-exp-framing-0005\r\n
       
    64   s>     content-type: application/mercurial-exp-framing-0005\r\n
       
    65   s>     content-length: 27\r\n
       
    66   s>     host: $LOCALIP:$HGPORT\r\n (glob)
       
    67   s>     user-agent: Mercurial debugwireproto\r\n
       
    68   s>     \r\n
       
    69   s>     \x13\x00\x00\x01\x00\x01\x01\x11\xa1DnameLcapabilities
       
    70   s> makefile('rb', None)
       
    71   s>     HTTP/1.1 200 OK\r\n
       
    72   s>     Server: testing stub value\r\n
       
    73   s>     Date: $HTTP_DATE$\r\n
       
    74   s>     Content-Type: application/mercurial-exp-framing-0005\r\n
       
    75   s>     Transfer-Encoding: chunked\r\n
       
    76   s>     \r\n
       
    77   s>     13\r\n
       
    78   s>     \x0b\x00\x00\x01\x00\x02\x011
       
    79   s>     \xa1FstatusBok
       
    80   s>     \r\n
       
    81   received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
       
    82   s>     5ab\r\n
       
    83   s>     \xa3\x05\x00\x01\x00\x02\x001
       
    84   s>     \xa6Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionInoderange\xa3Gdefault\xf6Hrequired\xf4DtypeDlistEnodes\xa3Gdefault\xf6Hrequired\xf4DtypeDlistJnodesdepth\xa3Gdefault\xf6Hrequired\xf4DtypeCintKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullGpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushKcompression\x82\xa1DnameDzstd\xa1DnameDzlibQframingmediatypes\x81X&application/mercurial-exp-framing-0005Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa5DnameHtarget-aHprotocolDhttpKsnirequired\xf4Ktlsversions\x82C1.2C1.3Duris\x81Shttp://example.com/
       
    85   s>     \r\n
       
    86   received frame(size=1443; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
       
    87   s>     8\r\n
       
    88   s>     \x00\x00\x00\x01\x00\x02\x002
       
    89   s>     \r\n
       
    90   s>     0\r\n
       
    91   s>     \r\n
       
    92   received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
       
    93   response: gen[
       
    94     {
       
    95       b'commands': {
       
    96         b'branchmap': {
       
    97           b'args': {},
       
    98           b'permissions': [
       
    99             b'pull'
       
   100           ]
       
   101         },
       
   102         b'capabilities': {
       
   103           b'args': {},
       
   104           b'permissions': [
       
   105             b'pull'
       
   106           ]
       
   107         },
       
   108         b'changesetdata': {
       
   109           b'args': {
       
   110             b'fields': {
       
   111               b'default': set([]),
       
   112               b'required': False,
       
   113               b'type': b'set',
       
   114               b'validvalues': set([
       
   115                 b'bookmarks',
       
   116                 b'parents',
       
   117                 b'phase',
       
   118                 b'revision'
       
   119               ])
       
   120             },
       
   121             b'noderange': {
       
   122               b'default': None,
       
   123               b'required': False,
       
   124               b'type': b'list'
       
   125             },
       
   126             b'nodes': {
       
   127               b'default': None,
       
   128               b'required': False,
       
   129               b'type': b'list'
       
   130             },
       
   131             b'nodesdepth': {
       
   132               b'default': None,
       
   133               b'required': False,
       
   134               b'type': b'int'
       
   135             }
       
   136           },
       
   137           b'permissions': [
       
   138             b'pull'
       
   139           ]
       
   140         },
       
   141         b'filedata': {
       
   142           b'args': {
       
   143             b'fields': {
       
   144               b'default': set([]),
       
   145               b'required': False,
       
   146               b'type': b'set',
       
   147               b'validvalues': set([
       
   148                 b'parents',
       
   149                 b'revision'
       
   150               ])
       
   151             },
       
   152             b'haveparents': {
       
   153               b'default': False,
       
   154               b'required': False,
       
   155               b'type': b'bool'
       
   156             },
       
   157             b'nodes': {
       
   158               b'required': True,
       
   159               b'type': b'list'
       
   160             },
       
   161             b'path': {
       
   162               b'required': True,
       
   163               b'type': b'bytes'
       
   164             }
       
   165           },
       
   166           b'permissions': [
       
   167             b'pull'
       
   168           ]
       
   169         },
       
   170         b'heads': {
       
   171           b'args': {
       
   172             b'publiconly': {
       
   173               b'default': False,
       
   174               b'required': False,
       
   175               b'type': b'bool'
       
   176             }
       
   177           },
       
   178           b'permissions': [
       
   179             b'pull'
       
   180           ]
       
   181         },
       
   182         b'known': {
       
   183           b'args': {
       
   184             b'nodes': {
       
   185               b'default': [],
       
   186               b'required': False,
       
   187               b'type': b'list'
       
   188             }
       
   189           },
       
   190           b'permissions': [
       
   191             b'pull'
       
   192           ]
       
   193         },
       
   194         b'listkeys': {
       
   195           b'args': {
       
   196             b'namespace': {
       
   197               b'required': True,
       
   198               b'type': b'bytes'
       
   199             }
       
   200           },
       
   201           b'permissions': [
       
   202             b'pull'
       
   203           ]
       
   204         },
       
   205         b'lookup': {
       
   206           b'args': {
       
   207             b'key': {
       
   208               b'required': True,
       
   209               b'type': b'bytes'
       
   210             }
       
   211           },
       
   212           b'permissions': [
       
   213             b'pull'
       
   214           ]
       
   215         },
       
   216         b'manifestdata': {
       
   217           b'args': {
       
   218             b'fields': {
       
   219               b'default': set([]),
       
   220               b'required': False,
       
   221               b'type': b'set',
       
   222               b'validvalues': set([
       
   223                 b'parents',
       
   224                 b'revision'
       
   225               ])
       
   226             },
       
   227             b'haveparents': {
       
   228               b'default': False,
       
   229               b'required': False,
       
   230               b'type': b'bool'
       
   231             },
       
   232             b'nodes': {
       
   233               b'required': True,
       
   234               b'type': b'list'
       
   235             },
       
   236             b'tree': {
       
   237               b'required': True,
       
   238               b'type': b'bytes'
       
   239             }
       
   240           },
       
   241           b'permissions': [
       
   242             b'pull'
       
   243           ]
       
   244         },
       
   245         b'pushkey': {
       
   246           b'args': {
       
   247             b'key': {
       
   248               b'required': True,
       
   249               b'type': b'bytes'
       
   250             },
       
   251             b'namespace': {
       
   252               b'required': True,
       
   253               b'type': b'bytes'
       
   254             },
       
   255             b'new': {
       
   256               b'required': True,
       
   257               b'type': b'bytes'
       
   258             },
       
   259             b'old': {
       
   260               b'required': True,
       
   261               b'type': b'bytes'
       
   262             }
       
   263           },
       
   264           b'permissions': [
       
   265             b'push'
       
   266           ]
       
   267         }
       
   268       },
       
   269       b'compression': [
       
   270         {
       
   271           b'name': b'zstd'
       
   272         },
       
   273         {
       
   274           b'name': b'zlib'
       
   275         }
       
   276       ],
       
   277       b'framingmediatypes': [
       
   278         b'application/mercurial-exp-framing-0005'
       
   279       ],
       
   280       b'pathfilterprefixes': set([
       
   281         b'path:',
       
   282         b'rootfilesin:'
       
   283       ]),
       
   284       b'rawrepoformats': [
       
   285         b'generaldelta',
       
   286         b'revlogv1'
       
   287       ],
       
   288       b'redirect': {
       
   289         b'hashes': [
       
   290           b'sha256',
       
   291           b'sha1'
       
   292         ],
       
   293         b'targets': [
       
   294           {
       
   295             b'name': b'target-a',
       
   296             b'protocol': b'http',
       
   297             b'snirequired': False,
       
   298             b'tlsversions': [
       
   299               b'1.2',
       
   300               b'1.3'
       
   301             ],
       
   302             b'uris': [
       
   303               b'http://example.com/'
       
   304             ]
       
   305           }
       
   306         ]
       
   307       }
       
   308     }
       
   309   ]
       
   310 
       
   311   $ cat > redirects.py << EOF
       
   312   > [
       
   313   >   {
       
   314   >     b'name': b'target-a',
       
   315   >     b'protocol': b'http',
       
   316   >     b'uris': [b'http://example.com/'],
       
   317   >   },
       
   318   >   {
       
   319   >     b'name': b'target-b',
       
   320   >     b'protocol': b'unknown',
       
   321   >     b'uris': [b'unknown://example.com/'],
       
   322   >   },
       
   323   > ]
       
   324   > EOF
       
   325 
       
   326   $ sendhttpv2peerhandshake << EOF
       
   327   > command capabilities
       
   328   > EOF
       
   329   creating http peer for wire protocol version 2
       
   330   s>     GET /?cmd=capabilities HTTP/1.1\r\n
       
   331   s>     Accept-Encoding: identity\r\n
       
   332   s>     vary: X-HgProto-1,X-HgUpgrade-1\r\n
       
   333   s>     x-hgproto-1: cbor\r\n
       
   334   s>     x-hgupgrade-1: exp-http-v2-0002\r\n
       
   335   s>     accept: application/mercurial-0.1\r\n
       
   336   s>     host: $LOCALIP:$HGPORT\r\n (glob)
       
   337   s>     user-agent: Mercurial debugwireproto\r\n
       
   338   s>     \r\n
       
   339   s> makefile('rb', None)
       
   340   s>     HTTP/1.1 200 OK\r\n
       
   341   s>     Server: testing stub value\r\n
       
   342   s>     Date: $HTTP_DATE$\r\n
       
   343   s>     Content-Type: application/mercurial-cbor\r\n
       
   344   s>     Content-Length: 1997\r\n
       
   345   s>     \r\n
       
   346   s>     \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0002\xa6Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionInoderange\xa3Gdefault\xf6Hrequired\xf4DtypeDlistEnodes\xa3Gdefault\xf6Hrequired\xf4DtypeDlistJnodesdepth\xa3Gdefault\xf6Hrequired\xf4DtypeCintKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullGpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushKcompression\x82\xa1DnameDzstd\xa1DnameDzlibQframingmediatypes\x81X&application/mercurial-exp-framing-0005Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x82\xa3DnameHtarget-aHprotocolDhttpDuris\x81Shttp://example.com/\xa3DnameHtarget-bHprotocolGunknownDuris\x81Vunknown://example.com/Nv1capabilitiesY\x01\xd8batch branchmap $USUAL_BUNDLE2_CAPS$ changegroupsubset compression=$BUNDLE2_COMPRESSIONS$ getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
       
   347   sending capabilities command
       
   348   s>     POST /api/exp-http-v2-0002/ro/capabilities HTTP/1.1\r\n
       
   349   s>     Accept-Encoding: identity\r\n
       
   350   s>     accept: application/mercurial-exp-framing-0005\r\n
       
   351   s>     content-type: application/mercurial-exp-framing-0005\r\n
       
   352   s>     content-length: 27\r\n
       
   353   s>     host: $LOCALIP:$HGPORT\r\n (glob)
       
   354   s>     user-agent: Mercurial debugwireproto\r\n
       
   355   s>     \r\n
       
   356   s>     \x13\x00\x00\x01\x00\x01\x01\x11\xa1DnameLcapabilities
       
   357   s> makefile('rb', None)
       
   358   s>     HTTP/1.1 200 OK\r\n
       
   359   s>     Server: testing stub value\r\n
       
   360   s>     Date: $HTTP_DATE$\r\n
       
   361   s>     Content-Type: application/mercurial-exp-framing-0005\r\n
       
   362   s>     Transfer-Encoding: chunked\r\n
       
   363   s>     \r\n
       
   364   s>     13\r\n
       
   365   s>     \x0b\x00\x00\x01\x00\x02\x011
       
   366   s>     \xa1FstatusBok
       
   367   s>     \r\n
       
   368   received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
       
   369   s>     5c6\r\n
       
   370   s>     \xbe\x05\x00\x01\x00\x02\x001
       
   371   s>     \xa6Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionInoderange\xa3Gdefault\xf6Hrequired\xf4DtypeDlistEnodes\xa3Gdefault\xf6Hrequired\xf4DtypeDlistJnodesdepth\xa3Gdefault\xf6Hrequired\xf4DtypeCintKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullGpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushKcompression\x82\xa1DnameDzstd\xa1DnameDzlibQframingmediatypes\x81X&application/mercurial-exp-framing-0005Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x82\xa3DnameHtarget-aHprotocolDhttpDuris\x81Shttp://example.com/\xa3DnameHtarget-bHprotocolGunknownDuris\x81Vunknown://example.com/
       
   372   s>     \r\n
       
   373   received frame(size=1470; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
       
   374   s>     8\r\n
       
   375   s>     \x00\x00\x00\x01\x00\x02\x002
       
   376   s>     \r\n
       
   377   s>     0\r\n
       
   378   s>     \r\n
       
   379   received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
       
   380   response: gen[
       
   381     {
       
   382       b'commands': {
       
   383         b'branchmap': {
       
   384           b'args': {},
       
   385           b'permissions': [
       
   386             b'pull'
       
   387           ]
       
   388         },
       
   389         b'capabilities': {
       
   390           b'args': {},
       
   391           b'permissions': [
       
   392             b'pull'
       
   393           ]
       
   394         },
       
   395         b'changesetdata': {
       
   396           b'args': {
       
   397             b'fields': {
       
   398               b'default': set([]),
       
   399               b'required': False,
       
   400               b'type': b'set',
       
   401               b'validvalues': set([
       
   402                 b'bookmarks',
       
   403                 b'parents',
       
   404                 b'phase',
       
   405                 b'revision'
       
   406               ])
       
   407             },
       
   408             b'noderange': {
       
   409               b'default': None,
       
   410               b'required': False,
       
   411               b'type': b'list'
       
   412             },
       
   413             b'nodes': {
       
   414               b'default': None,
       
   415               b'required': False,
       
   416               b'type': b'list'
       
   417             },
       
   418             b'nodesdepth': {
       
   419               b'default': None,
       
   420               b'required': False,
       
   421               b'type': b'int'
       
   422             }
       
   423           },
       
   424           b'permissions': [
       
   425             b'pull'
       
   426           ]
       
   427         },
       
   428         b'filedata': {
       
   429           b'args': {
       
   430             b'fields': {
       
   431               b'default': set([]),
       
   432               b'required': False,
       
   433               b'type': b'set',
       
   434               b'validvalues': set([
       
   435                 b'parents',
       
   436                 b'revision'
       
   437               ])
       
   438             },
       
   439             b'haveparents': {
       
   440               b'default': False,
       
   441               b'required': False,
       
   442               b'type': b'bool'
       
   443             },
       
   444             b'nodes': {
       
   445               b'required': True,
       
   446               b'type': b'list'
       
   447             },
       
   448             b'path': {
       
   449               b'required': True,
       
   450               b'type': b'bytes'
       
   451             }
       
   452           },
       
   453           b'permissions': [
       
   454             b'pull'
       
   455           ]
       
   456         },
       
   457         b'heads': {
       
   458           b'args': {
       
   459             b'publiconly': {
       
   460               b'default': False,
       
   461               b'required': False,
       
   462               b'type': b'bool'
       
   463             }
       
   464           },
       
   465           b'permissions': [
       
   466             b'pull'
       
   467           ]
       
   468         },
       
   469         b'known': {
       
   470           b'args': {
       
   471             b'nodes': {
       
   472               b'default': [],
       
   473               b'required': False,
       
   474               b'type': b'list'
       
   475             }
       
   476           },
       
   477           b'permissions': [
       
   478             b'pull'
       
   479           ]
       
   480         },
       
   481         b'listkeys': {
       
   482           b'args': {
       
   483             b'namespace': {
       
   484               b'required': True,
       
   485               b'type': b'bytes'
       
   486             }
       
   487           },
       
   488           b'permissions': [
       
   489             b'pull'
       
   490           ]
       
   491         },
       
   492         b'lookup': {
       
   493           b'args': {
       
   494             b'key': {
       
   495               b'required': True,
       
   496               b'type': b'bytes'
       
   497             }
       
   498           },
       
   499           b'permissions': [
       
   500             b'pull'
       
   501           ]
       
   502         },
       
   503         b'manifestdata': {
       
   504           b'args': {
       
   505             b'fields': {
       
   506               b'default': set([]),
       
   507               b'required': False,
       
   508               b'type': b'set',
       
   509               b'validvalues': set([
       
   510                 b'parents',
       
   511                 b'revision'
       
   512               ])
       
   513             },
       
   514             b'haveparents': {
       
   515               b'default': False,
       
   516               b'required': False,
       
   517               b'type': b'bool'
       
   518             },
       
   519             b'nodes': {
       
   520               b'required': True,
       
   521               b'type': b'list'
       
   522             },
       
   523             b'tree': {
       
   524               b'required': True,
       
   525               b'type': b'bytes'
       
   526             }
       
   527           },
       
   528           b'permissions': [
       
   529             b'pull'
       
   530           ]
       
   531         },
       
   532         b'pushkey': {
       
   533           b'args': {
       
   534             b'key': {
       
   535               b'required': True,
       
   536               b'type': b'bytes'
       
   537             },
       
   538             b'namespace': {
       
   539               b'required': True,
       
   540               b'type': b'bytes'
       
   541             },
       
   542             b'new': {
       
   543               b'required': True,
       
   544               b'type': b'bytes'
       
   545             },
       
   546             b'old': {
       
   547               b'required': True,
       
   548               b'type': b'bytes'
       
   549             }
       
   550           },
       
   551           b'permissions': [
       
   552             b'push'
       
   553           ]
       
   554         }
       
   555       },
       
   556       b'compression': [
       
   557         {
       
   558           b'name': b'zstd'
       
   559         },
       
   560         {
       
   561           b'name': b'zlib'
       
   562         }
       
   563       ],
       
   564       b'framingmediatypes': [
       
   565         b'application/mercurial-exp-framing-0005'
       
   566       ],
       
   567       b'pathfilterprefixes': set([
       
   568         b'path:',
       
   569         b'rootfilesin:'
       
   570       ]),
       
   571       b'rawrepoformats': [
       
   572         b'generaldelta',
       
   573         b'revlogv1'
       
   574       ],
       
   575       b'redirect': {
       
   576         b'hashes': [
       
   577           b'sha256',
       
   578           b'sha1'
       
   579         ],
       
   580         b'targets': [
       
   581           {
       
   582             b'name': b'target-a',
       
   583             b'protocol': b'http',
       
   584             b'uris': [
       
   585               b'http://example.com/'
       
   586             ]
       
   587           },
       
   588           {
       
   589             b'name': b'target-b',
       
   590             b'protocol': b'unknown',
       
   591             b'uris': [
       
   592               b'unknown://example.com/'
       
   593             ]
       
   594           }
       
   595         ]
       
   596       }
       
   597     }
       
   598   ]
       
   599 
       
   600   $ cat error.log
       
   601   $ killdaemons.py