mercurial/hgweb/server.py
changeset 43077 687b865b95ad
parent 43076 2372284d9457
child 43085 eef9a2d67051
--- a/mercurial/hgweb/server.py	Sun Oct 06 09:45:02 2019 -0400
+++ b/mercurial/hgweb/server.py	Sun Oct 06 09:48:39 2019 -0400
@@ -54,7 +54,7 @@
         pass
 
     def write(self, str):
-        self.writelines(str.split('\n'))
+        self.writelines(str.split(b'\n'))
 
     def writelines(self, seq):
         for msg in seq:
@@ -63,7 +63,7 @@
 
 class _httprequesthandler(httpservermod.basehttprequesthandler):
 
-    url_scheme = 'http'
+    url_scheme = b'http'
 
     @staticmethod
     def preparehttpserver(httpserver, ui):
@@ -83,7 +83,7 @@
                     format % args,
                 )
             )
-            + '\n'
+            + b'\n'
         )
         fp.flush()
 
@@ -95,7 +95,7 @@
 
     def log_request(self, code=r'-', size=r'-'):
         xheaders = []
-        if util.safehasattr(self, 'headers'):
+        if util.safehasattr(self, b'headers'):
             xheaders = [
                 h for h in self.headers.items() if h[0].startswith(r'x-')
             ]
@@ -156,7 +156,7 @@
             self.server.prefix + b'/'
         ):
             self._start_response(pycompat.strurl(common.statusmessage(404)), [])
-            if self.command == 'POST':
+            if self.command == b'POST':
                 # Paranoia: tell the client we're going to close the
                 # socket so they don't try and reuse a socket that
                 # might have a POST body waiting to confuse us. We do
@@ -206,7 +206,7 @@
         env[r'SERVER_PROTOCOL'] = self.request_version
         env[r'wsgi.version'] = (1, 0)
         env[r'wsgi.url_scheme'] = pycompat.sysstr(self.url_scheme)
-        if env.get(r'HTTP_EXPECT', '').lower() == '100-continue':
+        if env.get(r'HTTP_EXPECT', b'').lower() == b'100-continue':
             self.rfile = common.continuereader(self.rfile, self.wfile.write)
 
         env[r'wsgi.input'] = self.rfile
@@ -214,7 +214,7 @@
         env[r'wsgi.multithread'] = isinstance(
             self.server, socketserver.ThreadingMixIn
         )
-        if util.safehasattr(socketserver, 'ForkingMixIn'):
+        if util.safehasattr(socketserver, b'ForkingMixIn'):
             env[r'wsgi.multiprocess'] = isinstance(
                 self.server, socketserver.ForkingMixIn
             )
@@ -238,7 +238,7 @@
     def send_headers(self):
         if not self.saved_status:
             raise AssertionError(
-                "Sending headers before " "start_response() called"
+                b"Sending headers before " b"start_response() called"
             )
         saved_status = self.saved_status.split(None, 1)
         saved_status[0] = int(saved_status[0])
@@ -274,24 +274,24 @@
 
     def _write(self, data):
         if not self.saved_status:
-            raise AssertionError("data written before start_response() called")
+            raise AssertionError(b"data written before start_response() called")
         elif not self.sent_headers:
             self.send_headers()
         if self.length is not None:
             if len(data) > self.length:
                 raise AssertionError(
-                    "Content-length header sent, but more "
-                    "bytes than specified are being written."
+                    b"Content-length header sent, but more "
+                    b"bytes than specified are being written."
                 )
             self.length = self.length - len(data)
         elif self._chunked and data:
-            data = '%x\r\n%s\r\n' % (len(data), data)
+            data = b'%x\r\n%s\r\n' % (len(data), data)
         self.wfile.write(data)
         self.wfile.flush()
 
     def _done(self):
         if self._chunked:
-            self.wfile.write('0\r\n\r\n')
+            self.wfile.write(b'0\r\n\r\n')
             self.wfile.flush()
 
     def version_string(self):
@@ -303,7 +303,7 @@
 class _httprequesthandlerssl(_httprequesthandler):
     """HTTPS handler based on Python's ssl module"""
 
