sapling/eden/scm/edenscm/mercurial/hgweb/__init__.py
Jun Wu 6462672163 pycompat: drop sysbytes, sysstr, strurl, bytesurl
Summary: There are no-ops.  This makes type checkers' life slightly easier.

Reviewed By: farnz

Differential Revision: D19673051

fbshipit-source-id: 363eb8a4e799113b16529825d45645807cafe2fc
2020-01-31 17:59:53 -08:00

106 lines
3.0 KiB
Python

# Portions Copyright (c) Facebook, Inc. and its affiliates.
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2.
# hgweb/__init__.py - web interface to a mercurial repository
#
# Copyright 21 May 2005 - (c) 2005 Jake Edge <jake@edge2.net>
# Copyright 2005 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
from __future__ import absolute_import
import os
from .. import error, pycompat, util
from ..i18n import _
from . import hgweb_mod, hgwebdir_mod, server
def hgweb(config, name=None, baseui=None):
"""create an hgweb wsgi object
config can be one of:
- repo object (single repo view)
- path to repo (single repo view)
- path to config file (multi-repo view)
- dict of virtual:real pairs (multi-repo view)
- list of virtual:real tuples (multi-repo view)
"""
if (
(isinstance(config, str) and not os.path.isdir(config))
or isinstance(config, dict)
or isinstance(config, list)
):
# create a multi-dir interface
return hgwebdir_mod.hgwebdir(config, baseui=baseui)
return hgweb_mod.hgweb(config, name=name, baseui=baseui)
def hgwebdir(config, baseui=None):
return hgwebdir_mod.hgwebdir(config, baseui=baseui)
class httpservice(object):
def __init__(self, ui, app, opts):
self.ui = ui
self.app = app
self.opts = opts
def init(self):
util.setsignalhandler()
self.httpd = server.create_server(self.ui, self.app)
portfile = self.opts.get("port_file")
if portfile:
util.writefile(portfile, "%s" % self.httpd.port)
if (self.opts["port"] or portfile) and not self.ui.verbose:
return
if self.httpd.prefix:
prefix = self.httpd.prefix.strip("/") + "/"
else:
prefix = ""
port = r":%d" % self.httpd.port
if port == r":80":
port = r""
bindaddr = self.httpd.addr
if bindaddr == r"0.0.0.0":
bindaddr = r"*"
elif r":" in bindaddr: # IPv6
bindaddr = r"[%s]" % bindaddr
fqaddr = self.httpd.fqaddr
if r":" in fqaddr:
fqaddr = r"[%s]" % fqaddr
if self.opts["port"] or portfile:
write = self.ui.status
else:
write = self.ui.write
write(
_("listening at http://%s%s/%s (bound to %s:%d)\n")
% (fqaddr, port, prefix, bindaddr, self.httpd.port)
)
self.ui.flush() # avoid buffering of status message
def run(self):
self.httpd.serve_forever()
def createapp(baseui, repo, webconf):
if webconf:
return hgwebdir_mod.hgwebdir(webconf, baseui=baseui)
else:
if not repo:
raise error.RepoError(
_("there is no Mercurial repository" " here (.hg not found)")
)
return hgweb_mod.hgweb(repo, baseui=baseui)