o ^UbO6@svddlmZddlZddlZddlmZddlmZddlm Z m Z ddl m Z ddl mZGd d d ejejZdS) )absolute_importN)_)open)errorpycompat)dateutil)commonc@seZdZd&ddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zd$d%ZdS)'monotone_sourceNcCstj||||||rt|dkrttdtj||d||_||_ d|_ ||_ t td|}t j t j |dsczt|d}|d}|Wn ty\d }Ynw|d krc|d }d } | } d } d} t|d| |_t|d| d| |_t|d| d| |_t|d| d| d| |_t|d| d| |_t|d| |_t|d| d| |_t| |d| d| |_|d| |d|} t| d|d|_d|_d|_ d|_!d|_"tj#dddd dS)!Nrs9monotone source does not support specifying multiple revssmtnFs+%s does not look like a monotone repositorys_MTNsrbsSQLite format 3s\s*s\s+"((?:\\"|[^"])*)"\s*s\s+\[(\w+)\]\s*s (?:.|\n)+sdirsfilescontentsadd_filespatchsfromstosrenamesdeletestagsrevisionsnamesvaluesattrs "mtn:execute"s"true"smonotone)abortdebname)$r converter_source__init__lenrAbortr commandlineuipath automatestdiorevsNoRepoosexistsjoinrreadcloseIOErrorrecompiledir_refile_re add_file_repatch_re rename_re delete_retag_recert_reattr_execute_re manifest_revmanifestfilesdirs checktool)selfrrepotyperrnorepofheaderspacenamevaluerevisionlinesattrr:8/usr/lib/python3/dist-packages/hgext/convert/monotone.pyrsn     zmonotone_source.__init__cOs&|jr |j|i|S|j|i|SN)r mtnrunstdio mtnrunsingler/argskwargsr:r:r;mtnrun\szmonotone_source.mtnruncOs"|j|d<|jdg|Ri|S)Ndautomate)rrun0r?r:r:r;r>bs zmonotone_source.mtnrunsinglecOst|}g}t|D]\}}|dt||f|r(|dt||fq |r6|dd|d|d|D] }|dt||fq=|dd|}|jd||j ||j | |S)Ns%d:%sroelr smtn: sending '%s' ) r byteskwargs iteritemsappendrinsertrrdebug mtnwritefpwriteflushmtnstdioreadcommandoutput)r/r@rAcommandkvargr:r:r;r=fs&         zmonotone_source.mtnrunstdiocCsFd}d}|dkr|jd}|sttd||7}|dks|dd}|jd}|dvr8ttd||jd}|dkrIttdd}d}|dkrh|jd}|s`ttd ||7}|dksQz t|dd}Wntyttd |w|j|}t||krttd t||f||||fS) Nr :rs%bad mtn packet - no end of commandnbrsmewptls#bad mtn packet - bad stream type %ss'bad mtn packet - no divider before sizes&bad mtn packet - no end of packet sizes#bad mtn packet - bad packet size %ss9bad mtn packet - unable to read full packet read %s of %s) mtnreadfprrrrrlong TypeErrorr)r/r commandnbrstream lengthstrlengthr:r:r;mtnstdioreadpacket~sT            z"monotone_source.mtnstdioreadpacketcCsg} |\}}}}|jd|||f|dkr*|dkr)ttd||fn-|dvr@|jtd|j|j|n|dkrM|jd |n |d krV||qd |S) NTsmtn: read packet %s:%s:%d rH0smtn command '%s' returned %ssews %s error: psmtn: mr ) r_rrMrrrwarnrRrKr)r/rRretvalr[r\r^outputr:r:r;rQs*   z)monotone_source.mtnstdioreadcommandoutputcCs|j|krdS|d|d|_||_i|_i|_|jD]7}|j|}|rDd}|d}|d}|j |r=|d7}||f|j|<|j |}|rTd|j|d<qdS)Nsget_manifest_of r rxT) r*rBsplitr+r,r-r"matchgroupr)r!)r/revemr9r5noder:r:r;mtnloadmanifests(       zmonotone_source.mtnloadmanifestcC||||jvSr<)rpr,r/r5rlr:r:r; mtnisfiles  zmonotone_source.mtnisfilecCrqr<)rpr-rrr:r:r;mtnisdirs  zmonotone_source.mtnisdircCsddddd}|d|}td|}|D] }|j|}|r5|\}}|dd}|dd}|||<q|d d d d |d <|S) Ns )authordate changelogbranchscertss\n\n {6}key ["\[]s\""s\\\rv.rs UTC)rBrrir(rjgroupsreplace)r/rlcertscertlistrmrnr5r6r:r:r; mtngetcertss"      zmonotone_source.mtngetcertscCs|js |dS|jS)Nsleaves)rrB splitlinesr/r:r:r;getheadsszmonotone_source.getheadscCs|r ttd|d|d}i}i}g}i}|D]l}|j|} | r4||| d<||| d<|j|} | rC||| d<|j |} | rR||| d<|j |} | r| d} | d} | | |r{d|| <| || <||| <||| <q| | |r| | | fq|D]O\} } i}|jD]}||vrq|| dr| |t| d||<d||<q|D]\}}|jd||fd|||<|||<q|D]}|||<qq||tfS) Ns-convert from monotone does not support --fulls get_revisionrfrrg/s3copying file in renamed directory from '%s' to '%s' )rrrrBrir#rjrkr$r&r%rsrtrKr, startswithritemsrrMvaluesset)r/rlfullr7r, ignoremove renameddirscopiesrmrntonamefromnamefromdirtodirrenamedtofilefromfiler:r:r; getchangessl              zmonotone_source.getchangescCs^|||sdSz |jd||d}Wn tyYdSw|||j|d\}}||fS)NNNs get_file_of)r)Nr )rsrB Exceptionrpr,get)r/r5rldataror9r:r:r;getfileEs   zmonotone_source.getfilec Csni}||}|d|dkrd|d<d}tj|dtt|d||d||d ||d|d S) Nssuspendrx1scloses%Y-%m-%dT%H:%M:%Srurvrwsparents)authordatedescrlparentsbranchextra) rrr commitrdatestrstrdaterBr)r/rlrr~ dateformatr:r:r; getcommitPs zmonotone_source.getcommitcCsBi}|ddD]}|j|}|r|d||d<q |S)Nstagsrfrgr)rBrir'rjrk)r/tagsrmrnr:r:r;gettags`s zmonotone_source.gettagscCstr<)NotImplementedError)r/rlir:r:r;getchangedfileshszmonotone_source.getchangedfilescCsz |d}t|}Wntyttdw|dkrbd|_|jd|| ddd|j \|_ |_ |j }|d krHttd ||d kr`|j }|sZttd |d ksLdSdS|jd |dS)Nsinterface_versions2unable to determine mtn automate interface versiong(@Ts/mtn automate version %f - using automate stdio rDsstdios-dsformat-version: 2 s(mtn automate stdio header unexpected: %srs1failed to reach end of mtn automate stdio headerss^mtn automate version %s - not using automate stdio (automate >= 12.0 - mtn >= 0.46 is needed) )r>floatrrrrrrrM_run2rrNrXreadline)r/ versionstrversionrr:r:r;beforemsF        zmonotone_source.beforecCs.|jr|jd|_|jd|_dSdSr<)rrNrrXrr:r:r;afters    zmonotone_source.afterr)__name__ __module__ __qualname__rrBr>r=r_rQrprsrtrrrrrrrrrr:r:r:r;r s& C.>  )r ) __future__rrrmercurial.i18nrmercurial.pycompatr mercurialrrmercurial.utilsrr rrr r:r:r:r;s