##// END OF EJS Templates
exchangev2: fetch and apply bookmarks...
exchangev2: fetch and apply bookmarks This is pretty similar to phases data. We collect bookmarks data as we process records. Then at the end we make a call to the bookmarks subsystem to reflect the remote's bookmarks. Like phases, the code for handling bookmarks is vastly simpler than the previous wire protocol code because the server always transfers the full set of bookmarks when bookmarks are requested. We don't have to keep track of whether we requested bookmarks or not. Differential Revision: https://phab.mercurial-scm.org/D4486

File last commit:

r39671:349482d7 default
r39671:349482d7 default
Show More
test-wireproto-exchangev2.t
395 lines | 14.5 KiB | text/troff | Tads3Lexer
/ tests / test-wireproto-exchangev2.t
Gregory Szorc
exchangev2: start to implement pull with wire protocol v2...
r39665 Tests for wire protocol version 2 exchange.
Tests in this file should be folded into existing tests once protocol
v2 has enough features that it can be enabled via #testcase in existing
tests.
$ . $TESTDIR/wireprotohelpers.sh
$ enablehttpv2client
$ hg init server-simple
$ enablehttpv2 server-simple
$ cd server-simple
$ cat >> .hg/hgrc << EOF
> [phases]
> publish = false
> EOF
$ echo a0 > a
$ echo b0 > b
$ hg -q commit -A -m 'commit 0'
$ echo a1 > a
$ hg commit -m 'commit 1'
$ hg phase --public -r .
$ echo a2 > a
$ hg commit -m 'commit 2'
$ hg -q up -r 0
$ echo b1 > b
$ hg -q commit -m 'head 2 commit 1'
$ echo b2 > b
$ hg -q commit -m 'head 2 commit 2'
$ hg serve -p $HGPORT -d --pid-file hg.pid -E error.log
$ cat hg.pid > $DAEMON_PIDS
$ cd ..
Test basic clone
$ hg --debug clone -U http://localhost:$HGPORT client-simple
using http://localhost:$HGPORT/
sending capabilities command
query 1; heads
sending 2 commands
sending command heads: {}
sending command known: {
'nodes': []
}
received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
received frame(size=43; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
received frame(size=11; request=3; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=1; request=3; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos)
Gregory Szorc
exchangev2: fetch changeset revisions...
r39667 sending 1 commands
sending command changesetdata: {
'fields': set([
Gregory Szorc
exchangev2: fetch and apply bookmarks...
r39671 'bookmarks',
Gregory Szorc
exchangev2: fetch changeset revisions...
r39667 'parents',
Gregory Szorc
exchangev2: fetch and apply phases data...
r39669 'phase',
Gregory Szorc
exchangev2: fetch changeset revisions...
r39667 'revision'
]),
'noderange': [
[],
[
'\xca\xa2\xa4eE\x1d\xd1\xfa\xcd\xa0\xf5\xb1#\x12\xc3UXA\x88\xa1',
'\xcd%4vk\xec\xe18\xc7\xc1\xaf\xdch%0/\x0fb\xd8\x1f'
]
]
}
received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
Gregory Szorc
exchangev2: fetch and apply phases data...
r39669 received frame(size=871; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
Gregory Szorc
exchangev2: fetch changeset revisions...
r39667 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
add changeset 3390ef850073
add changeset 4432d83626e8
add changeset cd2534766bec
add changeset e96ae20f4188
add changeset caa2a465451d
Gregory Szorc
exchangev2: fetch and apply bookmarks...
r39671 checking for updated bookmarks
Gregory Szorc
exchangev2: fetch changeset revisions...
r39667 updating the branch cache
Gregory Szorc
exchangev2: fetch and apply phases data...
r39669 new changesets 3390ef850073:caa2a465451d (3 drafts)
Gregory Szorc
exchangev2: fetch changeset revisions...
r39667
All changesets should have been transferred
$ hg -R client-simple debugindex -c
rev linkrev nodeid p1 p2
0 0 3390ef850073 000000000000 000000000000
1 1 4432d83626e8 3390ef850073 000000000000
2 2 cd2534766bec 4432d83626e8 000000000000
3 3 e96ae20f4188 3390ef850073 000000000000
4 4 caa2a465451d e96ae20f4188 000000000000
$ hg -R client-simple log -G -T '{rev} {node} {phase}\n'
Gregory Szorc
exchangev2: fetch and apply phases data...
r39669 o 4 caa2a465451dd1facda0f5b12312c355584188a1 draft
Gregory Szorc
exchangev2: fetch changeset revisions...
r39667 |
Gregory Szorc
exchangev2: fetch and apply phases data...
r39669 o 3 e96ae20f4188487b9ae4ef3941c27c81143146e5 draft
Gregory Szorc
exchangev2: fetch changeset revisions...
r39667 |
Gregory Szorc
exchangev2: fetch and apply phases data...
r39669 | o 2 cd2534766bece138c7c1afdc6825302f0f62d81f draft
Gregory Szorc
exchangev2: fetch changeset revisions...
r39667 | |
| o 1 4432d83626e8a98655f062ec1f2a43b07f7fbbb0 public
|/
o 0 3390ef850073fbc2f0dfff2244342c8e9229013a public
Cloning only a specific revision works
$ hg --debug clone -U -r 4432d83626e8 http://localhost:$HGPORT client-singlehead
using http://localhost:$HGPORT/
sending capabilities command
sending 1 commands
sending command lookup: {
'key': '4432d83626e8'
}
received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
received frame(size=21; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
query 1; heads
sending 2 commands
sending command heads: {}
sending command known: {
'nodes': []
}
received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
received frame(size=43; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
received frame(size=11; request=3; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=1; request=3; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos)
sending 1 commands
sending command changesetdata: {
'fields': set([
Gregory Szorc
exchangev2: fetch and apply bookmarks...
r39671 'bookmarks',
Gregory Szorc
exchangev2: fetch changeset revisions...
r39667 'parents',
Gregory Szorc
exchangev2: fetch and apply phases data...
r39669 'phase',
Gregory Szorc
exchangev2: fetch changeset revisions...
r39667 'revision'
]),
'noderange': [
[],
[
'D2\xd86&\xe8\xa9\x86U\xf0b\xec\x1f*C\xb0\x7f\x7f\xbb\xb0'
]
]
}
received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
Gregory Szorc
exchangev2: fetch and apply phases data...
r39669 received frame(size=353; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
Gregory Szorc
exchangev2: fetch changeset revisions...
r39667 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
add changeset 3390ef850073
add changeset 4432d83626e8
Gregory Szorc
exchangev2: fetch and apply bookmarks...
r39671 checking for updated bookmarks
Gregory Szorc
exchangev2: fetch changeset revisions...
r39667 updating the branch cache
new changesets 3390ef850073:4432d83626e8
$ cd client-singlehead
$ hg log -G -T '{rev} {node} {phase}\n'
o 1 4432d83626e8a98655f062ec1f2a43b07f7fbbb0 public
|
o 0 3390ef850073fbc2f0dfff2244342c8e9229013a public
Incremental pull works
$ hg --debug pull
pulling from http://localhost:$HGPORT/
using http://localhost:$HGPORT/
sending capabilities command
query 1; heads
sending 2 commands
sending command heads: {}
sending command known: {
'nodes': [
'D2\xd86&\xe8\xa9\x86U\xf0b\xec\x1f*C\xb0\x7f\x7f\xbb\xb0'
]
}
received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
received frame(size=43; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
received frame(size=11; request=3; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=2; request=3; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos)
searching for changes
all local heads known remotely
sending 1 commands
sending command changesetdata: {
'fields': set([
Gregory Szorc
exchangev2: fetch and apply bookmarks...
r39671 'bookmarks',
Gregory Szorc
exchangev2: fetch changeset revisions...
r39667 'parents',
Gregory Szorc
exchangev2: fetch and apply phases data...
r39669 'phase',
Gregory Szorc
exchangev2: fetch changeset revisions...
r39667 'revision'
]),
'noderange': [
[
'D2\xd86&\xe8\xa9\x86U\xf0b\xec\x1f*C\xb0\x7f\x7f\xbb\xb0'
],
[
'\xca\xa2\xa4eE\x1d\xd1\xfa\xcd\xa0\xf5\xb1#\x12\xc3UXA\x88\xa1',
'\xcd%4vk\xec\xe18\xc7\xc1\xaf\xdch%0/\x0fb\xd8\x1f'
]
]
}
received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
Gregory Szorc
exchangev2: fetch and apply phases data...
r39669 received frame(size=571; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
Gregory Szorc
exchangev2: fetch changeset revisions...
r39667 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
add changeset cd2534766bec
add changeset e96ae20f4188
add changeset caa2a465451d
Gregory Szorc
exchangev2: fetch and apply bookmarks...
r39671 checking for updated bookmarks
Gregory Szorc
exchangev2: fetch changeset revisions...
r39667 updating the branch cache
Gregory Szorc
exchangev2: fetch and apply phases data...
r39669 new changesets cd2534766bec:caa2a465451d (3 drafts)
(run 'hg update' to get a working copy)
$ hg log -G -T '{rev} {node} {phase}\n'
o 4 caa2a465451dd1facda0f5b12312c355584188a1 draft
|
o 3 e96ae20f4188487b9ae4ef3941c27c81143146e5 draft
|
| o 2 cd2534766bece138c7c1afdc6825302f0f62d81f draft
| |
| o 1 4432d83626e8a98655f062ec1f2a43b07f7fbbb0 public
|/
o 0 3390ef850073fbc2f0dfff2244342c8e9229013a public
Phase-only update works
$ hg -R ../server-simple phase --public -r caa2a465451dd
$ hg --debug pull
pulling from http://localhost:$HGPORT/
using http://localhost:$HGPORT/
sending capabilities command
query 1; heads
sending 2 commands
sending command heads: {}
sending command known: {
'nodes': [
'\xcd%4vk\xec\xe18\xc7\xc1\xaf\xdch%0/\x0fb\xd8\x1f',
'\xca\xa2\xa4eE\x1d\xd1\xfa\xcd\xa0\xf5\xb1#\x12\xc3UXA\x88\xa1'
]
}
received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
received frame(size=43; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
received frame(size=11; request=3; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=3; request=3; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos)
searching for changes
all remote heads known locally
sending 1 commands
sending command changesetdata: {
'fields': set([
Gregory Szorc
exchangev2: fetch and apply bookmarks...
r39671 'bookmarks',
Gregory Szorc
exchangev2: fetch and apply phases data...
r39669 'parents',
'phase',
'revision'
]),
'noderange': [
[
'\xca\xa2\xa4eE\x1d\xd1\xfa\xcd\xa0\xf5\xb1#\x12\xc3UXA\x88\xa1',
'\xcd%4vk\xec\xe18\xc7\xc1\xaf\xdch%0/\x0fb\xd8\x1f'
],
[
'\xca\xa2\xa4eE\x1d\xd1\xfa\xcd\xa0\xf5\xb1#\x12\xc3UXA\x88\xa1',
'\xcd%4vk\xec\xe18\xc7\xc1\xaf\xdch%0/\x0fb\xd8\x1f'
]
]
}
received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
received frame(size=92; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
Gregory Szorc
exchangev2: fetch and apply bookmarks...
r39671 checking for updated bookmarks
Gregory Szorc
exchangev2: fetch and apply phases data...
r39669 2 local changesets published
Gregory Szorc
exchangev2: fetch changeset revisions...
r39667 (run 'hg update' to get a working copy)
$ hg log -G -T '{rev} {node} {phase}\n'
o 4 caa2a465451dd1facda0f5b12312c355584188a1 public
|
o 3 e96ae20f4188487b9ae4ef3941c27c81143146e5 public
|
Gregory Szorc
exchangev2: fetch and apply phases data...
r39669 | o 2 cd2534766bece138c7c1afdc6825302f0f62d81f draft
Gregory Szorc
exchangev2: fetch changeset revisions...
r39667 | |
| o 1 4432d83626e8a98655f062ec1f2a43b07f7fbbb0 public
|/
o 0 3390ef850073fbc2f0dfff2244342c8e9229013a public
$ cd ..
Gregory Szorc
exchangev2: fetch and apply bookmarks...
r39671
Bookmarks are transferred on clone
$ hg -R server-simple bookmark -r 3390ef850073fbc2f0dfff2244342c8e9229013a book-1
$ hg -R server-simple bookmark -r cd2534766bece138c7c1afdc6825302f0f62d81f book-2
$ hg --debug clone -U http://localhost:$HGPORT/ client-bookmarks
using http://localhost:$HGPORT/
sending capabilities command
query 1; heads
sending 2 commands
sending command heads: {}
sending command known: {
'nodes': []
}
received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
received frame(size=43; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
received frame(size=11; request=3; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=1; request=3; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos)
sending 1 commands
sending command changesetdata: {
'fields': set([
'bookmarks',
'parents',
'phase',
'revision'
]),
'noderange': [
[],
[
'\xca\xa2\xa4eE\x1d\xd1\xfa\xcd\xa0\xf5\xb1#\x12\xc3UXA\x88\xa1',
'\xcd%4vk\xec\xe18\xc7\xc1\xaf\xdch%0/\x0fb\xd8\x1f'
]
]
}
received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
received frame(size=909; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
add changeset 3390ef850073
add changeset 4432d83626e8
add changeset cd2534766bec
add changeset e96ae20f4188
add changeset caa2a465451d
checking for updated bookmarks
adding remote bookmark book-1
adding remote bookmark book-2
updating the branch cache
new changesets 3390ef850073:caa2a465451d (1 drafts)
$ hg -R client-bookmarks bookmarks
book-1 0:3390ef850073
book-2 2:cd2534766bec
Server-side bookmark moves are reflected during `hg pull`
$ hg -R server-simple bookmark -r cd2534766bece138c7c1afdc6825302f0f62d81f book-1
moving bookmark 'book-1' forward from 3390ef850073
$ hg -R client-bookmarks --debug pull
pulling from http://localhost:$HGPORT/
using http://localhost:$HGPORT/
sending capabilities command
query 1; heads
sending 2 commands
sending command heads: {}
sending command known: {
'nodes': [
'\xcd%4vk\xec\xe18\xc7\xc1\xaf\xdch%0/\x0fb\xd8\x1f',
'\xca\xa2\xa4eE\x1d\xd1\xfa\xcd\xa0\xf5\xb1#\x12\xc3UXA\x88\xa1'
]
}
received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
received frame(size=43; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
received frame(size=11; request=3; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=3; request=3; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos)
searching for changes
all remote heads known locally
sending 1 commands
sending command changesetdata: {
'fields': set([
'bookmarks',
'parents',
'phase',
'revision'
]),
'noderange': [
[
'\xca\xa2\xa4eE\x1d\xd1\xfa\xcd\xa0\xf5\xb1#\x12\xc3UXA\x88\xa1',
'\xcd%4vk\xec\xe18\xc7\xc1\xaf\xdch%0/\x0fb\xd8\x1f'
],
[
'\xca\xa2\xa4eE\x1d\xd1\xfa\xcd\xa0\xf5\xb1#\x12\xc3UXA\x88\xa1',
'\xcd%4vk\xec\xe18\xc7\xc1\xaf\xdch%0/\x0fb\xd8\x1f'
]
]
}
received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
received frame(size=144; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
checking for updated bookmarks
updating bookmark book-1
(run 'hg update' to get a working copy)
$ hg -R client-bookmarks bookmarks
book-1 2:cd2534766bec
book-2 2:cd2534766bec