Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/hgweb/server.py @ 43554:9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
This is the promised second step on single-quoted strings. These had
existed because our source transformer didn't turn r'' into b'', so we
had tagged some strings as r-strings to get "native" strings on both
Pythons. Now that the transformer is gone, we can dispense with this
nonsense.
Methodology:
I ran
hg locate 'set:added() or modified() or clean()' | egrep '.*\.py$' | xargs egrep --color=never -n -- \[\^b\]\[\^a-z\]r\'\[\^\'\\\\\]\*\'\[\^\'\
in an emacs grep-mode buffer, and then used a keyboard macro to
iterate over the results and remove the r prefix as needed.
# skip-blame removing unneeded r prefixes left over from Python 3 migration.
Differential Revision: https://phab.mercurial-scm.org/D7306
author | Augie Fackler <augie@google.com> |
---|---|
date | Fri, 08 Nov 2019 11:19:20 -0800 |
parents | 313e3a279828 |
children | b1a1702262c9 86a7b7abf28e |
comparison
equal
deleted
inserted
replaced
43553:47fac1692ede | 43554:9f70512ae2cf |
---|---|
41 """Return path and query that has been split from uri | 41 """Return path and query that has been split from uri |
42 | 42 |
43 Just like CGI environment, the path is unquoted, the query is | 43 Just like CGI environment, the path is unquoted, the query is |
44 not. | 44 not. |
45 """ | 45 """ |
46 if r'?' in uri: | 46 if '?' in uri: |
47 path, query = uri.split(r'?', 1) | 47 path, query = uri.split('?', 1) |
48 else: | 48 else: |
49 path, query = uri, r'' | 49 path, query = uri, r'' |
50 return urlreq.unquote(path), query | 50 return urlreq.unquote(path), query |
51 | 51 |
52 | 52 |
95 self._log_any(self.server.errorlog, format, *args) | 95 self._log_any(self.server.errorlog, format, *args) |
96 | 96 |
97 def log_message(self, format, *args): | 97 def log_message(self, format, *args): |
98 self._log_any(self.server.accesslog, format, *args) | 98 self._log_any(self.server.accesslog, format, *args) |
99 | 99 |
100 def log_request(self, code=r'-', size=r'-'): | 100 def log_request(self, code='-', size='-'): |
101 xheaders = [] | 101 xheaders = [] |
102 if util.safehasattr(self, b'headers'): | 102 if util.safehasattr(self, b'headers'): |
103 xheaders = [ | 103 xheaders = [ |
104 h for h in self.headers.items() if h[0].startswith(r'x-') | 104 h for h in self.headers.items() if h[0].startswith('x-') |
105 ] | 105 ] |
106 self.log_message( | 106 self.log_message( |
107 r'"%s" %s %s%s', | 107 '"%s" %s %s%s', |
108 self.requestline, | 108 self.requestline, |
109 str(code), | 109 str(code), |
110 str(size), | 110 str(size), |
111 r''.join([r' %s:%s' % h for h in sorted(xheaders)]), | 111 ''.join([' %s:%s' % h for h in sorted(xheaders)]), |
112 ) | 112 ) |
113 | 113 |
114 def do_write(self): | 114 def do_write(self): |
115 try: | 115 try: |
116 self.do_hgweb() | 116 self.do_hgweb() |
158 # Ensure the slicing of path below is valid | 158 # Ensure the slicing of path below is valid |
159 if path != self.server.prefix and not path.startswith( | 159 if path != self.server.prefix and not path.startswith( |
160 self.server.prefix + b'/' | 160 self.server.prefix + b'/' |
161 ): | 161 ): |
162 self._start_response(pycompat.strurl(common.statusmessage(404)), []) | 162 self._start_response(pycompat.strurl(common.statusmessage(404)), []) |
163 if self.command == r'POST': | 163 if self.command == 'POST': |
164 # Paranoia: tell the client we're going to close the | 164 # Paranoia: tell the client we're going to close the |
165 # socket so they don't try and reuse a socket that | 165 # socket so they don't try and reuse a socket that |
166 # might have a POST body waiting to confuse us. We do | 166 # might have a POST body waiting to confuse us. We do |
167 # this by directly munging self.saved_headers because | 167 # this by directly munging self.saved_headers because |
168 # self._start_response ignores Connection headers. | 168 # self._start_response ignores Connection headers. |
169 self.saved_headers = [(r'Connection', r'Close')] | 169 self.saved_headers = [('Connection', 'Close')] |
170 self._write(b"Not Found") | 170 self._write(b"Not Found") |
171 self._done() | 171 self._done() |
172 return | 172 return |
173 | 173 |
174 env = {} | 174 env = {} |
175 env[r'GATEWAY_INTERFACE'] = r'CGI/1.1' | 175 env['GATEWAY_INTERFACE'] = 'CGI/1.1' |
176 env[r'REQUEST_METHOD'] = self.command | 176 env['REQUEST_METHOD'] = self.command |
177 env[r'SERVER_NAME'] = self.server.server_name | 177 env['SERVER_NAME'] = self.server.server_name |
178 env[r'SERVER_PORT'] = str(self.server.server_port) | 178 env['SERVER_PORT'] = str(self.server.server_port) |
179 env[r'REQUEST_URI'] = self.path | 179 env['REQUEST_URI'] = self.path |
180 env[r'SCRIPT_NAME'] = pycompat.sysstr(self.server.prefix) | 180 env['SCRIPT_NAME'] = pycompat.sysstr(self.server.prefix) |
181 env[r'PATH_INFO'] = pycompat.sysstr(path[len(self.server.prefix) :]) | 181 env['PATH_INFO'] = pycompat.sysstr(path[len(self.server.prefix) :]) |
182 env[r'REMOTE_HOST'] = self.client_address[0] | 182 env['REMOTE_HOST'] = self.client_address[0] |
183 env[r'REMOTE_ADDR'] = self.client_address[0] | 183 env['REMOTE_ADDR'] = self.client_address[0] |
184 env[r'QUERY_STRING'] = query or r'' | 184 env['QUERY_STRING'] = query or '' |
185 | 185 |
186 if pycompat.ispy3: | 186 if pycompat.ispy3: |
187 if self.headers.get_content_type() is None: | 187 if self.headers.get_content_type() is None: |
188 env[r'CONTENT_TYPE'] = self.headers.get_default_type() | 188 env['CONTENT_TYPE'] = self.headers.get_default_type() |
189 else: | 189 else: |
190 env[r'CONTENT_TYPE'] = self.headers.get_content_type() | 190 env['CONTENT_TYPE'] = self.headers.get_content_type() |
191 length = self.headers.get(r'content-length') | 191 length = self.headers.get('content-length') |
192 else: | 192 else: |
193 if self.headers.typeheader is None: | 193 if self.headers.typeheader is None: |
194 env[r'CONTENT_TYPE'] = self.headers.type | 194 env['CONTENT_TYPE'] = self.headers.type |
195 else: | 195 else: |
196 env[r'CONTENT_TYPE'] = self.headers.typeheader | 196 env['CONTENT_TYPE'] = self.headers.typeheader |
197 length = self.headers.getheader(r'content-length') | 197 length = self.headers.getheader('content-length') |
198 if length: | 198 if length: |
199 env[r'CONTENT_LENGTH'] = length | 199 env['CONTENT_LENGTH'] = length |
200 for header in [ | 200 for header in [ |
201 h | 201 h |
202 for h in self.headers.keys() | 202 for h in self.headers.keys() |
203 if h.lower() not in (r'content-type', r'content-length') | 203 if h.lower() not in ('content-type', 'content-length') |
204 ]: | 204 ]: |
205 hkey = r'HTTP_' + header.replace(r'-', r'_').upper() | 205 hkey = 'HTTP_' + header.replace('-', '_').upper() |
206 hval = self.headers.get(header) | 206 hval = self.headers.get(header) |
207 hval = hval.replace(r'\n', r'').strip() | 207 hval = hval.replace('\n', '').strip() |
208 if hval: | 208 if hval: |
209 env[hkey] = hval | 209 env[hkey] = hval |
210 env[r'SERVER_PROTOCOL'] = self.request_version | 210 env['SERVER_PROTOCOL'] = self.request_version |
211 env[r'wsgi.version'] = (1, 0) | 211 env['wsgi.version'] = (1, 0) |
212 env[r'wsgi.url_scheme'] = pycompat.sysstr(self.url_scheme) | 212 env['wsgi.url_scheme'] = pycompat.sysstr(self.url_scheme) |
213 if env.get(r'HTTP_EXPECT', b'').lower() == b'100-continue': | 213 if env.get('HTTP_EXPECT', b'').lower() == b'100-continue': |
214 self.rfile = common.continuereader(self.rfile, self.wfile.write) | 214 self.rfile = common.continuereader(self.rfile, self.wfile.write) |
215 | 215 |
216 env[r'wsgi.input'] = self.rfile | 216 env['wsgi.input'] = self.rfile |
217 env[r'wsgi.errors'] = _error_logger(self) | 217 env['wsgi.errors'] = _error_logger(self) |
218 env[r'wsgi.multithread'] = isinstance( | 218 env['wsgi.multithread'] = isinstance( |
219 self.server, socketserver.ThreadingMixIn | 219 self.server, socketserver.ThreadingMixIn |
220 ) | 220 ) |
221 if util.safehasattr(socketserver, b'ForkingMixIn'): | 221 if util.safehasattr(socketserver, b'ForkingMixIn'): |
222 env[r'wsgi.multiprocess'] = isinstance( | 222 env['wsgi.multiprocess'] = isinstance( |
223 self.server, socketserver.ForkingMixIn | 223 self.server, socketserver.ForkingMixIn |
224 ) | 224 ) |
225 else: | 225 else: |
226 env[r'wsgi.multiprocess'] = False | 226 env['wsgi.multiprocess'] = False |
227 | 227 |
228 env[r'wsgi.run_once'] = 0 | 228 env['wsgi.run_once'] = 0 |
229 | 229 |
230 wsgiref.validate.check_environ(env) | 230 wsgiref.validate.check_environ(env) |
231 | 231 |
232 self.saved_status = None | 232 self.saved_status = None |
233 self.saved_headers = [] | 233 self.saved_headers = [] |
249 self.send_response(*saved_status) | 249 self.send_response(*saved_status) |
250 self.length = None | 250 self.length = None |
251 self._chunked = False | 251 self._chunked = False |
252 for h in self.saved_headers: | 252 for h in self.saved_headers: |
253 self.send_header(*h) | 253 self.send_header(*h) |
254 if h[0].lower() == r'content-length': | 254 if h[0].lower() == 'content-length': |
255 self.length = int(h[1]) | 255 self.length = int(h[1]) |
256 if self.length is None and saved_status[0] != common.HTTP_NOT_MODIFIED: | 256 if self.length is None and saved_status[0] != common.HTTP_NOT_MODIFIED: |
257 self._chunked = ( | 257 self._chunked = ( |
258 not self.close_connection | 258 not self.close_connection and self.request_version == 'HTTP/1.1' |
259 and self.request_version == r'HTTP/1.1' | |
260 ) | 259 ) |
261 if self._chunked: | 260 if self._chunked: |
262 self.send_header(r'Transfer-Encoding', r'chunked') | 261 self.send_header('Transfer-Encoding', 'chunked') |
263 else: | 262 else: |
264 self.send_header(r'Connection', r'close') | 263 self.send_header('Connection', 'close') |
265 self.end_headers() | 264 self.end_headers() |
266 self.sent_headers = True | 265 self.sent_headers = True |
267 | 266 |
268 def _start_response(self, http_status, headers, exc_info=None): | 267 def _start_response(self, http_status, headers, exc_info=None): |
269 assert isinstance(http_status, str) | 268 assert isinstance(http_status, str) |
270 code, msg = http_status.split(None, 1) | 269 code, msg = http_status.split(None, 1) |
271 code = int(code) | 270 code = int(code) |
272 self.saved_status = http_status | 271 self.saved_status = http_status |
273 bad_headers = (r'connection', r'transfer-encoding') | 272 bad_headers = ('connection', 'transfer-encoding') |
274 self.saved_headers = [ | 273 self.saved_headers = [ |
275 h for h in headers if h[0].lower() not in bad_headers | 274 h for h in headers if h[0].lower() not in bad_headers |
276 ] | 275 ] |
277 return self._write | 276 return self._write |
278 | 277 |