view tests/test-wireproto-command-branchmap.t @ 40923:3ed77780f4a6

wireprotov2: send linknodes to emitfilerevisions() Previously, linknodes were calculated within emitfilerevisions() by using filectx.introrev(), which would always use the linkrev/linknode as recorded by storage. This is wrong for cases where the receiver doesn't have the changeset the linknode refers to. This commit changes the logic for linknode emission so the mapping of filenode to linknode is computed by the caller and passed into emitfilerevisions(). As part of the change, linknodes for "filesdata" in the haveparents=False case are now correct: the existing code performed a manifest walk and it was trivial to plug in the correct linknode. However, behavior for the haveparents=True case is still wrong because it relies on filtering linkrevs against the outgoing set in order to determine what to send. This will be fixed in a subsequent commit. The change test test-wireproto-exchangev2-shallow.t is a bit wonky. The test repo has 6 revisions. The changed test is performing a shallow clone with depth=1. So, only file data for revision 5 is present locally. So, the new behavior of associating the linknode with revision 5 for every file revision seems correct. Of course, when backfilling old revisions, we'll want to update the linknode. But this problem requires wire protocol support and we'll cross that bridge later. Differential Revision: https://phab.mercurial-scm.org/D5405
author Gregory Szorc <gregory.szorc@gmail.com>
date Mon, 10 Dec 2018 18:04:12 +0000
parents a732d70253b0
children
line wrap: on
line source

  $ . $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
  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'
    ]
  }

  $ cat error.log