D4927: wireprotov2: send content encoded frames from server
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Wed Oct 10 14:59:12 UTC 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rHGb5bf3dd6ec5b: wireprotov2: send content encoded frames from server (authored by indygreg, committed by ).
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D4927?vs=11766&id=11791
REVISION DETAIL
https://phab.mercurial-scm.org/D4927
AFFECTED FILES
mercurial/wireprotoframing.py
mercurial/wireprotov2server.py
tests/test-http-api-httpv2.t
tests/test-http-protocol.t
tests/test-wireproto-command-capabilities.t
tests/test-wireproto-content-redirects.t
tests/test-wireproto-exchangev2.t
tests/test-wireproto-serverreactor.py
CHANGE DETAILS
diff --git a/tests/test-wireproto-serverreactor.py b/tests/test-wireproto-serverreactor.py
--- a/tests/test-wireproto-serverreactor.py
+++ b/tests/test-wireproto-serverreactor.py
@@ -371,8 +371,9 @@
outstream, 1, [b'response'])
self.assertaction(result, b'sendframes')
self.assertframesequal(result[1][b'framegen'], [
- b'1 2 stream-begin command-response continuation %s' % OK,
- b'1 2 0 command-response continuation cbor:b"response"',
+ b'1 2 stream-begin stream-settings eos cbor:b"identity"',
+ b'1 2 encoded command-response continuation %s' % OK,
+ b'1 2 encoded command-response continuation cbor:b"response"',
b'1 2 0 command-response eos ',
])
@@ -390,10 +391,11 @@
outstream, 1, [first + second])
self.assertaction(result, b'sendframes')
self.assertframesequal(result[1][b'framegen'], [
- b'1 2 stream-begin command-response continuation %s' % OK,
- b'1 2 0 command-response continuation Y\x80d',
- b'1 2 0 command-response continuation %s' % first,
- b'1 2 0 command-response continuation %s' % second,
+ b'1 2 stream-begin stream-settings eos cbor:b"identity"',
+ b'1 2 encoded command-response continuation %s' % OK,
+ b'1 2 encoded command-response continuation Y\x80d',
+ b'1 2 encoded command-response continuation %s' % first,
+ b'1 2 encoded command-response continuation %s' % second,
b'1 2 0 command-response eos '
])
@@ -427,8 +429,9 @@
result = reactor.oninputeof()
self.assertaction(result, b'sendframes')
self.assertframesequal(result[1][b'framegen'], [
- b'1 2 stream-begin command-response continuation %s' % OK,
- b'1 2 0 command-response continuation cbor:b"response"',
+ b'1 2 stream-begin stream-settings eos cbor:b"identity"',
+ b'1 2 encoded command-response continuation %s' % OK,
+ b'1 2 encoded command-response continuation cbor:b"response"',
b'1 2 0 command-response eos ',
])
@@ -448,11 +451,12 @@
result = reactor.oninputeof()
self.assertaction(result, b'sendframes')
self.assertframesequal(result[1][b'framegen'], [
- b'1 2 stream-begin command-response continuation %s' % OK,
- b'1 2 0 command-response continuation cbor:b"response1"',
+ b'1 2 stream-begin stream-settings eos cbor:b"identity"',
+ b'1 2 encoded command-response continuation %s' % OK,
+ b'1 2 encoded command-response continuation cbor:b"response1"',
b'1 2 0 command-response eos ',
- b'3 2 0 command-response continuation %s' % OK,
- b'3 2 0 command-response continuation cbor:b"response2"',
+ b'3 2 encoded command-response continuation %s' % OK,
+ b'3 2 encoded command-response continuation cbor:b"response2"',
b'3 2 0 command-response eos ',
])
@@ -472,14 +476,15 @@
result = reactor.oninputeof()
self.assertaction(result, b'sendframes')
self.assertframesequal(result[1][b'framegen'], [
- b'3 2 stream-begin command-response continuation %s' % OK,
- b'3 2 0 command-response continuation cbor:b"response3"',
+ b'3 2 stream-begin stream-settings eos cbor:b"identity"',
+ b'3 2 encoded command-response continuation %s' % OK,
+ b'3 2 encoded command-response continuation cbor:b"response3"',
b'3 2 0 command-response eos ',
- b'1 2 0 command-response continuation %s' % OK,
- b'1 2 0 command-response continuation cbor:b"response1"',
+ b'1 2 encoded command-response continuation %s' % OK,
+ b'1 2 encoded command-response continuation cbor:b"response1"',
b'1 2 0 command-response eos ',
- b'5 2 0 command-response continuation %s' % OK,
- b'5 2 0 command-response continuation cbor:b"response5"',
+ b'5 2 encoded command-response continuation %s' % OK,
+ b'5 2 encoded command-response continuation cbor:b"response5"',
b'5 2 0 command-response eos ',
])
diff --git a/tests/test-wireproto-exchangev2.t b/tests/test-wireproto-exchangev2.t
--- a/tests/test-wireproto-exchangev2.t
+++ b/tests/test-wireproto-exchangev2.t
@@ -45,11 +45,12 @@
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=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=43; request=1; stream=2; streamflags=encoded; 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=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=1; request=3; stream=2; streamflags=encoded; 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: {
@@ -67,8 +68,9 @@
]
]
}
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
- received frame(size=941; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=941; request=1; stream=2; streamflags=encoded; 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
@@ -92,8 +94,9 @@
],
'tree': ''
}
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
- received frame(size=992; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=992; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
sending 2 commands
sending command filedata: {
@@ -122,11 +125,12 @@
],
'path': 'b'
}
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
- received frame(size=431; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=431; request=1; stream=2; streamflags=encoded; 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=431; request=3; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=431; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation)
received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos)
updating the branch cache
new changesets 3390ef850073:caa2a465451d (3 drafts)
@@ -173,20 +177,22 @@
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=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=21; request=1; stream=2; streamflags=encoded; 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=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=43; request=1; stream=2; streamflags=encoded; 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=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=1; request=3; stream=2; streamflags=encoded; 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: {
@@ -203,8 +209,9 @@
]
]
}
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
- received frame(size=381; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=381; request=1; stream=2; streamflags=encoded; 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
@@ -222,8 +229,9 @@
],
'tree': ''
}
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
- received frame(size=404; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=404; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
sending 2 commands
sending command filedata: {
@@ -249,11 +257,12 @@
],
'path': 'b'
}
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
- received frame(size=277; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=277; request=1; stream=2; streamflags=encoded; 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=123; request=3; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=123; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation)
received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos)
updating the branch cache
new changesets 3390ef850073:4432d83626e8
@@ -286,11 +295,12 @@
'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=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=43; request=1; stream=2; streamflags=encoded; 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=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=2; request=3; stream=2; streamflags=encoded; 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
@@ -312,8 +322,9 @@
]
]
}
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
- received frame(size=613; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=613; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
add changeset cd2534766bec
add changeset e96ae20f4188
@@ -333,8 +344,9 @@
],
'tree': ''
}
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
- received frame(size=601; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=601; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
sending 2 commands
sending command filedata: {
@@ -362,11 +374,12 @@
],
'path': 'b'
}
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
- received frame(size=277; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=277; request=1; stream=2; streamflags=encoded; 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=431; request=3; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=431; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation)
received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos)
updating the branch cache
new changesets cd2534766bec:caa2a465451d (3 drafts)
@@ -409,11 +422,12 @@
'\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=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=43; request=1; stream=2; streamflags=encoded; 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=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=3; request=3; stream=2; streamflags=encoded; 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
@@ -436,8 +450,9 @@
]
]
}
- 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=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=92; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
checking for updated bookmarks
2 local changesets published
@@ -472,11 +487,12 @@
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=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=43; request=1; stream=2; streamflags=encoded; 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=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=1; request=3; stream=2; streamflags=encoded; 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: {
@@ -494,8 +510,9 @@
]
]
}
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
- received frame(size=979; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=979; request=1; stream=2; streamflags=encoded; 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
@@ -521,8 +538,9 @@
],
'tree': ''
}
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
- received frame(size=992; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=992; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
sending 2 commands
sending command filedata: {
@@ -551,11 +569,12 @@
],
'path': 'b'
}
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
- received frame(size=431; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=431; request=1; stream=2; streamflags=encoded; 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=431; request=3; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=431; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation)
received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos)
updating the branch cache
new changesets 3390ef850073:caa2a465451d (1 drafts)
@@ -583,11 +602,12 @@
'\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=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=43; request=1; stream=2; streamflags=encoded; 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=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=3; request=3; stream=2; streamflags=encoded; 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
@@ -610,8 +630,9 @@
]
]
}
- 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=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+ received frame(size=144; request=1; stream=2; streamflags=encoded; 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
diff --git a/tests/test-wireproto-content-redirects.t b/tests/test-wireproto-content-redirects.t
--- a/tests/test-wireproto-content-redirects.t
+++ b/tests/test-wireproto-content-redirects.t
@@ -86,16 +86,21 @@
s> Content-Type: application/mercurial-exp-framing-0006\r\n
s> Transfer-Encoding: chunked\r\n
s> \r\n
+ s> 11\r\n
+ s> \t\x00\x00\x01\x00\x02\x01\x92
+ s> Hidentity
+ s> \r\n
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
s> 13\r\n
- s> \x0b\x00\x00\x01\x00\x02\x011
+ s> \x0b\x00\x00\x01\x00\x02\x041
s> \xa1FstatusBok
s> \r\n
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
s> 588\r\n
- s> \x80\x05\x00\x01\x00\x02\x001
+ s> \x80\x05\x00\x01\x00\x02\x041
s> \xa5Hcommands\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\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa5DnameHtarget-aHprotocolDhttpKsnirequired\xf4Ktlsversions\x82C1.2C1.3Duris\x81Shttp://example.com/
s> \r\n
- received frame(size=1408; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=1408; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
s> 8\r\n
s> \x00\x00\x00\x01\x00\x02\x002
s> \r\n
@@ -370,16 +375,21 @@
s> Content-Type: application/mercurial-exp-framing-0006\r\n
s> Transfer-Encoding: chunked\r\n
s> \r\n
+ s> 11\r\n
+ s> \t\x00\x00\x01\x00\x02\x01\x92
+ s> Hidentity
+ s> \r\n
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
s> 13\r\n
- s> \x0b\x00\x00\x01\x00\x02\x011
+ s> \x0b\x00\x00\x01\x00\x02\x041
s> \xa1FstatusBok
s> \r\n
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
s> 5a3\r\n
- s> \x9b\x05\x00\x01\x00\x02\x001
+ s> \x9b\x05\x00\x01\x00\x02\x041
s> \xa5Hcommands\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\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x82\xa3DnameHtarget-aHprotocolDhttpDuris\x81Shttp://example.com/\xa3DnameHtarget-bHprotocolGunknownDuris\x81Vunknown://example.com/
s> \r\n
- received frame(size=1435; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=1435; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
s> 8\r\n
s> \x00\x00\x00\x01\x00\x02\x002
s> \r\n
@@ -660,16 +670,21 @@
s> Content-Type: application/mercurial-exp-framing-0006\r\n
s> Transfer-Encoding: chunked\r\n
s> \r\n
+ s> 11\r\n
+ s> \t\x00\x00\x01\x00\x02\x01\x92
+ s> Hidentity
+ s> \r\n
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
s> 13\r\n
- s> \x0b\x00\x00\x01\x00\x02\x011
+ s> \x0b\x00\x00\x01\x00\x02\x041
s> \xa1FstatusBok
s> \r\n
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
s> 57b\r\n
- s> s\x05\x00\x01\x00\x02\x001
+ s> s\x05\x00\x01\x00\x02\x041
s> \xa5Hcommands\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\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa4DnameNtarget-bad-tlsHprotocolEhttpsKsnirequired\xf5Duris\x81Thttps://example.com/
s> \r\n
- received frame(size=1395; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=1395; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
s> 8\r\n
s> \x00\x00\x00\x01\x00\x02\x002
s> \r\n
@@ -940,16 +955,21 @@
s> Content-Type: application/mercurial-exp-framing-0006\r\n
s> Transfer-Encoding: chunked\r\n
s> \r\n
+ s> 11\r\n
+ s> \t\x00\x00\x01\x00\x02\x01\x92
+ s> Hidentity
+ s> \r\n
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
s> 13\r\n
- s> \x0b\x00\x00\x01\x00\x02\x011
+ s> \x0b\x00\x00\x01\x00\x02\x041
s> \xa1FstatusBok
s> \r\n
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
s> 581\r\n
- s> y\x05\x00\x01\x00\x02\x001
+ s> y\x05\x00\x01\x00\x02\x041
s> \xa5Hcommands\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\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa4DnameNtarget-bad-tlsHprotocolEhttpsKtlsversions\x82B42B39Duris\x81Thttps://example.com/
s> \r\n
- received frame(size=1401; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=1401; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
s> 8\r\n
s> \x00\x00\x00\x01\x00\x02\x002
s> \r\n
diff --git a/tests/test-wireproto-command-capabilities.t b/tests/test-wireproto-command-capabilities.t
--- a/tests/test-wireproto-command-capabilities.t
+++ b/tests/test-wireproto-command-capabilities.t
@@ -453,16 +453,21 @@
s> Content-Type: application/mercurial-exp-framing-0006\r\n
s> Transfer-Encoding: chunked\r\n
s> \r\n
+ s> 11\r\n
+ s> \t\x00\x00\x01\x00\x02\x01\x92
+ s> Hidentity
+ s> \r\n
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
s> 13\r\n
- s> \x0b\x00\x00\x01\x00\x02\x011
+ s> \x0b\x00\x00\x01\x00\x02\x041
s> \xa1FstatusBok
s> \r\n
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
s> 508\r\n
- s> \x00\x05\x00\x01\x00\x02\x001
+ s> \x00\x05\x00\x01\x00\x02\x041
s> \xa4Hcommands\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\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1
s> \r\n
- received frame(size=1280; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=1280; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
s> 8\r\n
s> \x00\x00\x00\x01\x00\x02\x002
s> \r\n
diff --git a/tests/test-http-protocol.t b/tests/test-http-protocol.t
--- a/tests/test-http-protocol.t
+++ b/tests/test-http-protocol.t
@@ -333,16 +333,21 @@
s> Content-Type: application/mercurial-exp-framing-0006\r\n
s> Transfer-Encoding: chunked\r\n
s> \r\n
+ s> 11\r\n
+ s> \t\x00\x00\x01\x00\x02\x01\x92
+ s> Hidentity
+ s> \r\n
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
s> 13\r\n
- s> \x0b\x00\x00\x01\x00\x02\x011
+ s> \x0b\x00\x00\x01\x00\x02\x041
s> \xa1FstatusBok
s> \r\n
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
s> 1e\r\n
- s> \x16\x00\x00\x01\x00\x02\x001
+ s> \x16\x00\x00\x01\x00\x02\x041
s> \x81T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
s> \r\n
- received frame(size=22; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=22; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
s> 8\r\n
s> \x00\x00\x00\x01\x00\x02\x002
s> \r\n
diff --git a/tests/test-http-api-httpv2.t b/tests/test-http-api-httpv2.t
--- a/tests/test-http-api-httpv2.t
+++ b/tests/test-http-api-httpv2.t
@@ -176,11 +176,14 @@
s> Content-Type: application/mercurial-exp-framing-0006\r\n
s> Transfer-Encoding: chunked\r\n
s> \r\n
+ s> 11\r\n
+ s> \t\x00\x00\x01\x00\x02\x01\x92Hidentity
+ s> \r\n
s> 13\r\n
- s> \x0b\x00\x00\x01\x00\x02\x011\xa1FstatusBok
+ s> \x0b\x00\x00\x01\x00\x02\x041\xa1FstatusBok
s> \r\n
s> 27\r\n
- s> \x1f\x00\x00\x01\x00\x02\x001X\x1dcustomreadonly bytes response
+ s> \x1f\x00\x00\x01\x00\x02\x041X\x1dcustomreadonly bytes response
s> \r\n
s> 8\r\n
s> \x00\x00\x00\x01\x00\x02\x002
@@ -209,16 +212,21 @@
s> Content-Type: application/mercurial-exp-framing-0006\r\n
s> Transfer-Encoding: chunked\r\n
s> \r\n
+ s> 11\r\n
+ s> \t\x00\x00\x01\x00\x02\x01\x92
+ s> Hidentity
+ s> \r\n
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
s> 13\r\n
- s> \x0b\x00\x00\x01\x00\x02\x011
+ s> \x0b\x00\x00\x01\x00\x02\x041
s> \xa1FstatusBok
s> \r\n
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
s> 27\r\n
- s> \x1f\x00\x00\x01\x00\x02\x001
+ s> \x1f\x00\x00\x01\x00\x02\x041
s> X\x1dcustomreadonly bytes response
s> \r\n
- received frame(size=31; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=31; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
s> 8\r\n
s> \x00\x00\x00\x01\x00\x02\x002
s> \r\n
@@ -335,11 +343,14 @@
s> Content-Type: application/mercurial-exp-framing-0006\r\n
s> Transfer-Encoding: chunked\r\n
s> \r\n
+ s> 11\r\n
+ s> \t\x00\x00\x01\x00\x02\x01\x92Hidentity
+ s> \r\n
s> 13\r\n
- s> \x0b\x00\x00\x01\x00\x02\x011\xa1FstatusBok
+ s> \x0b\x00\x00\x01\x00\x02\x041\xa1FstatusBok
s> \r\n
s> 27\r\n
- s> \x1f\x00\x00\x01\x00\x02\x001X\x1dcustomreadonly bytes response
+ s> \x1f\x00\x00\x01\x00\x02\x041X\x1dcustomreadonly bytes response
s> \r\n
s> 8\r\n
s> \x00\x00\x00\x01\x00\x02\x002
@@ -464,11 +475,14 @@
s> Content-Type: application/mercurial-exp-framing-0006\r\n
s> Transfer-Encoding: chunked\r\n
s> \r\n
+ s> 11\r\n
+ s> \t\x00\x00\x01\x00\x02\x01\x92Hidentity
+ s> \r\n
s> 13\r\n
- s> \x0b\x00\x00\x01\x00\x02\x011\xa1FstatusBok
+ s> \x0b\x00\x00\x01\x00\x02\x041\xa1FstatusBok
s> \r\n
s> 27\r\n
- s> \x1f\x00\x00\x01\x00\x02\x001X\x1dcustomreadonly bytes response
+ s> \x1f\x00\x00\x01\x00\x02\x041X\x1dcustomreadonly bytes response
s> \r\n
s> 8\r\n
s> \x00\x00\x00\x01\x00\x02\x002
@@ -503,20 +517,23 @@
s> Content-Type: application/mercurial-exp-framing-0006\r\n
s> Transfer-Encoding: chunked\r\n
s> \r\n
+ s> 11\r\n
+ s> \t\x00\x00\x01\x00\x02\x01\x92Hidentity
+ s> \r\n
s> 13\r\n
- s> \x0b\x00\x00\x01\x00\x02\x011\xa1FstatusBok
+ s> \x0b\x00\x00\x01\x00\x02\x041\xa1FstatusBok
s> \r\n
s> 27\r\n
- s> \x1f\x00\x00\x01\x00\x02\x001X\x1dcustomreadonly bytes response
+ s> \x1f\x00\x00\x01\x00\x02\x041X\x1dcustomreadonly bytes response
s> \r\n
s> 8\r\n
s> \x00\x00\x00\x01\x00\x02\x002
s> \r\n
s> 13\r\n
- s> \x0b\x00\x00\x03\x00\x02\x001\xa1FstatusBok
+ s> \x0b\x00\x00\x03\x00\x02\x041\xa1FstatusBok
s> \r\n
s> 27\r\n
- s> \x1f\x00\x00\x03\x00\x02\x001X\x1dcustomreadonly bytes response
+ s> \x1f\x00\x00\x03\x00\x02\x041X\x1dcustomreadonly bytes response
s> \r\n
s> 8\r\n
s> \x00\x00\x00\x03\x00\x02\x002
@@ -553,20 +570,23 @@
s> Content-Type: application/mercurial-exp-framing-0006\r\n
s> Transfer-Encoding: chunked\r\n
s> \r\n
+ s> 11\r\n
+ s> \t\x00\x00\x03\x00\x02\x01\x92Hidentity
+ s> \r\n
s> 13\r\n
- s> \x0b\x00\x00\x03\x00\x02\x011\xa1FstatusBok
+ s> \x0b\x00\x00\x03\x00\x02\x041\xa1FstatusBok
s> \r\n
s> 28\r\n
- s> \x00\x00\x03\x00\x02\x001\xa3Ibookmarks at Jnamespaces@Fphases@
+ s> \x00\x00\x03\x00\x02\x041\xa3Ibookmarks at Jnamespaces@Fphases@
s> \r\n
s> 8\r\n
s> \x00\x00\x00\x03\x00\x02\x002
s> \r\n
s> 13\r\n
- s> \x0b\x00\x00\x01\x00\x02\x001\xa1FstatusBok
+ s> \x0b\x00\x00\x01\x00\x02\x041\xa1FstatusBok
s> \r\n
s> 9\r\n
- s> \x01\x00\x00\x01\x00\x02\x001\xa0
+ s> \x01\x00\x00\x01\x00\x02\x041\xa0
s> \r\n
s> 8\r\n
s> \x00\x00\x00\x01\x00\x02\x002
@@ -641,16 +661,21 @@
s> Content-Type: application/mercurial-exp-framing-0006\r\n
s> Transfer-Encoding: chunked\r\n
s> \r\n
+ s> 11\r\n
+ s> \t\x00\x00\x01\x00\x02\x01\x92
+ s> Hidentity
+ s> \r\n
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
s> 13\r\n
- s> \x0b\x00\x00\x01\x00\x02\x011
+ s> \x0b\x00\x00\x01\x00\x02\x041
s> \xa1FstatusBok
s> \r\n
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
+ received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
s> 1e\r\n
- s> \x16\x00\x00\x01\x00\x02\x001
+ s> \x16\x00\x00\x01\x00\x02\x041
s> \x81T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
s> \r\n
- received frame(size=22; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
+ received frame(size=22; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
s> 8\r\n
s> \x00\x00\x00\x01\x00\x02\x002
s> \r\n
@@ -685,22 +710,18 @@
s> Content-Type: application/mercurial-exp-framing-0006\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> 11\r\n
+ s> \t\x00\x00\x01\x00\x02\x01\x92
+ s> Hzstd-8mb
s> \r\n
- received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
- s> 1e\r\n
- s> \x16\x00\x00\x01\x00\x02\x001
- s> \x81T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
+ received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
+ s> 25\r\n
+ s> \x1d\x00\x00\x01\x00\x02\x042
+ s> (\xb5/\xfd\x00P\xa4\x00\x00p\xa1FstatusBok\x81T\x00\x01\x00\tP\x02
s> \r\n
- received frame(size=22; 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
+ received frame(size=29; request=1; stream=2; streamflags=encoded; type=command-response; flags=eos)
s> 0\r\n
s> \r\n
- received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
response: [
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
]
diff --git a/mercurial/wireprotov2server.py b/mercurial/wireprotov2server.py
--- a/mercurial/wireprotov2server.py
+++ b/mercurial/wireprotov2server.py
@@ -194,7 +194,7 @@
reactor = wireprotoframing.serverreactor(ui, deferoutput=True)
seencommand = False
- outstream = reactor.makeoutputstream()
+ outstream = None
while True:
frame = wireprotoframing.readframe(req.bodyfh)
@@ -207,6 +207,11 @@
# Need more data before we can do anything.
continue
elif action == 'runcommand':
+ # Defer creating output stream because we need to wait for
+ # protocol settings frames so proper encoding can be applied.
+ if not outstream:
+ outstream = reactor.makeoutputstream()
+
sentoutput = _httpv2runcommand(ui, repo, req, res, authedperm,
reqcommand, reactor, outstream,
meta, issubsequent=seencommand)
diff --git a/mercurial/wireprotoframing.py b/mercurial/wireprotoframing.py
--- a/mercurial/wireprotoframing.py
+++ b/mercurial/wireprotoframing.py
@@ -368,17 +368,46 @@
def createcommandresponseokframe(stream, requestid):
overall = b''.join(cborutil.streamencode({b'status': b'ok'}))
+ if stream.streamsettingssent:
+ overall = stream.encode(overall)
+ encoded = True
+
+ if not overall:
+ return None
+ else:
+ encoded = False
+
return stream.makeframe(requestid=requestid,
typeid=FRAME_TYPE_COMMAND_RESPONSE,
flags=FLAG_COMMAND_RESPONSE_CONTINUATION,
- payload=overall)
+ payload=overall,
+ encoded=encoded)
-def createcommandresponseeosframe(stream, requestid):
+def createcommandresponseeosframes(stream, requestid,
+ maxframesize=DEFAULT_MAX_FRAME_SIZE):
"""Create an empty payload frame representing command end-of-stream."""
- return stream.makeframe(requestid=requestid,
- typeid=FRAME_TYPE_COMMAND_RESPONSE,
- flags=FLAG_COMMAND_RESPONSE_EOS,
- payload=b'')
+ payload = stream.flush()
+
+ offset = 0
+ while True:
+ chunk = payload[offset:offset + maxframesize]
+ offset += len(chunk)
+
+ done = offset == len(payload)
+
+ if done:
+ flags = FLAG_COMMAND_RESPONSE_EOS
+ else:
+ flags = FLAG_COMMAND_RESPONSE_CONTINUATION
+
+ yield stream.makeframe(requestid=requestid,
+ typeid=FRAME_TYPE_COMMAND_RESPONSE,
+ flags=flags,
+ payload=chunk,
+ encoded=payload != b'')
+
+ if done:
+ break
def createalternatelocationresponseframe(stream, requestid, location):
data = {
@@ -395,10 +424,19 @@
if value is not None:
data[b'location'][pycompat.bytestr(a)] = value
+ payload = b''.join(cborutil.streamencode(data))
+
+ if stream.streamsettingssent:
+ payload = stream.encode(payload)
+ encoded = True
+ else:
+ encoded = False
+
return stream.makeframe(requestid=requestid,
typeid=FRAME_TYPE_COMMAND_RESPONSE,
flags=FLAG_COMMAND_RESPONSE_CONTINUATION,
- payload=b''.join(cborutil.streamencode(data)))
+ payload=payload,
+ encoded=encoded)
def createcommanderrorresponse(stream, requestid, message, args=None):
# TODO should this be using a list of {'msg': ..., 'args': {}} so atom
@@ -519,6 +557,8 @@
yield frame
return
+ data = self._stream.encode(data)
+
# There is a ton of potential to do more complicated things here.
# Our immediate goal is to coalesce small chunks into big frames,
# not achieve the fewest number of frames possible. So we go with
@@ -548,7 +588,8 @@
self._requestid,
typeid=FRAME_TYPE_COMMAND_RESPONSE,
flags=FLAG_COMMAND_RESPONSE_CONTINUATION,
- payload=chunk)
+ payload=chunk,
+ encoded=True)
if offset == len(data):
return
@@ -583,7 +624,8 @@
self._requestid,
typeid=FRAME_TYPE_COMMAND_RESPONSE,
flags=FLAG_COMMAND_RESPONSE_CONTINUATION,
- payload=payload)
+ payload=payload,
+ encoded=True)
# TODO consider defining encoders/decoders using the util.compressionengine
# mechanism.
@@ -776,7 +818,9 @@
def __init__(self, streamid, active=False):
super(outputstream, self).__init__(streamid, active=active)
+ self.streamsettingssent = False
self._encoder = None
+ self._encodername = None
def setencoder(self, ui, name):
"""Set the encoder for this stream.
@@ -787,6 +831,7 @@
raise error.Abort(_('unknown stream encoder: %s') % name)
self._encoder = STREAM_ENCODERS[name][0](ui)
+ self._encodername = name
def encode(self, data):
if not self._encoder:
@@ -806,6 +851,45 @@
self._encoder.finish()
+ def makeframe(self, requestid, typeid, flags, payload,
+ encoded=False):
+ """Create a frame to be sent out over this stream.
+
+ Only returns the frame instance. Does not actually send it.
+ """
+ streamflags = 0
+ if not self._active:
+ streamflags |= STREAM_FLAG_BEGIN_STREAM
+ self._active = True
+
+ if encoded:
+ if not self.streamsettingssent:
+ raise error.ProgrammingError(
+ b'attempting to send encoded frame without sending stream '
+ b'settings')
+
+ streamflags |= STREAM_FLAG_ENCODING_APPLIED
+
+ if (typeid == FRAME_TYPE_STREAM_SETTINGS
+ and flags & FLAG_STREAM_ENCODING_SETTINGS_EOS):
+ self.streamsettingssent = True
+
+ return makeframe(requestid, self.streamid, streamflags, typeid, flags,
+ payload)
+
+ def makestreamsettingsframe(self, requestid):
+ """Create a stream settings frame for this stream.
+
+ Returns frame data or None if no stream settings frame is needed or has
+ already been sent.
+ """
+ if not self._encoder or self.streamsettingssent:
+ return None
+
+ payload = b''.join(cborutil.streamencode(self._encodername))
+ return self.makeframe(requestid, FRAME_TYPE_STREAM_SETTINGS,
+ FLAG_STREAM_ENCODING_SETTINGS_EOS, payload)
+
def ensureserverstream(stream):
if stream.streamid % 2:
raise error.ProgrammingError('server should only write to even '
@@ -995,7 +1079,9 @@
yield frame
if emitted:
- yield createcommandresponseeosframe(stream, requestid)
+ for frame in createcommandresponseeosframes(
+ stream, requestid):
+ yield frame
break
except error.WireprotoCommandError as e:
@@ -1022,6 +1108,10 @@
'alternatelocationresponse seen after initial '
'output object')
+ frame = stream.makestreamsettingsframe(requestid)
+ if frame:
+ yield frame
+
yield createalternatelocationresponseframe(
stream, requestid, o)
@@ -1034,7 +1124,16 @@
'object follows alternatelocationresponse')
if not emitted:
- yield createcommandresponseokframe(stream, requestid)
+ # Frame is optional.
+ frame = stream.makestreamsettingsframe(requestid)
+ if frame:
+ yield frame
+
+ # May be None if empty frame (due to encoding).
+ frame = createcommandresponseokframe(stream, requestid)
+ if frame:
+ yield frame
+
emitted = True
# Objects emitted by command functions can be serializable
@@ -1121,13 +1220,25 @@
return self._handlesendframes(sendframes())
def makeoutputstream(self):
- """Create a stream to be used for sending data to the client."""
+ """Create a stream to be used for sending data to the client.
+
+ If this is called before protocol settings frames are received, we
+ don't know what stream encodings are supported by the client and
+ we will default to identity.
+ """
streamid = self._nextoutgoingstreamid
self._nextoutgoingstreamid += 2
s = outputstream(streamid)
self._outgoingstreams[streamid] = s
+ # Always use the *server's* preferred encoder over the client's,
+ # as servers have more to lose from sub-optimal encoders being used.
+ for name in STREAM_ENCODERS_ORDER:
+ if name in self._sendersettings['contentencodings']:
+ s.setencoder(self._ui, name)
+ break
+
return s
def _makeerrorresult(self, msg):
To: indygreg, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list