Mercurial > public > mercurial-scm > hg
comparison mercurial/httppeer.py @ 30564:07bcd1bf6151
httppeer: assign Vary request header last
In preparation for adding another value to it in a subsequent patch.
While I was here, I added some empty lines because walls of text
are hard to read.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Mon, 28 Nov 2016 21:07:51 -0800 |
parents | d1b97fc87f55 |
children | 3f5f0c98cd18 |
comparison
equal
deleted
inserted
replaced
30563:e118233172fe | 30564:07bcd1bf6151 |
---|---|
109 headers = args.pop('headers', {}) | 109 headers = args.pop('headers', {}) |
110 | 110 |
111 self.ui.debug("sending %s command\n" % cmd) | 111 self.ui.debug("sending %s command\n" % cmd) |
112 q = [('cmd', cmd)] | 112 q = [('cmd', cmd)] |
113 headersize = 0 | 113 headersize = 0 |
114 varyheaders = [] | |
114 # Important: don't use self.capable() here or else you end up | 115 # Important: don't use self.capable() here or else you end up |
115 # with infinite recursion when trying to look up capabilities | 116 # with infinite recursion when trying to look up capabilities |
116 # for the first time. | 117 # for the first time. |
117 postargsok = self.caps is not None and 'httppostargs' in self.caps | 118 postargsok = self.caps is not None and 'httppostargs' in self.caps |
118 # TODO: support for httppostargs when data is a file-like | 119 # TODO: support for httppostargs when data is a file-like |
135 # The headers can typically carry more data than the URL. | 136 # The headers can typically carry more data than the URL. |
136 encargs = urlreq.urlencode(sorted(args.items())) | 137 encargs = urlreq.urlencode(sorted(args.items())) |
137 headerfmt = 'X-HgArg-%s' | 138 headerfmt = 'X-HgArg-%s' |
138 contentlen = headersize - len(headerfmt % '000' + ': \r\n') | 139 contentlen = headersize - len(headerfmt % '000' + ': \r\n') |
139 headernum = 0 | 140 headernum = 0 |
140 varyheaders = [] | |
141 for i in xrange(0, len(encargs), contentlen): | 141 for i in xrange(0, len(encargs), contentlen): |
142 headernum += 1 | 142 headernum += 1 |
143 header = headerfmt % str(headernum) | 143 header = headerfmt % str(headernum) |
144 headers[header] = encargs[i:i + contentlen] | 144 headers[header] = encargs[i:i + contentlen] |
145 varyheaders.append(header) | 145 varyheaders.append(header) |
146 headers['Vary'] = ','.join(varyheaders) | |
147 else: | 146 else: |
148 q += sorted(args.items()) | 147 q += sorted(args.items()) |
149 qs = '?%s' % urlreq.urlencode(q) | 148 qs = '?%s' % urlreq.urlencode(q) |
150 cu = "%s%s" % (self._url, qs) | 149 cu = "%s%s" % (self._url, qs) |
151 size = 0 | 150 size = 0 |
156 if size and self.ui.configbool('ui', 'usehttp2', False): | 155 if size and self.ui.configbool('ui', 'usehttp2', False): |
157 headers['Expect'] = '100-Continue' | 156 headers['Expect'] = '100-Continue' |
158 headers['X-HgHttp2'] = '1' | 157 headers['X-HgHttp2'] = '1' |
159 if data is not None and 'Content-Type' not in headers: | 158 if data is not None and 'Content-Type' not in headers: |
160 headers['Content-Type'] = 'application/mercurial-0.1' | 159 headers['Content-Type'] = 'application/mercurial-0.1' |
160 | |
161 headers['Vary'] = ','.join(varyheaders) | |
161 req = self.requestbuilder(cu, data, headers) | 162 req = self.requestbuilder(cu, data, headers) |
163 | |
162 if data is not None: | 164 if data is not None: |
163 self.ui.debug("sending %s bytes\n" % size) | 165 self.ui.debug("sending %s bytes\n" % size) |
164 req.add_unredirected_header('Content-Length', '%d' % size) | 166 req.add_unredirected_header('Content-Length', '%d' % size) |
165 try: | 167 try: |
166 resp = self.urlopener.open(req) | 168 resp = self.urlopener.open(req) |