
    q&f                         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mZ 	 	 	 	 	 	 ddZej                   ej"                  ej$                  dZd	 Zd
 Zd Zy)    N   )_)open)	chgservercmdutilcommandservererrorhgwebpycompatutil)procutilurlutilc                 &    i } d   rd d   D ]\  }|j                  d      r	|dd |d<   |j                  d      r	|dd |d<   7|d	k7  s=t        j                  t        d
      |z         t        j
                  r, d   r&d|v r!t        j                  j                  |d         rt        j                  j                          t        j                  j                          t        j                  |d   t        j                  t        j                  z  t        j                   z        }		 t        j"                  |	t        j                  j%                                t        j"                  |	t        j                  j%                                t        j&                  |	        fd}
 d   r d   st	        j(                  d      \  }t        j&                  |       	 |s(t        j*                         t        j,                  dd z   }|j/                  dz         t1        dt3        |            D ]9  }||   j                  d      r||=  n ||   j                  d      s1|||dz   =  n fd}t        j4                  ||      }|dk  rt        j
                  r[t        j                  j                        r<t        d      5 }|D ]!  }t        j                  j7                  |       # 	 ddd       t        j                  t        d             |
|       t9        j:                         |r ||      S y|r |         d   s |
t        j<                                 d   r=	 t        j>                          d|v rt        jB                  |d          t        jD                          t        j                  j                          t        j                  j                          t        j                  t        jF                  t        jH                        }|}|rGt        j                  |t        jH                  t        jJ                  z  t        j                  z  d      }t        j"                  |t        jL                  j%                                t        j"                  |t        j                  j%                                t        j"                  |t        j                  j%                                t        jL                  j%                         t        j                  j%                         t        j                  j%                         f}||vrt        j&                  |       |r||vrt        j&                  |       d|v rt        jN                  |d          |r |       S y# t        j&                  |	       w xY w# 1 sw Y   xY w# t9        j:                         w xY w# t@        $ r Y w xY w)zRun a command as a service.s   daemon_postexecs   unlink:   Ns   unlinks   chdir:   s   chdirs   nones'   invalid value for --daemon-postexec: %sc                     d   r;rd}nd}t        d   |      }|j                  d| z         |j                          y y )Ns   pid_files   abs   wbs   %d
)r   writeclose)pidmodefp	appendpidoptss      2/usr/lib/python3/dist-packages/mercurial/server.pywritepidzrunservice.<locals>.writepidK   sG    d;'.BHHWs]#HHJ     s   daemons   hg-service-)prefixr   s   --daemon-postexec=unlink:%ss   --cwd=s   --cwd   c                  D    t         j                  j                          S )N)ospathexists)lockpaths   r   condfnzrunservice.<locals>.condfng   s    77>>(333r   r   s   rbs   child process failed to starti  )(
startswithr	   Abortr   r   	iswindowsr    r!   r"   r   stdoutflushstderrr   O_WRONLYO_APPENDO_BINARYdup2filenor   mkstemphgcmdsysargvappendrangelenrundetachedr   r   	tryunlinkgetpidsetsidAttributeErrorchdir
hidewindowdevnullO_RDWRO_CREATstdinunlink)r   parentfninitfnrunfnlogfilerunargsr   postexecargsinstfdr   lockfdir$   r   loglinenullfd	logfilefdstdior#   s   `     `             @r   
runservicerQ      s    L+, 	Dz**.qr(Y'+)-abX&kk@ADH 	 d#56$#*
 OO!!#OO!!#Y'r{{)BR[[)PBHOO2245HOO2245 It$67#++>B
	%"..*X-=-=ab-AANN9HDE 1c'l+ 1:((3
QZ**84AE	*4 &&w7CQw %%"''..*Bh. 8#$' 8D$OO11$788 kk!$D"EFFSMNN8$C= 	?"#	IIK |#HH\(+,RYY/	RZZ/"++=uI 	--/0
	8??1134
	8??1134NN!!#OO""$OO""$

 HHVy-HHY $IIl9-.w y L8 8 NN8$  		sK   3A$W -BW) 1A&W) 'W?.W) <X WW&!W) )X 	XX)s   chgunixs   pipes   unixc                     |d   }	 t         |   }t        j                  | |        || ||      S # t        $ r" t        j                  t	        d      |z        w xY w)N	   cmdservers   unknown mode %s)_cmdservicemapKeyErrorr	   r&   r   r   setuplogging)uirepor   r   	servicefns        r   _createcmdservicerZ      sg    D8"4(	 r4(Rt$$  8kk!./$6778s	   	0 +Ac                 ^   |j                  d      r't        j                  |j                  d            |d<   | h}|r4|j                  }|j	                  |j                  |j
                  g       n| }|j                  d      xs |j                  d      }|re|j                  d      rt        j                  t        d            | j                         }|j                  |dg       |j                  |       n9|j                  d      r&| }|r$t               }t        j                  |d|       n| }d	}|j                         D ]4  }|j                  |d      }	|	d
v r|D ]  }
|
j!                  d||	d        6 t#        j$                  |||      }t#        j&                  |||      S )Ns   ports   web_confs   webdir_confs   subreposs)   --web-conf cannot be used with --subreposs   web)sectionsr   sU   name templates style address port prefix ipv6 accesslog errorlog certificate encoding)Nr   s   serve)getr   getportbaseuiupdaterW   r	   r&   r   copy
readconfigadddictr   addwebdirpathsplit	setconfigr
   	createapphttpservice)rW   rX   r   alluisr_   webconfservuioptlistovaluapps               r   _createhgwebservicerr      s   xx(9:WTFt{{DGG,-hh{#?txx'?G88K ++a LMNN 'VH5

6	+	 fG!!$W5	4  ]]_ 2hhq#+ 	2AKK31	2	2 //&$
0CVS$//r   c                 @    |d   rt        | ||      S t        | ||      S )NrS   )rZ   rr   )rW   rX   r   s      r   createservicert      s(    L T400"2tT22r   )NNNNNF)r    i18nr   r   r    r   r   r   r	   r
   r   utilsr   r   rQ   chgunixservicepipeserviceunixforkingservicerT   rZ   rr   rt    r   r   <module>r|      ss    
     
HX ((&&--%,0^3r   