o ]Lb @sddlmZddlZddlmZddlmZmZddlm Z ddlm Z m Z m Z dd d Z dd d ZGd ddeZddZdS))absolute_importN)_)errorpycompat)procutil) hgweb_mod hgwebdir_modservercCsbt|tjr td|t|trtj|r"t|t s"t|t r)t j ||dSt j|||dS)acreate 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) s+Mercurial only supports encoded strings: %rbaseui)namer ) isinstancerunicoderProgrammingErrorbytesospathisdirdictlistr hgwebdirr hgweb)configrr r:/usr/lib/python3/dist-packages/mercurial/hgweb/__init__.pyrs  rcCstj||dS)Nr )r r)rr rrrr6rc@s$eZdZddZddZddZdS) httpservicecCs||_||_||_dSN)uiappopts)selfr r!r"rrr__init__;s zhttpservice.__init__cCs0tt|j|j|_|jdr|jjs|jdsdS|jj r+|jj dd}nd}d|jj }|dkr9d}|jj }|dkrDd }nd |vrLd |}|jj }d |vrXd |}d t|t||f}|jdrs|jd |n|jdr}|jj}n|jj}|td|t||jj f|jdS)Nsports print_url/z:%dz:80z0.0.0.0*:z[%s]shttp://%s%s/%ss%s s!listening at %s (bound to %s:%d) )rsetsignalhandlerr create_serverr r!httpdr"verboseprefixstripportaddrfqaddrrsysbyteswritestatusrflush)r#r.r0bindaddrr2urlr4rrrinit@sN    zhttpservice.initcCs|jdSr)r, serve_forever)r#rrrrunprzhttpservice.runN)__name__ __module__ __qualname__r$r9r;rrrrr:s 0rcCs2|r tj||dS|sttdtj||dS)Nr s5there is no Mercurial repository here (.hg not found))r rr RepoErrorrr r)r repowebconfrrr createapptsrB)NNr) __future__rri18nrr'rrutilsrr r r rrobjectrrBrrrrs      :