^c^lddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z mZmZm Z mZmZmZddlmZmZGddZGd d ZGd d Zd diZdZGddZddZGddZdZdZ GddZ!GddZ"dS)N)_)getattr)encodingerror loggingutilpycompat repocacheutilvfs)cborutilprocutilc:eZdZdZdZedZdZdZdS)channeledoutputz^ Write data to out in the following format: data length (unsigned int), data c"||_||_dSN)outchannel)selfrrs 9/usr/lib/python3/dist-packages/mercurial/commandserver.py__init__zchanneledoutput.__init__+s cd|jzSNs <%c-channel>rrs rnamezchanneledoutput.name/--rc |sdS|jtjd|jt ||z|jdS)N>cI)rwritestructpackrlenflush)rdatas rr!zchanneledoutput.write3sV  F v{64<TCCdJKKK rcR|dvrt|t|j|SN)isattyfilenotellseek)AttributeErrorrrrattrs r __getattr__zchanneledoutput.__getattr__:. 7 7 7 && &tx&&&rN) __name__ __module__ __qualname____doc__rpropertyrr!r0rrrr#sf..X.'''''rrc(eZdZdZdZdZdZdZdS)channeledmessagea  Write encoded message and metadata to out in the following format: data length (unsigned int), encoded message and metadata, as a flat key-value dict. Each message should have 'type' attribute. Messages of unknown type should be ignored. TcLt|||_||_||_dSr)r_coutr _encodefn)rrr encodenameencodefns rrzchanneledmessage.__init__Ns%$S'22 " !rc tj|}|||d<|j||dS)Nsdata)r byteskwargsr;r!r<)rr&optss rr!zchanneledmessage.writeSsI#D))   DM --.....rc,t|j|Sr)rr;r.s rr0zchanneledmessage.__getattr__Ystz4(((rN)r2r3r4r5 structuredrr!r0r7rrr9r9@sRJ""" /// )))))rr9c^eZdZdZdZdZedZd dZdZ d dZ d Z d Z e Z d Zd S)channeledinputa/ Read data from in_. Requests for input are written to out in the following format: channel identifier - 'I' for plain input, 'L' line based (1 byte) how many bytes to send at most (unsigned int), The client replies with: data length (unsigned int), 0 meaning EOF data ic0||_||_||_dSr)in_rr)rrGrrs rrzchanneledinput.__init__ls rcd|jzSrrrs rrzchanneledinput.nameqrrc|dkrJ|j}|||j}|}|r"|||j}||z }|"|S|||jSNr) maxchunksize_readrrsizesbufs rreadzchanneledinput.readus| !88$D 4..AC JJtT\22q J::dDL11 1rcN|sdS|dksJ|jtjd|||j|jd}tjd|d}|sdS|j|S)Nrrr >I)rr!r"r#r%rGrRunpack)rrOrlengths rrMzchanneledinput._reads 3axxxx v{67D99::: q!!uf--a0 )38==(( (rc|dkrj|j}||d}|}|rG|ds2||d}||z }|r|d2|S||dS)NrL )rLrMendswithrNs rreadlinezchanneledinput.readlines !88$D 4&&AC AJJu-- JJtT**q AJJu-- J::dD)) )rc|Srr7rs r__iter__zchanneledinput.__iter__s rc@|}|st|Sr)r\ StopIteration)rls rnextzchanneledinput.nexts" MMOO  rcR|dvrt|t|j|Sr()r-rrGr.s rr0zchanneledinput.__getattr__r1rN)rI)r2r3r4r5rLrr6rrRrMr\r^rb__next__r0r7rrrErE]s  L ..X. 2 2 2 2))) * * * * H'''''rrEscborcPdtj|SNr)joinr streamencode)vs rrjssxx 5a 8 899rc|dd}|D]$}t|}|r||fcS%tjdd|z)N cmdserversmessage-encodingss"no supported message encodings: %s ) configlist_messageencodersgetrAbortrg)uiencnamesnfs r_selectmessageencoderrvsz}}\+?@@H    # #  a4KKK  +- (0C0CC  rcZeZdZdZddZdZdZdZdZdZ d Z d Z d Z e e d Z d ZdS)serverzm Listens for commands on fin, runs them and writes the output on a channel based stream to fout. Nctj|_|r |j|_||_|j|_n||_dx|_|_||_t|d|_ t|d|_ t|d|_ t||d|_ t|d|_|jdddkr:|j|_t#|jd|j d|_|d d d kr)t'|\}}t)|d |||_||_|dd|_d|_|js0t3jt2jt2j|_dSdS)NdeoIrrllog-)repofpuismessage-outputschannelmsshutdown-on-interrupt)rgetcwdcwdbaseuirrrrepoui_prereposetupsrcdebugcerrcoutrEcincresultconfigcopy setuploggingcmsgrvr9client configbool_shutdown_on_interrupt_old_inthandlersignalSIGINTSIG_IGN)rrrrfinfout prereposetupsencnameencfns rrzserver.__init__s?$$  +kDGDI'DKKDG&* *DI +%dD11 #D$// #D$// !#tT22&tT22 7>>, / /4 7 7gllnnDG t < < < < 99U- . .* < <2266NGU(tWeDDDI ')mm 2' ' # $* P#)=#O#OD  P Prc`|js&tjtj|jdSdS)z9release and restore resources taken during server sessionN)rrrrrs rcleanupzserver.cleanups4* ? M&-)= > > > > > ? ?rcT|sdS|j|}|st|Srf)rrREOFError)rrOr&s rrMz server._reads8 3{%% N rctjd|dd}|sdS||S)z[read a string from the channel format: data length (uint32), data rUrTrr)r"rVrM)rrWs r_readstrzserver._readstr sC udjjmm44Q7 3zz&!!!rc\|}|r|dSgS)z6read a list of NULL separated strings from the channel)rsplit)rrPs r _readlistzserver._readlists, MMOO  775>> !IrcNddlm}|jr||S tjtj|j||tjtjtjS#tj$rt$rYnwxYw tjtjtjn.#tjtjtjwxYw|j tddS)Nrdispatchs interrupted! rI) rrrrrrrSignalInterruptKeyboardInterruptrrr)rreqrs r_dispatchcommandzserver._dispatchcommands  & *$$S)) ) 9 M&-)= > > >$$S)) M&- 8 8 8 8$         D    M&- 8 8 8 8FM&- 8 8 8 8  Q())***rs#8BB"C!B""C+C;c ddlm}|}|j}|g}|jr||j_|j|j}|j|_| ||x|j_|jj _ |j |D]H}| tj|jds|ddddI||dd||j|j|j|j|j|j } ||d z}|jt5jd t9|d |vrt;j|jdSdS#d |vrt;j|jwwxYw) zireads a list of terminated arguments, executes and writes the return code to the result channelrrsfilenorsnonttystrues commandserverNrs>is--cwd) rrrrrrrrr __class__appenddirstate_ui invalidateall resetstater safehasattrr setconfigrequestrrrrrrr!r"r#intoschdirr) rrargscopieduiuisrrrrrets r runcommandzserver.runcommand6s ~~7<<>>j 9 &'DI [**4;77F"-FK JJv   4: :DIL49-1 I # # % % % J JB MMOOO#DHi88 J UIw8HIII G  I H I I I-    #'',,s2C L  v{5#c((;; < < <4""""" x4"""" s AG G"cN|jtjdS)z1writes the current encoding to the result channelN)rr!rrs r getencodingzserver.getencodinghs! 8,-----rc|jdd}|rL|j|}|r ||n$t jt d|z|dkS)NrIsunknown command %sr)rr\ capabilitiesrprrqr)rcmdhandlers rserveonezserver.serveonelsk""$$SbS)  B'++C00G B k!$9":":S"@AAAczr)s runcommands getencodingcddt|jz}|dz }|dtjzz }|dz }|jr|d|jjzz }|dt jzz }tjtdr|dz }|dtj d zz }|j | | r | n#t$rYd SwxYwd S) Nscapabilities: rmrZs encoding: smessage-encoding: %s spid: %dsgetpgidspgid: %drr)rgsortedrrrrgetpidr rrgetpgidrr!rr)rhellomsgs rservez server.serve{s"$tyy8I1J1J'K'KKEMH$555E 9 G 1DI4FF FHJ!2!222  B + + 4  H  bjmm3 3H !!! --// --//    11  qs )C77 DDr)r2r3r4r5rrrMrrrrrrrrr7rrrxrxs ,P,P,P,P\???    " " "40#0#0#d...   $.{KKLrrxc|dd}|sdSt|dd}|dkr|rtj||}n|dkrtj|j|}nt jt j|}| dd}| dd}tj tj|}tj|tj||||}|h} |r4| |j| |j| D]} | d|dS) zSet up server logging facility If cmdserver.log is '-', log messages will be sent to the given fp. It should be the 'd' channel while a client is connected, and otherwise is the stderr of the server process. rlrNs track-logrs max-log-filess max-log-size)maxfilesmaxsize)rsetrnrfileobjectloggerferrr abspath expandpath configint configbytesvfsmodr rpathdirname fileloggerbasenameaddrrr setlogger) rrrrlogpathtrackedloggerrrr targetuisus rrrs{ii f--G "-- l;;<??..??j1122'  G  W % %     I  dk""" dg ** L&))))**rc eZdZdZdZdZdS) pipeservicec"||_||_dSr)rrr)rrrrrAs rrzpipeservice.__init__s rcdSrr7rs rinitzpipeservice.inits rc$|j}|5\}}t||j||} ||cdddS#|wxYw#1swxYwYdSr)rrprotectedfinoutrxrrr)rrrrrsvs rrunzpipeservice.runs W   ! ! [c4DIsD11B xxzz                     s(BA, B,BBB  B N)r2r3r4rrrr7rrrrsA        rrcVtjddtjdSrK)rsetpgidrandomseedr7rr_initworkerprocessrs'Jq! KMMMMMrcb|d}|d}d} ||||||} |n\#tj$r4}|t d|jzYd}~nd}~wt $rYnt$rYnwxYw|n#|wxYwnX#|r|j } nt|d} | tj tjxYw | |dS#t $rYdSwxYw#| |w#t $rYwwxYwxYw)Nrbwbs abort: %s r{)makefilerrrqrmessageBrokenPipeErrorrrrrr!r strtolocal traceback format_excclose) rrrconncreatecmdserverrrrrinstrs r _serverequestrs --  C ==  D B _T4dM B B  HHJJJJ{ 7 7 7 HHQ~&&5 6 6 6 6 6 6 6 6    D     D  JJLLLLBJJLLLLL  /7DD"4..D 8&y';'='=>>???     JJLLLLL    DD    JJLLLL    D sCACB,"*B C B,C B,)C+B,,C/CCCE3AD33E3 E"" E0/E03F. FF. F+(F.*F++F.c:eZdZdZdZdZdZdZdZdZ dZ dS) unixservicehandlerzSet of pluggable operations for unix-mode services Almost all methods except for createcmdserver() are called in the main process. You can't pass mutable resource back from createcmdserver(). Nc||_dSr)rr)rrrs rrzunixservicehandler.__init__s rctj|||tj|jtd|z|jdS)Nslistening at %s ) r bindunixsocketlistensocket SOMAXCONNrrstatusrr%)rsockaddresss r bindsocketzunixservicehandler.bindsockets_ D'*** F$%%% q-..8999  rc.tj|dSr)runlink)rrs r unlinksocketzunixservicehandler.unlinksockets 'rcdS)z9True if server should shut down; checked per pollintervalFr7rs r shouldexitzunixservicehandler.shouldexitsurcdS)z/Called when main process notices new connectionNr7rs r newconnectionz unixservicehandler.newconnection src2t|j||||S)zhCreate new command server instance; called in the process that serves for the current connection)rxrr)rrrrrrs rrz"unixservicehandler.createcmdserver#sdgtS$ >>>r) r2r3r4r5 pollintervalrrrrrrr7rrrrs L >>>?????rrc\eZdZdZddZdZdZdZdZdZ d Z d Z d Z d Z d ZdZdS)unixforkingservicezG Listens on unix domain socket and forks server per connection Nc||_||_|d|_tjt ds!t jtd|js!t jtd|pt||_ d|_ d|_ d|_ d|_t|_d|_|dd}|dkr!t jtdt'j|||_t,jrt1jdSdS) NsaddresssAF_UNIXsunsupported platforms'no socket path specified with --addressrlsmax-repo-cachers(negative max-repo-cache size not allowed)rrrrr rr rrqrr_servicehandler_sock_mainipc _workeripc_oldsigchldhandlerr _workerpids_socketunlinkedrr repoloader _repoloaderr isdarwinrgui)rrrrrArmaxlens rrzunixforkingservice.__init__.s& J'  33 :+a 78899 9| M+a JKKLL L&@*> A::+a KLLMM M$/F;;    LNNNNN  rc tjtj|_tjtjtj}|\|_|_|j|j|j tj tdrtj tjtjtj|j}||_d|_|jdS)Ns unblocksignalF)r AF_UNIXr socketpair SOCK_DGRAMrrrrrr rr unblocksignalrSIGCHLD_sigchldhandlerr r"r$start)ros rrzunixforkingservice.initGs]6>22   fnf.? @ @)*& t '' DLAAA  H&6 7 7 3  "6> 2 2 2 M&.$*> ? ?"#$      rcd|js(|j|jd|_dSdS)NT)r"rrrrs r _unlinksocketz unixforkingservice._unlinksocketVs># (  - -dl ; ; ;#'D  ( (rchtjtj|j|j|j|j||j | ddSrK) rr-r rrrrr2r$stop _reapworkersrs r_cleanupzunixforkingservice._cleanup[s fnd&=>>>      !rc ||dS#|wxYwr) _mainloopr6rs rrzunixforkingservice.runes:  NN    MMOOOOODMMOOOOs ,Acd}|j}tj}||jtj|j||jtj|j |s*| r| d}| |j }|s|rn%N|D] \}}| |j|!q|dS)NFT)timeout)r selectorsDefaultSelectorregisterr EVENT_READ_acceptnewconnectionr_handlemainipcrr2selectrr&fileobjr)rexitinghselectoreventskey_masks rr8zunixforkingservice._mainloopks  ,.. J ,d.G     M9/1D    0 q||~~  ""$$$__Q^_<>>     !#/      JLLLLLBJLLLLs )A99Bc6|sdSGfdd|j|_|j|_|j|j}|dS|jdd|jtj ||dS)Nc"eZdZfdZxZS)8unixforkingservice._reposetup..unixcmdserverrepoct| |j|jdS#t j$r|jddYdSwxYw)Nrls#failed to send repo root to master ) superr _cmdserveripcsendrootr rrrrM)rrunixcmdserverrepos rrz>unixforkingservice._reposetup..unixcmdserverrepo.closes'..44666&++DI66666|GKK$&MsA*A43A4)r2r3r4r __classcell__)rrks@rrkres>          rrks repocachesrepo from cache: %s ) localrrrhr$rprjrrrMr copycache)rrrr cachedreporks @rr`zunixforkingservice._reposetupszz||  F          +!_%))$)44   F  L":DIFFFJ-----rr)r2r3r4r5rrr2r6rr8r?r@r.r5rNr`r7rrrr)s2 ! ! !(((  :"""B$$$ &&& * * *   .....rr)NN)#rarrr;rr r"ri18nrr rrrrrr r r rutilsr rrr9rErorvrxrrrrrrr7rrrrs   '''''''':)))))))):T'T'T'T'T'T'T'T'p 9 9 NNNNNNNNb&*&*&*&*R($   F????????Dz.z.z.z.z.z.z.z.z.z.r