a
    &0É_  ã                   @   s”   d dl mZ d dlZddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZmZmZ ddlmZ dd	d
„Zeje
je
jdœZdd„ Zdd„ Zdd„ ZdS )é    )Úabsolute_importNé   )Ú_)Úopen)Ú	chgserverÚcmdutilÚcommandserverÚerrorÚhgwebÚpycompatÚutil)ÚprocutilFc              	      sî  i }ˆd rlˆd D ]V}|  d¡r4|dd… |d< q|  d¡rP|dd… |d< q|d	krt td
ƒ| ¡‚qtjrˆd rd|v rtj |d ¡rt	j
 ¡  t	j ¡  t |d tjtjB tjB ¡}	z2t |	t	j
 ¡ ¡ t |	t	j ¡ ¡ W t |	¡ nt |	¡ 0 ‡ ‡fdd„}
ˆd rŽˆd sŽtjdd\}‰t |¡ z$|sht	 ¡ tjdd…  }| dˆ ¡ t dt|ƒ¡D ]H}||   d¡r¨||=  qÐn$||   d¡r†|||d …=  qÐq†‡fdd„}t	 ||¡}|dk rZtjrLtj ˆ¡rLtˆdƒ(}|D ]}t	j |¡ qW d  ƒ n1 sB0    Y  t tdƒ¡‚|
|ƒ W t ˆ¡ nt ˆ¡ 0 |rŠ||ƒS dS |rš|ƒ  ˆd s°|
t	 ¡ ƒ ˆd rÞzt ¡  W n t yÚ   Y n0 d|v rôt !|d ¡ t	 "¡  t	j
 ¡  t	j ¡  t tj#tj$¡}|}|rFt |tj$tj%B tjB d¡}t |t	j& ¡ ¡ t |t	j
 ¡ ¡ t |t	j ¡ ¡ t	j& ¡ t	j
 ¡ t	j ¡ f}||vr¬t |¡ |rÆ||vrÆt |¡ d|v rÞt '|d ¡ |rê|ƒ S dS )zRun a command as a service.s   daemon_postexecs   unlink:é   Ns   unlinks   chdir:é   s   chdirs   nones'   invalid value for --daemon-postexec: %sc                    s>   ˆd r:ˆ rd}nd}t ˆd |ƒ}| d|  ¡ | ¡  d S )Ns   pid_files   abs   wbs   %d
)r   ÚwriteÚclose)ÚpidÚmodeÚfp)Ú	appendpidÚopts© ú2/usr/lib/python3/dist-packages/mercurial/server.pyÚwritepidI   s    zrunservice.<locals>.writepids   daemons   hg-service-)Úprefixr   s   --daemon-postexec=unlink:%ss   --cwd=s   --cwdé   c                      s   t j ˆ ¡ S )N)ÚosÚpathÚexistsr   )Úlockpathr   r   Úcondfne   s    zrunservice.<locals>.condfnr   s   rbs   child process failed to starti¶  )(Ú
startswithr	   ÚAbortr   r   Z	iswindowsr   r   r   r   ÚstdoutÚflushÚstderrr   ÚO_WRONLYÚO_APPENDZO_BINARYÚdup2Úfilenor   ZmkstempZhgcmdZsysargvÚappendZxrangeÚlenZrundetachedr   r   Z	tryunlinkÚgetpidÚsetsidÚAttributeErrorÚchdirZ
hidewindowÚdevnullÚO_RDWRÚO_CREATÚstdinÚunlink)r   ZparentfnZinitfnZrunfnZlogfileZrunargsr   ZpostexecargsÚinstÚfdr   ZlockfdÚir    r   ÚlogÚlineZnullfdZ	logfilefdZstdior   )r   r   r   r   Ú
runservice   s®    


ÿ	ÿ

ÿ



0





ÿý



r:   )s   chgunixs   pipes   unixc                 C   sR   |d }zt | }W n$ ty8   t tdƒ| ¡‚Y n0 t | |¡ || ||ƒS )Nó	   cmdservers   unknown mode %s)Ú_cmdservicemapÚKeyErrorr	   r"   r   r   Zsetuplogging)ÚuiÚrepor   r   Z	servicefnr   r   r   Ú_createcmdservice®   s    r@   c                 C   s$  |  d¡rt |  d¡¡|d< | h}|rB|j}| |j|jg¡ n| }|  d¡pX|  d¡}|rš|  d¡rvt tdƒ¡‚|  	¡ }|j
|dgd | |¡ n,|  d¡rÂ| }|rÆtƒ }t |d|¡ n| }d	}| ¡ D ]4}|  |d¡}	|	d
v rìqÒ|D ]}
|
 d||	d¡ qðqÒt |||¡}t |||¡S )Ns   ports   web_confs   webdir_confs   subreposs)   --web-conf cannot be used with --subreposs   web)Zsectionsó    sU   name templates style address port prefix ipv6 accesslog errorlog certificate encoding)NrA   s   serve)Úgetr   ZgetportÚbaseuiÚupdater>   r	   r"   r   ÚcopyZ
readconfigÚaddÚdictr   ZaddwebdirpathÚsplitZ	setconfigr
   Z	createappZhttpservice)r>   r?   r   ZalluisrC   ZwebconfZservuiZoptlistÚoÚvalÚuZappr   r   r   Ú_createhgwebservice¸   s<    


ÿrL   c                 C   s$   |d rt | ||ƒS t| ||ƒS d S )Nr;   )r@   rL   )r>   r?   r   r   r   r   Úcreateserviceç   s    rM   )NNNNNF)Z
__future__r   r   Zi18nr   r   r   Ú r   r   r   r	   r
   r   Zutilsr   r:   ZchgunixserviceZpipeserviceZunixforkingservicer<   r@   rL   rM   r   r   r   r   Ú<module>   s(   $
      ù
 ý
/