65 def __init__(self, *args, **kargs): |
66 def __init__(self, *args, **kargs): |
66 self.protocol_version = r'HTTP/1.1' |
67 self.protocol_version = r'HTTP/1.1' |
67 httpservermod.basehttprequesthandler.__init__(self, *args, **kargs) |
68 httpservermod.basehttprequesthandler.__init__(self, *args, **kargs) |
68 |
69 |
69 def _log_any(self, fp, format, *args): |
70 def _log_any(self, fp, format, *args): |
70 fp.write("%s - - [%s] %s\n" % (self.client_address[0], |
71 fp.write(pycompat.sysbytes( |
71 self.log_date_time_string(), |
72 r"%s - - [%s] %s" % (self.client_address[0], |
72 format % args)) |
73 self.log_date_time_string(), |
|
74 format % args)) + '\n') |
73 fp.flush() |
75 fp.flush() |
74 |
76 |
75 def log_error(self, format, *args): |
77 def log_error(self, format, *args): |
76 self._log_any(self.server.errorlog, format, *args) |
78 self._log_any(self.server.errorlog, format, *args) |
77 |
79 |
78 def log_message(self, format, *args): |
80 def log_message(self, format, *args): |
79 self._log_any(self.server.accesslog, format, *args) |
81 self._log_any(self.server.accesslog, format, *args) |
80 |
82 |
81 def log_request(self, code='-', size='-'): |
83 def log_request(self, code=r'-', size=r'-'): |
82 xheaders = [] |
84 xheaders = [] |
83 if util.safehasattr(self, 'headers'): |
85 if util.safehasattr(self, 'headers'): |
84 xheaders = [h for h in self.headers.items() |
86 xheaders = [h for h in self.headers.items() |
85 if h[0].startswith('x-')] |
87 if h[0].startswith(r'x-')] |
86 self.log_message('"%s" %s %s%s', |
88 self.log_message(r'"%s" %s %s%s', |
87 self.requestline, str(code), str(size), |
89 self.requestline, str(code), str(size), |
88 ''.join([' %s:%s' % h for h in sorted(xheaders)])) |
90 r''.join([r' %s:%s' % h for h in sorted(xheaders)])) |
89 |
91 |
90 def do_write(self): |
92 def do_write(self): |
91 try: |
93 try: |
92 self.do_hgweb() |
94 self.do_hgweb() |
93 except socket.error as inst: |
95 except socket.error as inst: |
99 self.do_write() |
101 self.do_write() |
100 except Exception: |
102 except Exception: |
101 self._start_response("500 Internal Server Error", []) |
103 self._start_response("500 Internal Server Error", []) |
102 self._write("Internal Server Error") |
104 self._write("Internal Server Error") |
103 self._done() |
105 self._done() |
104 tb = "".join(traceback.format_exception(*sys.exc_info())) |
106 tb = r"".join(traceback.format_exception(*sys.exc_info())) |
105 self.log_error("Exception happened during processing " |
107 # We need a native-string newline to poke in the log |
106 "request '%s':\n%s", self.path, tb) |
108 # message, because we won't get a newline when using an |
|
109 # r-string. This is the easy way out. |
|
110 newline = chr(10) |
|
111 self.log_error(r"Exception happened during processing " |
|
112 r"request '%s':%s%s", self.path, newline, tb) |
107 |
113 |
108 def do_GET(self): |
114 def do_GET(self): |
109 self.do_POST() |
115 self.do_POST() |
110 |
116 |
111 def do_hgweb(self): |
117 def do_hgweb(self): |
329 port = util.getport(ui.config('web', 'port')) |
335 port = util.getport(ui.config('web', 'port')) |
330 try: |
336 try: |
331 return cls(ui, app, (address, port), handler) |
337 return cls(ui, app, (address, port), handler) |
332 except socket.error as inst: |
338 except socket.error as inst: |
333 raise error.Abort(_("cannot start server at '%s:%d': %s") |
339 raise error.Abort(_("cannot start server at '%s:%d': %s") |
334 % (address, port, inst.args[1])) |
340 % (address, port, encoding.strtolocal(inst.args[1]))) |