>Uc@s)ddlZddlZddljZddljjZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZdefdYZdefdYZdZedkr%dejZyeeWnek r nXejd ed GHndS( iNtDepotStateExceptioncBseZdZRS(cCstj||dS(N(t Exceptiont__init__(tselftreason((s9/usr/lib/python2.7/vendor-packages/pkg/depotcontroller.pyR(s(t__name__t __module__R(((s9/usr/lib/python2.7/vendor-packages/pkg/depotcontroller.pyR&stDepotControllercBs`eZdZdZdZdAddAdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZedZdZdZdZdZdZdZ dZ!dZ"d Z#d!Z$d"Z%d#Z&d$Z'd%Z(d&Z)d'Z*d(Z+d)Z,d*Z-d+Z.d,Z/d-Z0d.Z1d/Z2d0Z3d1Z4d2Z5d3Z6d4Z7dAdAdAd5Z8d6Z9d7Z:d8Z;e<d9Z=d:Z>d;Z?d<Z@dd=ZAd>ZBed?ZCd@ZDRS(BiiitcCsXt|_t|_d|_i|_d|_d|_d|_ d|_ d|_ t|_ d|_ d|_t|_d|_d|_d|_i|_t|_t|_t|_|j|_d|_d|_d|_d|_d|_d|_g|_||_ i|_!d|_"d|_#|r5||_n|rG||_!nd|j!dscCszg}|jd|j|j|j|j|jr]|jd|j|jn|jr|jd|jd|jn|jdkr|jd|jd|jn|jdkr|jd|j|jn|j dkr|jd |j n|j r+|jd n|j rD|jd n|j r]|jd n|j rv|jd n|jr|jdn|jr|jdn|jr|jd|jn|jr|jd|jn|jr|jd|jn|jr(|jd|jn|jrQ|jddj|jn|jrz|jddj|jn|jr|jd|jn|jr|jd|jnxO|jD]D}x;|j|jD]&\}}|jd|||fqWqW|jr,|jd|jn|jrL|jd|jn|jd|jd|j|j|S(sx Return the equivalent command line invocation (as an array) for the depot as currently configured. tsetpgrps--content-roots-as%sis-ps%ds-ds--file-root=%ss --readonlys --rebuilds--mirrors--refresh-indexs --add-contents --exit-readys --cfg-file=%ss--ssl-cert-file=%ss--ssl-key-file=%ss--ssl-dialog=%ss --debug=%st,s--disable-ops=%ss --nasty %ds--nasty-sleep %ds--set-property=%s.%s='%s's--writable-root=%ss--sort-file-max-size=%ss--log-access=stdouts--log-errors=stderrN(tappendtextendR*RRRRRRRRR RR!R RRR'R(R&RRRR-R.Rt iteritemsR$R%R+(RtargsRBRCtval((s9/usr/lib/python2.7/vendor-packages/pkg/depotcontroller.pytget_argsEsx                           cCs|j|jkr!tdn|j}|jrWtddd|jn|j|_t|jdd|_ dj |}t j j }|j|jtj|d|d td tjd |j d |j d t|_|jdkrtdntj|_dS(sn'env_arg' can be a dictionary of additional os.environ entries to use when starting the depot.s!Depot already starting or runningsA depot (or some s#other network process) seems to be srunning on port %d already!twit R1tshelltstdintstdouttstderrt close_fdssCould not start DepotN(R#R"RRRRtSTARTINGtopenRRRtostenvirontcopytupdateR,t subprocesstPopenR tPIPERRttimeR)(RRtcmdlinetnewenv((s9/usr/lib/python2.7/vendor-packages/pkg/depotcontroller.pyt__initial_starts*       cCsQy|j|jrdStj}d}d}t}xtj|dkr|jj}|dk rd}t|jdd}|j }WdQXt d||fn|j rt }Pntj |q;W|tkr |j|j|_t dn|j|_Wn0tk rL|jrF|jd t nnXdS( Ngg?gD@RtrisPDepot exited with exit code %d unexpectedly while starting. Output follows: %s s:Depot did not respond to repeated attempts to make contacttnow(t_DepotController__initial_startR!RR RRRRRtreadRRR RtkillR"R#tRUNNINGtKeyboardInterrupt(Rt begintimet sleeptimetcheck_intervaltcontacttrcterrterrf((s9/usr/lib/python2.7/vendor-packages/pkg/depotcontroller.pyR3s<          cCsy|jd}t}d}xL|dkrm|jj}|dk rSt}Pntj||d9}q"W|r||kr|j|_ tS|j tSWn0t k r|jr|j dtnnXdS(Ng?g$@iR( RR RRRR RRR"R#tstopRR(RtexitRtdiedR((s9/usr/lib/python2.7/vendor-packages/pkg/depotcontroller.pytstart_expected_fails*       cCs9|jdkrdStj|jjtj|jjS(Ni(RRRRtpidtsignaltSIGUSR1R(R((s9/usr/lib/python2.7/vendor-packages/pkg/depotcontroller.pytrefreshscCs|jdkrdSzCtj|j}|tkrU|dkrUtjd|nWdy!tjd|jjt j Wnt k rnX|j |_ |jjd|_XdS(s[kill the depot; letting it live for a little while helps get reliable deathig?Ni(RRRR)R RRRRRtSIGKILLtOSErrorR"R#twait(RRtlifetime((s9/usr/lib/python2.7/vendor-packages/pkg/depotcontroller.pyRs   cCs+|j|jkr!tdn|jS(NsDepot already stopped(R#R"RR(R((s9/usr/lib/python2.7/vendor-packages/pkg/depotcontroller.pyRsN(ERRR"RRRRR2R5R6R8R9R:R;R=R>R@RARDRGRIRKRLRNROR RXR^R_R`RaRbRcRdReRfRhRiRjRkRlRnRoRvRxRyR{R|R~RRRRRRRRRRRtpropertyRRRR3RRRR(((s9/usr/lib/python2.7/vendor-packages/pkg/depotcontroller.pyR+s-                                                  I ! *  cCsat}|jdytj|Wntk r:nX|j|xtddD]}d|dj|jfGy|j dGdGt j j t jdx|jtkrqWd Gd G|j}|dkrd Gn#|dkrd d |Gnd|GHtdd}|jGH|jWqXtk rXdGH|jqXXqXWdS(NiVii s%4d: Starting Depot... (%s)Rs Done. s ... Ping g?s ... Done. sStopping Depot...s Done.s Result: Signal %dis Result: Exited %ds/tmp/depot.logRs* Keyboard Interrupt: Cleaning up Depots...(RR@RtmkdirRRNtrangeRRR3tsysRtflushRRRR RRRRR(ttestdirtdctjRRm((s9/usr/lib/python2.7/vendor-packages/pkg/depotcontroller.pyt test_func sB             t__main__s/tmp/depotcontrollertest.%ds rm -fr %ss Done(RRtpkg.pkgsubprocesst pkgsubprocessRtpkg.server.repositorytservert repositoryRSRRRRRR\RRZRRtobjectRRRtgetpidt __testdirRtsystem(((s9/usr/lib/python2.7/vendor-packages/pkg/depotcontroller.pyts.           '