##// END OF EJS Templates
localrepo: use context manager for lock and transaction in commitctx()...
localrepo: use context manager for lock and transaction in commitctx() Differential Revision: https://phab.mercurial-scm.org/D5624

File last commit:

r40958:ca6372b7 default
r41400:0132221c default
Show More
test-wireproto-command-filedata.t
364 lines | 10.4 KiB | text/troff | Tads3Lexer
/ tests / test-wireproto-command-filedata.t
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 $ . $TESTDIR/wireprotohelpers.sh
$ hg init server
$ enablehttpv2 server
$ cd server
Gregory Szorc
tests: use more complex file storage test...
r39899 $ cat > a << EOF
> a0
> 00000000000000000000000000000000000000
> 11111111111111111111111111111111111111
> EOF
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 $ echo b0 > b
$ mkdir -p dir0/child0 dir0/child1 dir1
$ echo c0 > dir0/c
$ echo d0 > dir0/d
$ echo e0 > dir0/child0/e
$ echo f0 > dir0/child1/f
$ hg -q commit -A -m 'commit 0'
Gregory Szorc
tests: use more complex file storage test...
r39899 $ echo a1 >> a
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 $ echo d1 > dir0/d
$ hg commit -m 'commit 1'
Gregory Szorc
tests: fix empty commit in test...
r40957 $ echo f1 > dir0/child1/f
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 $ hg commit -m 'commit 2'
$ hg -q up -r 0
Gregory Szorc
tests: use more complex file storage test...
r39899 $ echo a2 >> a
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 $ hg commit -m 'commit 3'
created new head
Gregory Szorc
tests: add tests for server-side linknode adjustment with wireprotov2...
r40958 Create multiple heads introducing the same changeset
$ hg -q up -r 0
$ echo foo > dupe-file
$ hg commit -Am 'dupe 1'
adding dupe-file
created new head
$ hg -q up -r 0
$ echo foo > dupe-file
$ hg commit -Am 'dupe 2'
adding dupe-file
created new head
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 $ hg log -G -T '{rev}:{node} {desc}\n'
Gregory Szorc
tests: add tests for server-side linknode adjustment with wireprotov2...
r40958 @ 5:732c3dd7bee94242de656000e5f458e7ccfe2828 dupe 2
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 |
Gregory Szorc
tests: add tests for server-side linknode adjustment with wireprotov2...
r40958 | o 4:4334f10897d13c3e8beb4b636f7272b4ec2d0322 dupe 1
|/
| o 3:5ce944d7fece1252dae06c34422b573c191b9489 commit 3
|/
Gregory Szorc
tests: fix empty commit in test...
r40957 | o 2:b3c27db01410dae01e5485d425b1440078df540c commit 2
| |
Gregory Szorc
tests: use more complex file storage test...
r39899 | o 1:3ef5e551f219ba505481d34d6b0316b017fa3f00 commit 1
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 |/
Gregory Szorc
tests: use more complex file storage test...
r39899 o 0:91b232a2253ce0638496f67bdfd7a4933fb51b25 commit 0
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675
$ hg --debug debugindex a
rev linkrev nodeid p1 p2
Gregory Szorc
tests: use more complex file storage test...
r39899 0 0 649d149df43d83882523b7fb1e6a3af6f1907b39 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
1 1 0a86321f1379d1a9ecd0579a22977af7a5acaf11 649d149df43d83882523b7fb1e6a3af6f1907b39 0000000000000000000000000000000000000000
Gregory Szorc
tests: fix empty commit in test...
r40957 2 3 7e5801b6d5f03a5a54f3c47b583f7567aad43e5b 649d149df43d83882523b7fb1e6a3af6f1907b39 0000000000000000000000000000000000000000
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675
$ hg --debug debugindex dir0/child0/e
rev linkrev nodeid p1 p2
0 0 bbba6c06b30f443d34ff841bc985c4d0827c6be4 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
Gregory Szorc
tests: add tests for server-side linknode adjustment with wireprotov2...
r40958 $ hg --debug debugindex dupe-file
rev linkrev nodeid p1 p2
0 4 2ed2a3912a0b24502043eae84ee4b279c18b90dd 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 $ hg serve -p $HGPORT -d --pid-file hg.pid -E error.log
$ cat hg.pid > $DAEMON_PIDS
Missing arguments is an error
$ sendhttpv2peer << EOF
> command filedata
> EOF
creating http peer for wire protocol version 2
sending filedata command
Gregory Szorc
wireprotov2: declare command arguments richly...
r39835 abort: missing required arguments: nodes, path!
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 [255]
$ sendhttpv2peer << EOF
> command filedata
> nodes eval:[]
> EOF
creating http peer for wire protocol version 2
sending filedata command
Gregory Szorc
wireprotov2: declare command arguments richly...
r39835 abort: missing required arguments: path!
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 [255]
Unknown node is an error
$ sendhttpv2peer << EOF
> command filedata
> nodes eval:[b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa']
> path eval:b'a'
> EOF
creating http peer for wire protocol version 2
sending filedata command
abort: unknown file node: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!
[255]
Fetching a single revision returns just metadata by default
$ sendhttpv2peer << EOF
> command filedata
Gregory Szorc
tests: use more complex file storage test...
r39899 > nodes eval:[b'\x0a\x86\x32\x1f\x13\x79\xd1\xa9\xec\xd0\x57\x9a\x22\x97\x7a\xf7\xa5\xac\xaf\x11']
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 > path eval:b'a'
> EOF
creating http peer for wire protocol version 2
sending filedata command
response: gen[
{
b'totalitems': 1
},
{
Gregory Szorc
tests: use more complex file storage test...
r39899 b'node': b'\n\x862\x1f\x13y\xd1\xa9\xec\xd0W\x9a"\x97z\xf7\xa5\xac\xaf\x11'
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 }
]
Requesting parents works
$ sendhttpv2peer << EOF
> command filedata
Gregory Szorc
tests: use more complex file storage test...
r39899 > nodes eval:[b'\x0a\x86\x32\x1f\x13\x79\xd1\xa9\xec\xd0\x57\x9a\x22\x97\x7a\xf7\xa5\xac\xaf\x11']
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 > path eval:b'a'
> fields eval:[b'parents']
> EOF
creating http peer for wire protocol version 2
sending filedata command
response: gen[
{
b'totalitems': 1
},
{
Gregory Szorc
tests: use more complex file storage test...
r39899 b'node': b'\n\x862\x1f\x13y\xd1\xa9\xec\xd0W\x9a"\x97z\xf7\xa5\xac\xaf\x11',
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 b'parents': [
Gregory Szorc
tests: use more complex file storage test...
r39899 b'd\x9d\x14\x9d\xf4=\x83\x88%#\xb7\xfb\x1ej:\xf6\xf1\x90{9',
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
]
}
]
Requesting revision data works
Gregory Szorc
wireprotov2: let clients drive delta behavior...
r39677 (haveparents defaults to False, so fulltext is emitted)
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675
$ sendhttpv2peer << EOF
> command filedata
Gregory Szorc
tests: use more complex file storage test...
r39899 > nodes eval:[b'\x0a\x86\x32\x1f\x13\x79\xd1\xa9\xec\xd0\x57\x9a\x22\x97\x7a\xf7\xa5\xac\xaf\x11']
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 > path eval:b'a'
> fields eval:[b'revision']
> EOF
creating http peer for wire protocol version 2
sending filedata command
Gregory Szorc
wireprotov2: let clients drive delta behavior...
r39677 response: gen[
{
b'totalitems': 1
},
{
Gregory Szorc
wireprotov2: allow multiple fields to follow revision maps...
r39839 b'fieldsfollowing': [
[
b'revision',
Gregory Szorc
tests: use more complex file storage test...
r39899 84
Gregory Szorc
wireprotov2: allow multiple fields to follow revision maps...
r39839 ]
],
Gregory Szorc
tests: use more complex file storage test...
r39899 b'node': b'\n\x862\x1f\x13y\xd1\xa9\xec\xd0W\x9a"\x97z\xf7\xa5\xac\xaf\x11'
Gregory Szorc
wireprotov2: let clients drive delta behavior...
r39677 },
Gregory Szorc
tests: use more complex file storage test...
r39899 b'a0\n00000000000000000000000000000000000000\n11111111111111111111111111111111111111\na1\n'
Gregory Szorc
wireprotov2: let clients drive delta behavior...
r39677 ]
haveparents=False should be same as above
$ sendhttpv2peer << EOF
> command filedata
Gregory Szorc
tests: use more complex file storage test...
r39899 > nodes eval:[b'\x0a\x86\x32\x1f\x13\x79\xd1\xa9\xec\xd0\x57\x9a\x22\x97\x7a\xf7\xa5\xac\xaf\x11']
Gregory Szorc
wireprotov2: let clients drive delta behavior...
r39677 > path eval:b'a'
> fields eval:[b'revision']
> haveparents eval:False
> EOF
creating http peer for wire protocol version 2
sending filedata command
response: gen[
{
b'totalitems': 1
},
{
Gregory Szorc
wireprotov2: allow multiple fields to follow revision maps...
r39839 b'fieldsfollowing': [
[
b'revision',
Gregory Szorc
tests: use more complex file storage test...
r39899 84
Gregory Szorc
wireprotov2: allow multiple fields to follow revision maps...
r39839 ]
],
Gregory Szorc
tests: use more complex file storage test...
r39899 b'node': b'\n\x862\x1f\x13y\xd1\xa9\xec\xd0W\x9a"\x97z\xf7\xa5\xac\xaf\x11'
Gregory Szorc
wireprotov2: let clients drive delta behavior...
r39677 },
Gregory Szorc
tests: use more complex file storage test...
r39899 b'a0\n00000000000000000000000000000000000000\n11111111111111111111111111111111111111\na1\n'
Gregory Szorc
wireprotov2: let clients drive delta behavior...
r39677 ]
haveparents=True should emit a delta
$ sendhttpv2peer << EOF
> command filedata
Gregory Szorc
tests: use more complex file storage test...
r39899 > nodes eval:[b'\x0a\x86\x32\x1f\x13\x79\xd1\xa9\xec\xd0\x57\x9a\x22\x97\x7a\xf7\xa5\xac\xaf\x11']
Gregory Szorc
wireprotov2: let clients drive delta behavior...
r39677 > path eval:b'a'
> fields eval:[b'revision']
> haveparents eval:True
> EOF
creating http peer for wire protocol version 2
sending filedata command
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 response: gen[
{
b'totalitems': 1
},
{
Gregory Szorc
tests: use more complex file storage test...
r39899 b'deltabasenode': b'd\x9d\x14\x9d\xf4=\x83\x88%#\xb7\xfb\x1ej:\xf6\xf1\x90{9',
Gregory Szorc
wireprotov2: allow multiple fields to follow revision maps...
r39839 b'fieldsfollowing': [
[
b'delta',
15
]
],
Gregory Szorc
tests: use more complex file storage test...
r39899 b'node': b'\n\x862\x1f\x13y\xd1\xa9\xec\xd0W\x9a"\x97z\xf7\xa5\xac\xaf\x11'
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 },
Gregory Szorc
tests: use more complex file storage test...
r39899 b'\x00\x00\x00Q\x00\x00\x00Q\x00\x00\x00\x03a1\n'
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 ]
Requesting multiple revisions works
Gregory Szorc
wireprotov2: let clients drive delta behavior...
r39677 (first revision is a fulltext since haveparents=False by default)
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675
$ sendhttpv2peer << EOF
> command filedata
Gregory Szorc
tests: use more complex file storage test...
r39899 > nodes eval:[b'\x64\x9d\x14\x9d\xf4\x3d\x83\x88\x25\x23\xb7\xfb\x1e\x6a\x3a\xf6\xf1\x90\x7b\x39', b'\x0a\x86\x32\x1f\x13\x79\xd1\xa9\xec\xd0\x57\x9a\x22\x97\x7a\xf7\xa5\xac\xaf\x11']
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 > path eval:b'a'
> fields eval:[b'revision']
> EOF
creating http peer for wire protocol version 2
sending filedata command
response: gen[
{
b'totalitems': 2
},
{
Gregory Szorc
wireprotov2: allow multiple fields to follow revision maps...
r39839 b'fieldsfollowing': [
[
b'revision',
Gregory Szorc
tests: use more complex file storage test...
r39899 81
Gregory Szorc
wireprotov2: allow multiple fields to follow revision maps...
r39839 ]
],
Gregory Szorc
tests: use more complex file storage test...
r39899 b'node': b'd\x9d\x14\x9d\xf4=\x83\x88%#\xb7\xfb\x1ej:\xf6\xf1\x90{9'
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 },
Gregory Szorc
tests: use more complex file storage test...
r39899 b'a0\n00000000000000000000000000000000000000\n11111111111111111111111111111111111111\n',
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 {
Gregory Szorc
tests: use more complex file storage test...
r39899 b'deltabasenode': b'd\x9d\x14\x9d\xf4=\x83\x88%#\xb7\xfb\x1ej:\xf6\xf1\x90{9',
Gregory Szorc
wireprotov2: allow multiple fields to follow revision maps...
r39839 b'fieldsfollowing': [
[
b'delta',
15
]
],
Gregory Szorc
tests: use more complex file storage test...
r39899 b'node': b'\n\x862\x1f\x13y\xd1\xa9\xec\xd0W\x9a"\x97z\xf7\xa5\xac\xaf\x11'
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 },
Gregory Szorc
tests: use more complex file storage test...
r39899 b'\x00\x00\x00Q\x00\x00\x00Q\x00\x00\x00\x03a1\n'
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 ]
Revisions are sorted by DAG order, parents first
$ sendhttpv2peer << EOF
> command filedata
Gregory Szorc
tests: use more complex file storage test...
r39899 > nodes eval:[b'\x0a\x86\x32\x1f\x13\x79\xd1\xa9\xec\xd0\x57\x9a\x22\x97\x7a\xf7\xa5\xac\xaf\x11', b'\x64\x9d\x14\x9d\xf4\x3d\x83\x88\x25\x23\xb7\xfb\x1e\x6a\x3a\xf6\xf1\x90\x7b\x39']
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 > path eval:b'a'
> fields eval:[b'revision']
> EOF
creating http peer for wire protocol version 2
sending filedata command
response: gen[
{
b'totalitems': 2
},
{
Gregory Szorc
wireprotov2: allow multiple fields to follow revision maps...
r39839 b'fieldsfollowing': [
[
b'revision',
Gregory Szorc
tests: use more complex file storage test...
r39899 81
Gregory Szorc
wireprotov2: allow multiple fields to follow revision maps...
r39839 ]
],
Gregory Szorc
tests: use more complex file storage test...
r39899 b'node': b'd\x9d\x14\x9d\xf4=\x83\x88%#\xb7\xfb\x1ej:\xf6\xf1\x90{9'
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 },
Gregory Szorc
tests: use more complex file storage test...
r39899 b'a0\n00000000000000000000000000000000000000\n11111111111111111111111111111111111111\n',
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 {
Gregory Szorc
tests: use more complex file storage test...
r39899 b'deltabasenode': b'd\x9d\x14\x9d\xf4=\x83\x88%#\xb7\xfb\x1ej:\xf6\xf1\x90{9',
Gregory Szorc
wireprotov2: allow multiple fields to follow revision maps...
r39839 b'fieldsfollowing': [
[
b'delta',
15
]
],
Gregory Szorc
tests: use more complex file storage test...
r39899 b'node': b'\n\x862\x1f\x13y\xd1\xa9\xec\xd0W\x9a"\x97z\xf7\xa5\xac\xaf\x11'
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 },
Gregory Szorc
tests: use more complex file storage test...
r39899 b'\x00\x00\x00Q\x00\x00\x00Q\x00\x00\x00\x03a1\n'
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 ]
Requesting parents and revision data works
$ sendhttpv2peer << EOF
> command filedata
Gregory Szorc
tests: use more complex file storage test...
r39899 > nodes eval:[b'\x7e\x58\x01\xb6\xd5\xf0\x3a\x5a\x54\xf3\xc4\x7b\x58\x3f\x75\x67\xaa\xd4\x3e\x5b']
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 > path eval:b'a'
> fields eval:[b'parents', b'revision']
> EOF
creating http peer for wire protocol version 2
sending filedata command
response: gen[
{
b'totalitems': 1
},
{
Gregory Szorc
wireprotov2: allow multiple fields to follow revision maps...
r39839 b'fieldsfollowing': [
[
b'revision',
Gregory Szorc
tests: use more complex file storage test...
r39899 84
Gregory Szorc
wireprotov2: allow multiple fields to follow revision maps...
r39839 ]
],
Gregory Szorc
tests: use more complex file storage test...
r39899 b'node': b'~X\x01\xb6\xd5\xf0:ZT\xf3\xc4{X?ug\xaa\xd4>[',
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 b'parents': [
Gregory Szorc
tests: use more complex file storage test...
r39899 b'd\x9d\x14\x9d\xf4=\x83\x88%#\xb7\xfb\x1ej:\xf6\xf1\x90{9',
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
Gregory Szorc
wireprotov2: allow multiple fields to follow revision maps...
r39839 ]
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 },
Gregory Szorc
tests: use more complex file storage test...
r39899 b'a0\n00000000000000000000000000000000000000\n11111111111111111111111111111111111111\na2\n'
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 ]
Gregory Szorc
tests: add tests for server-side linknode adjustment with wireprotov2...
r40958 Linknode for duplicate revision is the initial revision
$ sendhttpv2peer << EOF
> command filedata
> nodes eval:[b'\x2e\xd2\xa3\x91\x2a\x0b\x24\x50\x20\x43\xea\xe8\x4e\xe4\xb2\x79\xc1\x8b\x90\xdd']
> path eval:b'dupe-file'
> fields eval:[b'linknode', b'parents', b'revision']
> EOF
creating http peer for wire protocol version 2
sending filedata command
response: gen[
{
b'totalitems': 1
},
{
b'fieldsfollowing': [
[
b'revision',
4
]
],
b'linknode': b'C4\xf1\x08\x97\xd1<>\x8b\xebKcorr\xb4\xec-\x03"',
b'node': b'.\xd2\xa3\x91*\x0b$P C\xea\xe8N\xe4\xb2y\xc1\x8b\x90\xdd',
b'parents': [
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
]
},
b'foo\n'
]
Gregory Szorc
wireprotov2: define and implement "filedata" command...
r39675 $ cat error.log