Mercurial > public > mercurial-scm > hg
comparison mercurial/wireprotoserver.py @ 36070:90ca4986616c
wireprotoserver: rename getfile() to forwardpayload() (API)
"file" can mean a lot of things. Let's rename the interface
method to something more descriptive.
While I was here, I moved the docs about the payload format to
the implementation of the SSH protocol, because it was lying
about what the HTTP payload looked like.
Differential Revision: https://phab.mercurial-scm.org/D2085
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Thu, 01 Feb 2018 17:12:07 -0800 |
parents | 957e773614d0 |
children | 038bcb759b75 |
comparison
equal
deleted
inserted
replaced
36069:957e773614d0 | 36070:90ca4986616c |
---|---|
62 """return the value for arguments in <args> | 62 """return the value for arguments in <args> |
63 | 63 |
64 returns a list of values (same order as <args>)""" | 64 returns a list of values (same order as <args>)""" |
65 | 65 |
66 @abc.abstractmethod | 66 @abc.abstractmethod |
67 def getfile(self, fp): | 67 def forwardpayload(self, fp): |
68 """write the whole content of a file into a file like object | 68 """Read the raw payload and forward to a file. |
69 | 69 |
70 The file is in the form:: | 70 The payload is read in full before the function returns. |
71 | |
72 (<chunk-size>\n<chunk>)+0\n | |
73 | |
74 chunk size is the ascii version of the int. | |
75 """ | 71 """ |
76 | 72 |
77 @abc.abstractmethod | 73 @abc.abstractmethod |
78 def mayberedirectstdio(self): | 74 def mayberedirectstdio(self): |
79 """Context manager to possibly redirect stdio. | 75 """Context manager to possibly redirect stdio. |
143 | 139 |
144 argvalue = decodevaluefromheaders(self._req, r'X-HgArg') | 140 argvalue = decodevaluefromheaders(self._req, r'X-HgArg') |
145 args.update(cgi.parse_qs(argvalue, keep_blank_values=True)) | 141 args.update(cgi.parse_qs(argvalue, keep_blank_values=True)) |
146 return args | 142 return args |
147 | 143 |
148 def getfile(self, fp): | 144 def forwardpayload(self, fp): |
149 length = int(self._req.env[r'CONTENT_LENGTH']) | 145 length = int(self._req.env[r'CONTENT_LENGTH']) |
150 # If httppostargs is used, we need to read Content-Length | 146 # If httppostargs is used, we need to read Content-Length |
151 # minus the amount that was consumed by args. | 147 # minus the amount that was consumed by args. |
152 length -= int(self._req.env.get(r'HTTP_X_HGARGS_POST', 0)) | 148 length -= int(self._req.env.get(r'HTTP_X_HGARGS_POST', 0)) |
153 for s in util.filechunkiter(self._req, limit=length): | 149 for s in util.filechunkiter(self._req, limit=length): |
390 else: | 386 else: |
391 val = self._fin.read(int(l)) | 387 val = self._fin.read(int(l)) |
392 data[arg] = val | 388 data[arg] = val |
393 return [data[k] for k in keys] | 389 return [data[k] for k in keys] |
394 | 390 |
395 def getfile(self, fpout): | 391 def forwardpayload(self, fpout): |
392 # The file is in the form: | |
393 # | |
394 # <chunk size>\n<chunk> | |
395 # ... | |
396 # 0\n | |
396 _sshv1respondbytes(self._fout, b'') | 397 _sshv1respondbytes(self._fout, b'') |
397 count = int(self._fin.readline()) | 398 count = int(self._fin.readline()) |
398 while count: | 399 while count: |
399 fpout.write(self._fin.read(count)) | 400 fpout.write(self._fin.read(count)) |
400 count = int(self._fin.readline()) | 401 count = int(self._fin.readline()) |