-    url_scheme = 'https'
+    url_scheme = b'https'
 
     @staticmethod
     def preparehttpserver(httpserver, ui):
@@ -312,14 +312,14 @@
 
             sslutil.modernssl
         except ImportError:
-            raise error.Abort(_("SSL support is unavailable"))
+            raise error.Abort(_(b"SSL support is unavailable"))
 
-        certfile = ui.config('web', 'certificate')
+        certfile = ui.config(b'web', b'certificate')
 
         # These config options are currently only meant for testing. Use
         # at your own risk.
-        cafile = ui.config('devel', 'servercafile')
-        reqcert = ui.configbool('devel', 'serverrequirecert')
+        cafile = ui.config(b'devel', b'servercafile')
+        reqcert = ui.configbool(b'devel', b'serverrequirecert')
 
         httpserver.socket = sslutil.wrapserversocket(
             httpserver.socket,
@@ -341,7 +341,7 @@
     threading.activeCount()  # silence pyflakes and bypass demandimport
     _mixin = socketserver.ThreadingMixIn
 except ImportError:
-    if util.safehasattr(os, "fork"):
+    if util.safehasattr(os, b"fork"):
         _mixin = socketserver.ForkingMixIn
     else:
 
@@ -350,8 +350,8 @@
 
 
 def openlog(opt, default):
-    if opt and opt != '-':
-        return open(opt, 'ab')
+    if opt and opt != b'-':
+        return open(opt, b'ab')
     return default
 
 
@@ -368,20 +368,20 @@
 
         handler.preparehttpserver(self, ui)
 
-        prefix = ui.config('web', 'prefix')
+        prefix = ui.config(b'web', b'prefix')
         if prefix:
-            prefix = '/' + prefix.strip('/')
+            prefix = b'/' + prefix.strip(b'/')
         self.prefix = prefix
 
-        alog = openlog(ui.config('web', 'accesslog'), ui.fout)
-        elog = openlog(ui.config('web', 'errorlog'), ui.ferr)
+        alog = openlog(ui.config(b'web', b'accesslog'), ui.fout)
+        elog = openlog(ui.config(b'web', b'errorlog'), ui.ferr)
         self.accesslog = alog
         self.errorlog = elog
 
         self.addr, self.port = self.socket.getsockname()[0:2]
         self.fqaddr = socket.getfqdn(addr[0])
 
-        self.serverheader = ui.config('web', 'server-header')
+        self.serverheader = ui.config(b'web', b'server-header')
 
 
 class IPv6HTTPServer(MercurialHTTPServer):
@@ -389,18 +389,18 @@
 
     def __init__(self, *args, **kwargs):
         if self.address_family is None:
-            raise error.RepoError(_('IPv6 is not available on this system'))
+            raise error.RepoError(_(b'IPv6 is not available on this system'))
         super(IPv6HTTPServer, self).__init__(*args, **kwargs)
 
 
 def create_server(ui, app):
 
-    if ui.config('web', 'certificate'):
+    if ui.config(b'web', b'certificate'):
         handler = _httprequesthandlerssl
     else:
         handler = _httprequesthandler
 
-    if ui.configbool('web', 'ipv6'):
+    if ui.configbool(b'web', b'ipv6'):
         cls = IPv6HTTPServer
     else:
         cls = MercurialHTTPServer
@@ -423,16 +423,16 @@
         except AttributeError:
             reload(sys)
         oldenc = sys.getdefaultencoding()
-        sys.setdefaultencoding("latin1")  # or any full 8-bit encoding
+        sys.setdefaultencoding(b"latin1")  # or any full 8-bit encoding
         mimetypes.init()
         sys.setdefaultencoding(oldenc)
 
-    address = ui.config('web', 'address')
-    port = util.getport(ui.config('web', 'port'))
+    address = ui.config(b'web', b'address')
+    port = util.getport(ui.config(b'web', b'port'))
     try:
         return cls(ui, app, (address, port), handler)
     except socket.error as inst:
         raise error.Abort(
-            _("cannot start server at '%s:%d': %s")
+            _(b"cannot start server at '%s:%d': %s")
             % (address, port, encoding.strtolocal(inst.args[1]))
         )