mercurial/hgweb.py
changeset 2124 27fd8b7a6c51
parent 2123 c0729a7f6f8a
child 2127 8a85dbbadddf
equal deleted inserted replaced
2123:c0729a7f6f8a 2124:27fd8b7a6c51
   889         else:
   889         else:
   890             req.write(self.t("error"))
   890             req.write(self.t("error"))
   891 
   891 
   892 def create_server(repo):
   892 def create_server(repo):
   893     use_threads = True
   893     use_threads = True
   894     
   894 
   895     def openlog(opt, default):
   895     def openlog(opt, default):
   896         if opt and opt != '-':
   896         if opt and opt != '-':
   897             return open(opt, 'w')
   897             return open(opt, 'w')
   898         return default
   898         return default
   899 
   899 
   901     port = int(repo.ui.config("web", "port", 8000))
   901     port = int(repo.ui.config("web", "port", 8000))
   902     use_ipv6 = repo.ui.configbool("web", "ipv6")
   902     use_ipv6 = repo.ui.configbool("web", "ipv6")
   903     webdir_conf = repo.ui.config("web", "webdir_conf")
   903     webdir_conf = repo.ui.config("web", "webdir_conf")
   904     accesslog = openlog(repo.ui.config("web", "accesslog", "-"), sys.stdout)
   904     accesslog = openlog(repo.ui.config("web", "accesslog", "-"), sys.stdout)
   905     errorlog = openlog(repo.ui.config("web", "errorlog", "-"), sys.stderr)
   905     errorlog = openlog(repo.ui.config("web", "errorlog", "-"), sys.stderr)
   906     
   906 
   907     if use_threads:
   907     if use_threads:
   908         try:
   908         try:
   909             from threading import activeCount
   909             from threading import activeCount
   910         except ImportError:
   910         except ImportError:
   911             use_threads = False
   911             use_threads = False
   918         else:
   918         else:
   919             class _mixin: pass
   919             class _mixin: pass
   920 
   920 
   921     class MercurialHTTPServer(_mixin, BaseHTTPServer.HTTPServer):
   921     class MercurialHTTPServer(_mixin, BaseHTTPServer.HTTPServer):
   922         pass
   922         pass
   923     
   923 
   924     class IPv6HTTPServer(MercurialHTTPServer):
   924     class IPv6HTTPServer(MercurialHTTPServer):
   925         address_family = getattr(socket, 'AF_INET6', None)
   925         address_family = getattr(socket, 'AF_INET6', None)
   926 
   926 
   927         def __init__(self, *args, **kwargs):
   927         def __init__(self, *args, **kwargs):
   928             if self.address_family is None:
   928             if self.address_family is None:
   951         def do_GET(self):
   951         def do_GET(self):
   952             self.do_POST()
   952             self.do_POST()
   953 
   953 
   954         def do_hgweb(self):
   954         def do_hgweb(self):
   955             path_info, query = splitURI(self.path)
   955             path_info, query = splitURI(self.path)
   956             
   956 
   957             env = {}
   957             env = {}
   958             env['GATEWAY_INTERFACE'] = 'CGI/1.1'
   958             env['GATEWAY_INTERFACE'] = 'CGI/1.1'
   959             env['REQUEST_METHOD'] = self.command
   959             env['REQUEST_METHOD'] = self.command
   960             env['SERVER_NAME'] = self.server.server_name
   960             env['SERVER_NAME'] = self.server.server_name
   961             env['SERVER_PORT'] = str(self.server.server_port)
   961             env['SERVER_PORT'] = str(self.server.server_port)
   989             if webdir_conf:
   989             if webdir_conf:
   990                 hgwebobj = hgwebdir(webdir_conf)
   990                 hgwebobj = hgwebdir(webdir_conf)
   991             else:
   991             else:
   992                 hgwebobj = hgweb(repo.__class__(repo.ui, repo.origroot))
   992                 hgwebobj = hgweb(repo.__class__(repo.ui, repo.origroot))
   993             hgwebobj.run(req)
   993             hgwebobj.run(req)
   994  
   994 
   995 
   995 
   996     if use_ipv6:
   996     if use_ipv6:
   997         return IPv6HTTPServer((address, port), hgwebhandler)
   997         return IPv6HTTPServer((address, port), hgwebhandler)
   998     else:
   998     else:
   999         return MercurialHTTPServer((address, port), hgwebhandler)
   999         return MercurialHTTPServer((address, port), hgwebhandler)