Mercurial > hg
comparison tests/test-wireproto-command-capabilities.t @ 39639:0e03e6a44dee
wireprotov2: define and implement "filedata" command
Continuing our trend of implementing *data commands for retrieving
information about specific repository data primitives, this commit
implements a command for retrieving data about an individual tracked
file.
The command is very similar to "manifestdata." The only significant
difference is that we have a standalone function for obtaining
storage for a tracked file. This is to provide a monkeypatch point
for extensions to implement path-based access control.
With this API available, wire protocol version 2 now exposes all
data primitives necessary to implement a full clone. Of course,
since "filedata" can only resolve data for a single path at a time,
clients would need to issue N commands to perform a full clone. On
the Firefox repository, this would be ~461k commands. We'll likely
need to implement a file data retrieval command that supports
multiple paths. But that can be implemented later.
Differential Revision: https://phab.mercurial-scm.org/D4490
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Wed, 05 Sep 2018 09:10:17 -0700 |
parents | c7a7c7e844e5 |
children | aa7e312375cf |
comparison
equal
deleted
inserted
replaced
39638:d292328e0143 | 39639:0e03e6a44dee |
---|---|
210 s> Server: testing stub value\r\n | 210 s> Server: testing stub value\r\n |
211 s> Date: $HTTP_DATE$\r\n | 211 s> Date: $HTTP_DATE$\r\n |
212 s> Content-Type: application/mercurial-cbor\r\n | 212 s> Content-Type: application/mercurial-cbor\r\n |
213 s> Content-Length: *\r\n (glob) | 213 s> Content-Length: *\r\n (glob) |
214 s> \r\n | 214 s> \r\n |
215 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0001\xa4Hcommands\xa9Ibranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa3Ffields\xd9\x01\x02\x82GparentsHrevisionInoderange\x82\x81J0123456...\x81Iabcdef...Enodes\x81J0123456...Kpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xf4Kpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\x81HdeadbeefKpermissions\x81DpullHlistkeys\xa2Dargs\xa1InamespaceBnsKpermissions\x81DpullFlookup\xa2Dargs\xa1CkeyCfooKpermissions\x81DpullLmanifestdata\xa2Dargs\xa3Ffields\x82GparentsHrevisionEnodes\x81J0123456...Dtree@Kpermissions\x81DpullGpushkey\xa2Dargs\xa4CkeyCkeyInamespaceBnsCnewCnewColdColdKpermissions\x81DpushKcompression\x81\xa1DnameDzlibQframingmediatypes\x81X&application/mercurial-exp-framing-0005Nrawrepoformats\x82LgeneraldeltaHrevlogv1Nv1capabilitiesY\x01\xc5batch branchmap $USUAL_BUNDLE2_CAPS_SERVER$ changegroupsubset compression=$BUNDLE2_COMPRESSIONS$ getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash | 215 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0001\xa4Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa3Ffields\xd9\x01\x02\x82GparentsHrevisionInoderange\x82\x81J0123456...\x81Iabcdef...Enodes\x81J0123456...Kpermissions\x81DpullHfiledata\xa2Dargs\xa3Ffields\x82GparentsHrevisionEnodes\x81J0123456...DpathGfoo.txtKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xf4Kpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\x81HdeadbeefKpermissions\x81DpullHlistkeys\xa2Dargs\xa1InamespaceBnsKpermissions\x81DpullFlookup\xa2Dargs\xa1CkeyCfooKpermissions\x81DpullLmanifestdata\xa2Dargs\xa3Ffields\x82GparentsHrevisionEnodes\x81J0123456...Dtree@Kpermissions\x81DpullGpushkey\xa2Dargs\xa4CkeyCkeyInamespaceBnsCnewCnewColdColdKpermissions\x81DpushKcompression\x81\xa1DnameDzlibQframingmediatypes\x81X&application/mercurial-exp-framing-0005Nrawrepoformats\x82LgeneraldeltaHrevlogv1Nv1capabilitiesY\x01\xc5batch branchmap $USUAL_BUNDLE2_CAPS_SERVER$ changegroupsubset compression=$BUNDLE2_COMPRESSIONS$ getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash |
216 cbor> { | 216 cbor> { |
217 b'apibase': b'api/', | 217 b'apibase': b'api/', |
218 b'apis': { | 218 b'apis': { |
219 b'exp-http-v2-0001': { | 219 b'exp-http-v2-0001': { |
220 b'commands': { | 220 b'commands': { |
245 ] | 245 ] |
246 ], | 246 ], |
247 b'nodes': [ | 247 b'nodes': [ |
248 b'0123456...' | 248 b'0123456...' |
249 ] | 249 ] |
250 }, | |
251 b'permissions': [ | |
252 b'pull' | |
253 ] | |
254 }, | |
255 b'filedata': { | |
256 b'args': { | |
257 b'fields': [ | |
258 b'parents', | |
259 b'revision' | |
260 ], | |
261 b'nodes': [ | |
262 b'0123456...' | |
263 ], | |
264 b'path': b'foo.txt' | |
250 }, | 265 }, |
251 b'permissions': [ | 266 b'permissions': [ |
252 b'pull' | 267 b'pull' |
253 ] | 268 ] |
254 }, | 269 }, |
350 s> Server: testing stub value\r\n | 365 s> Server: testing stub value\r\n |
351 s> Date: $HTTP_DATE$\r\n | 366 s> Date: $HTTP_DATE$\r\n |
352 s> Content-Type: application/mercurial-cbor\r\n | 367 s> Content-Type: application/mercurial-cbor\r\n |
353 s> Content-Length: *\r\n (glob) | 368 s> Content-Length: *\r\n (glob) |
354 s> \r\n | 369 s> \r\n |
355 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0001\xa4Hcommands\xa9Ibranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa3Ffields\xd9\x01\x02\x82GparentsHrevisionInoderange\x82\x81J0123456...\x81Iabcdef...Enodes\x81J0123456...Kpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xf4Kpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\x81HdeadbeefKpermissions\x81DpullHlistkeys\xa2Dargs\xa1InamespaceBnsKpermissions\x81DpullFlookup\xa2Dargs\xa1CkeyCfooKpermissions\x81DpullLmanifestdata\xa2Dargs\xa3Ffields\x82GparentsHrevisionEnodes\x81J0123456...Dtree@Kpermissions\x81DpullGpushkey\xa2Dargs\xa4CkeyCkeyInamespaceBnsCnewCnewColdColdKpermissions\x81DpushKcompression\x81\xa1DnameDzlibQframingmediatypes\x81X&application/mercurial-exp-framing-0005Nrawrepoformats\x82LgeneraldeltaHrevlogv1Nv1capabilitiesY\x01\xc5batch branchmap $USUAL_BUNDLE2_CAPS_SERVER$ changegroupsubset compression=$BUNDLE2_COMPRESSIONS$ getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash | 370 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0001\xa4Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa3Ffields\xd9\x01\x02\x82GparentsHrevisionInoderange\x82\x81J0123456...\x81Iabcdef...Enodes\x81J0123456...Kpermissions\x81DpullHfiledata\xa2Dargs\xa3Ffields\x82GparentsHrevisionEnodes\x81J0123456...DpathGfoo.txtKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xf4Kpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\x81HdeadbeefKpermissions\x81DpullHlistkeys\xa2Dargs\xa1InamespaceBnsKpermissions\x81DpullFlookup\xa2Dargs\xa1CkeyCfooKpermissions\x81DpullLmanifestdata\xa2Dargs\xa3Ffields\x82GparentsHrevisionEnodes\x81J0123456...Dtree@Kpermissions\x81DpullGpushkey\xa2Dargs\xa4CkeyCkeyInamespaceBnsCnewCnewColdColdKpermissions\x81DpushKcompression\x81\xa1DnameDzlibQframingmediatypes\x81X&application/mercurial-exp-framing-0005Nrawrepoformats\x82LgeneraldeltaHrevlogv1Nv1capabilitiesY\x01\xc5batch branchmap $USUAL_BUNDLE2_CAPS_SERVER$ changegroupsubset compression=$BUNDLE2_COMPRESSIONS$ getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash |
356 sending capabilities command | 371 sending capabilities command |
357 s> POST /api/exp-http-v2-0001/ro/capabilities HTTP/1.1\r\n | 372 s> POST /api/exp-http-v2-0001/ro/capabilities HTTP/1.1\r\n |
358 s> Accept-Encoding: identity\r\n | 373 s> Accept-Encoding: identity\r\n |
359 s> accept: application/mercurial-exp-framing-0005\r\n | 374 s> accept: application/mercurial-exp-framing-0005\r\n |
360 s> content-type: application/mercurial-exp-framing-0005\r\n | 375 s> content-type: application/mercurial-exp-framing-0005\r\n |
373 s> 13\r\n | 388 s> 13\r\n |
374 s> \x0b\x00\x00\x01\x00\x02\x011 | 389 s> \x0b\x00\x00\x01\x00\x02\x011 |
375 s> \xa1FstatusBok | 390 s> \xa1FstatusBok |
376 s> \r\n | 391 s> \r\n |
377 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) | 392 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) |
378 s> 29a\r\n | 393 s> 2f4\r\n |
379 s> \x92\x02\x00\x01\x00\x02\x001 | 394 s> \xec\x02\x00\x01\x00\x02\x001 |
380 s> \xa4Hcommands\xa9Ibranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa3Ffields\xd9\x01\x02\x82GparentsHrevisionInoderange\x82\x81J0123456...\x81Iabcdef...Enodes\x81J0123456...Kpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xf4Kpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\x81HdeadbeefKpermissions\x81DpullHlistkeys\xa2Dargs\xa1InamespaceBnsKpermissions\x81DpullFlookup\xa2Dargs\xa1CkeyCfooKpermissions\x81DpullLmanifestdata\xa2Dargs\xa3Ffields\x82GparentsHrevisionEnodes\x81J0123456...Dtree@Kpermissions\x81DpullGpushkey\xa2Dargs\xa4CkeyCkeyInamespaceBnsCnewCnewColdColdKpermissions\x81DpushKcompression\x81\xa1DnameDzlibQframingmediatypes\x81X&application/mercurial-exp-framing-0005Nrawrepoformats\x82LgeneraldeltaHrevlogv1 | 395 s> \xa4Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa3Ffields\xd9\x01\x02\x82GparentsHrevisionInoderange\x82\x81J0123456...\x81Iabcdef...Enodes\x81J0123456...Kpermissions\x81DpullHfiledata\xa2Dargs\xa3Ffields\x82GparentsHrevisionEnodes\x81J0123456...DpathGfoo.txtKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xf4Kpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\x81HdeadbeefKpermissions\x81DpullHlistkeys\xa2Dargs\xa1InamespaceBnsKpermissions\x81DpullFlookup\xa2Dargs\xa1CkeyCfooKpermissions\x81DpullLmanifestdata\xa2Dargs\xa3Ffields\x82GparentsHrevisionEnodes\x81J0123456...Dtree@Kpermissions\x81DpullGpushkey\xa2Dargs\xa4CkeyCkeyInamespaceBnsCnewCnewColdColdKpermissions\x81DpushKcompression\x81\xa1DnameDzlibQframingmediatypes\x81X&application/mercurial-exp-framing-0005Nrawrepoformats\x82LgeneraldeltaHrevlogv1 |
381 s> \r\n | 396 s> \r\n |
382 received frame(size=658; request=1; stream=2; streamflags=; type=command-response; flags=continuation) | 397 received frame(size=748; request=1; stream=2; streamflags=; type=command-response; flags=continuation) |
383 s> 8\r\n | 398 s> 8\r\n |
384 s> \x00\x00\x00\x01\x00\x02\x002 | 399 s> \x00\x00\x00\x01\x00\x02\x002 |
385 s> \r\n | 400 s> \r\n |
386 s> 0\r\n | 401 s> 0\r\n |
387 s> \r\n | 402 s> \r\n |
416 ] | 431 ] |
417 ], | 432 ], |
418 b'nodes': [ | 433 b'nodes': [ |
419 b'0123456...' | 434 b'0123456...' |
420 ] | 435 ] |
436 }, | |
437 b'permissions': [ | |
438 b'pull' | |
439 ] | |
440 }, | |
441 b'filedata': { | |
442 b'args': { | |
443 b'fields': [ | |
444 b'parents', | |
445 b'revision' | |
446 ], | |
447 b'nodes': [ | |
448 b'0123456...' | |
449 ], | |
450 b'path': b'foo.txt' | |
421 }, | 451 }, |
422 b'permissions': [ | 452 b'permissions': [ |
423 b'pull' | 453 b'pull' |
424 ] | 454 ] |
425 }, | 455 }, |