tests/test-wireproto-command-branchmap.t
author Boris Feld <boris.feld@octobus.net>
Wed, 26 Sep 2018 23:50:14 +0200
changeset 40043 208303a8172c
parent 40035 393e44324037
child 40049 a732d70253b0
permissions -rw-r--r--
obsolete: explicitly track folds inside the markers We now record information to be able to recognize "fold" event from obsolescence markers. To do so, we track the following pieces of information: a) a fold ID. Unique to that fold (per successor), b) the number of predecessors, c) the index of the predecessor in that fold. We will now be able to create an algorithm able to find "predecessorssets". We now store this data in the generic "metadata" field of the markers. Updating the format to have a more compact storage for this would be useful. This way of tracking a fold through multiple markers could be applied to split too. This would have two advantages: 1) We get a simpler format, since number of successors is limited to [0-1]. 2) We can better deal with situations where only some of the split successors are pushed to a remote repository. We should look into the relevance of such a change before updating the on-disk format. note: unlike splits, folds do not have to deal with cases where only some of the markers have been synchronized. As they all share the same successor changesets, they are all relevant to the same nodes.

  $ . $TESTDIR/wireprotohelpers.sh

  $ hg init server
  $ enablehttpv2 server
  $ cd server
  $ hg debugdrawdag << EOF
  > C D
  > |/
  > B
  > |
  > A
  > EOF

  $ hg up B
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg branch branch1
  marked working directory as branch branch1
  (branches are permanent and global, did you want a bookmark?)
  $ echo b1 > foo
  $ hg -q commit -A -m 'branch 1'
  $ hg up B
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ hg branch branch2
  marked working directory as branch branch2
  $ echo b2 > foo
  $ hg -q commit -A -m 'branch 2'

  $ hg log -T '{rev}:{node} {branch} {desc}\n'
  5:224161c7589aa48fa83a48feff5e95b56ae327fc branch2 branch 2
  4:b5faacdfd2633768cb3152336cc0953381266688 branch1 branch 1
  3:be0ef73c17ade3fc89dc41701eb9fc3a91b58282 default D
  2:26805aba1e600a82e93661149f2313866a221a7b default C
  1:112478962961147124edd43549aedd1a335e44bf default B
  0:426bada5c67598ca65036d57d9e4b64b0c1ce7a0 default A

  $ hg serve -p $HGPORT -d --pid-file hg.pid -E error.log
  $ cat hg.pid > $DAEMON_PIDS

No arguments returns something reasonable

  $ sendhttpv2peer << EOF
  > command branchmap
  > EOF
  creating http peer for wire protocol version 2
  sending branchmap command
  s>     POST /api/exp-http-v2-0002/ro/branchmap HTTP/1.1\r\n
  s>     Accept-Encoding: identity\r\n
  s>     accept: application/mercurial-exp-framing-0005\r\n
  s>     content-type: application/mercurial-exp-framing-0005\r\n
  s>     content-length: 24\r\n
  s>     host: $LOCALIP:$HGPORT\r\n (glob)
  s>     user-agent: Mercurial debugwireproto\r\n
  s>     \r\n
  s>     \x10\x00\x00\x01\x00\x01\x01\x11\xa1DnameIbranchmap
  s> makefile('rb', None)
  s>     HTTP/1.1 200 OK\r\n
  s>     Server: testing stub value\r\n
  s>     Date: $HTTP_DATE$\r\n
  s>     Content-Type: application/mercurial-exp-framing-0005\r\n
  s>     Transfer-Encoding: chunked\r\n
  s>     \r\n
  s>     13\r\n
  s>     \x0b\x00\x00\x01\x00\x02\x011
  s>     \xa1FstatusBok
  s>     \r\n
  received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
  s>     78\r\n
  s>     p\x00\x00\x01\x00\x02\x001
  s>     \xa3Gbranch1\x81T\xb5\xfa\xac\xdf\xd2c7h\xcb1R3l\xc0\x953\x81&f\x88Gbranch2\x81T"Aa\xc7X\x9a\xa4\x8f\xa8:H\xfe\xff^\x95\xb5j\xe3\'\xfcGdefault\x82T&\x80Z\xba\x1e`\n
  s>     \x82\xe96a\x14\x9f#\x13\x86j"\x1a{T\xbe\x0e\xf7<\x17\xad\xe3\xfc\x89\xdcAp\x1e\xb9\xfc:\x91\xb5\x82\x82
  s>     \r\n
  received frame(size=112; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
  s>     8\r\n
  s>     \x00\x00\x00\x01\x00\x02\x002
  s>     \r\n
  s>     0\r\n
  s>     \r\n
  received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
  response: {
    b'branch1': [
      b'\xb5\xfa\xac\xdf\xd2c7h\xcb1R3l\xc0\x953\x81&f\x88'
    ],
    b'branch2': [
      b'"Aa\xc7X\x9a\xa4\x8f\xa8:H\xfe\xff^\x95\xb5j\xe3\'\xfc'
    ],
    b'default': [
      b'&\x80Z\xba\x1e`\n\x82\xe96a\x14\x9f#\x13\x86j"\x1a{',
      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