��c@sddlmZmZmZmZddlmZddlmZddl m
Z
ddlmZm
Z
ddlmZmZddlmZddlmZdd lmZdd
lmZddlZddlZddlZddlZddlmZmZmZdd
lm Z da!d�Z"dedfde
dfdedfdedfdedfdedfdedfdedfdedfg Z#de
fdefgZ$d�Z%d�Z&de'fd��YZ(de'fd ��YZ)e*e*d!�Z+dS("i�(tNoRepotMissingTooltSKIPREVtmapfile(tconvert_cvs(tdarcs_source(tconvert_git(tmercurial_sourcetmercurial_sink(t
svn_sourcetsvn_sink(tmonotone_source(tgnuarch_source(t
bzr_source(t p4_sourceN(thgtutiltencoding(t_tasciicCs<t|t�r|jtd�S|jd�jtd�SdS(Ntreplacesutf-8(t
isinstancetunicodetencodet
orig_encodingtdecode(ts((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pytrecodestcvst
branchsorttgittsvnRt
sourcesorttdarcstmtntgnuarchtbzrtp4c
Csg}|rK|gtD]}|d^qkrKtjtd�|��nxmtD]e\}}}y-|sw||kr�||||�|fSWqRttfk
r�} |j| �qRXqRW|js�"|D]} |jd| �q�Wntjtd�|��dS(Nis"%s: invalid source repository types%s
s%%s: missing or unsupported repository( tsource_convertersRtAbortRRRtappendtquiettwrite(
tuitpathttypetrevt
exceptionsRtnametsourcetsortmodetinst((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pyt
convertsource1s)
cCs�|rE|gtD]}|d^qkrEtjtd�|��nx�tD]�\}}y$|sn||kr{|||�SWqLtk
r�}|jtd�|�qLtk
r�}tjd|��qLXqLWtjtd�|��dS(Nis'%s: invalid destination repository typesconvert: %s
s%s
s%s: unknown repository type(tsink_convertersRR'RRtnoteR(R+R,R-RR0tsinkR3((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pytconvertsink@s)tprogresssourcecBs,eZd�Zd�Zd�Zd�ZRS(cCs(||_||_||_d|_dS(Ni(R+R1t filecountt retrieved(tselfR+R1R:((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pyt__init__Ns cCsM|jd7_|jjtd�|jd|d|j�|jj||�S(Nis
getting filestitemttotal(R;R+tprogressRR:R1tgetfile(R<tfileR.((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pyRATscCs|jj|�S(N(R1t lookuprev(R<R.((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pyRCZscCs|jjtd�d�dS(Ns
getting files(R+R@RtNone(R<((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pytclose]s(t__name__t
__module__R=RARCRE(((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pyR9Ms t convertercBsbeZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z
d �ZRS(
cCs�||_||_||_||_i|_i|_d|_t||�|_ |jj�}|r�t
jj|�r�|j
|�n|jd�r�|j
|jd��|jj�|_ntj|jd��|_t||jd��|_dS(Nt authormapt splicemapt branchmap(R1tdestR+toptstcommitcachetauthorsRDt
authorfileRtmaptosR,texistst
readauthormaptgettcommontparsesplicemapRJRK(R<R+R1RLt
revmapfileRMRP((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pyR=as cCs�|}t�}i}x�|r�|jd�}||ks||jkrNqn|j|�|jjtd�t|�dtd��|j|�}g||<x/|j D]$}||j
|�|j
|�q�WqW|jjtd�d�|S(s`Return a mapping that identifies the uncommitted parents of every
uncommitted changeset.itscanningtunitt revisionsN(tsettpopRQtaddR+R@RtlentcachecommittparentsR(RD(R<theadstvisittknownRatntcommittp((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pytwalktree|s
+
cCs�x�|�D]�}||krc|jj|jj||��s
|jjtd�|�q
q
ng}xn||D]b}|jj|jj||��r�qtn||kr�tj td�|��n|j
|�qtW|||<q
WdS(s�A splicemap redefines child/parent relationships. Check the
map contains valid revision identifiers and merge the new
links in the source graph.
s8splice map revision %s is not being converted, ignoring
sunknown splice map parent: %sN(tsortedRLt hascommitRQRUR+twarnRRR'R((R<RaRJtctpcRg((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pytmergesplicemap�s!!cs �fd�}�fd�}�fd�}�fd�}�fd�}|dkrc|�}na|dkr{|�}nI|dkr�|�}n1|d kr�|�}ntjtd
�|��|��\} }
g}i}x|
r�|
�}
|
j|
�|j|
�x�| j|
g�D]�}||krig�|D]}|�jkrA|^qA||<ny||j|
�Wn<tk
r�tjtd�t|�t|
�f��nX||s$|
j d|�d||<q$q$Wq�t|�t��krtjtd
���n|S(snReturn an ordering such that every uncommitted changeset is
preceded by all its uncommitted ancestors.cs�t|�}t�}i}g}x�|r�|jd�}||krKq$n|j|�|j|g�t}xP||D]D}|�jkr�|j|�t}n|j|g�j|�qyW|s$|j|�q$q$W||fS(sReturn a (children, roots) tuple where 'children' maps parent
revision identifiers to children ones, and 'roots' is the list of
revisions without parents. 'parents' must be a mapping of revision
identifier to its parents ones.
i( RiR\R]R^t
setdefaulttFalseRQR(tTrue(RaRctseentchildrentrootsRet hasparentRg(R<(s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pytmapchildren�s&
csdg���fd�}|S(sIf the previously converted revision has a child in the
eligible revisions list, pick it. Return the list head
otherwise. Branch sort attempts to minimize branch
switching, which is harmful for Mercurial backend
compression.
csG|d}x,|D]$}�d�|kr|}PqqW|�d<|S(Ni((tnodestnextRe(Ratprev(s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pytpicknext�s
N(RD(Rz(Ra(Rys9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pytmakebranchsorter�s cs"�fd���fd�}|S(sSource specific sort.cs�j|jS(N(RNtsortkey(Re(R<(s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pyt<lambda>�scst|d��dS(Ntkeyi(Ri(Rw(tkeyfn(s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pyRz�s((Rz(R<(Rs9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pytmakesourcesorter�scs"�fd���fd�}|S(sClose order sort.cs$d�j|jk�j|jfS(NRE(RNtextraR|(Re(R<(s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pyR}�scst|d��dS(NR~i(Ri(Rw(R(s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pyRz�s((Rz(R<(Rs9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pytmakeclosesorter�scs+i���fd���fd�}|S(sSort revisions by date.cs4|�kr,tj�j|j��|<n�|S(N(Rt parsedateRNtdate(Re(tdatesR<(s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pytgetdate�s cs-tg|D]}�|�|f^q
�dS(Ni(tmin(RwRe(R�(s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pyRz�s((Rz(R<(R�R�s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pytmakedatesorter�sRtdatesortR t closesortsunknown sort mode: %ss cycle detected between %s and %sisnot all revisions were sortedN(RR'RtremoveR(RURQt
ValueErrorRtinsertRDR_(R<RaR2RvR{R�R�R�RzRstactivesRtpendingsReRlRg((RaR<s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pyttoposort�sF!
3
cCs{|j}|rw|jjtd�|�t|d�}x/|jD]$}|jd||j|f�qBW|j�ndS(Nswriting author map file %s
sw+s%s=%s
(RPR+tstatusRtopenROR*RE(R<RPtofiletauthor((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pytwriteauthormap"s "cCsTt|d�}x4|D],}|j�}|s|jd�rDqny|jdd�\}}Wn@tk
r�td�}|jj|||j�f�qnX|j�}|j�}|j j
|�d|fkrtd�}|jj|||f�||j |<qntd�}|jj
|||j ||f�qW|j�dS(Ntrt#t=is,ignoring bad line in author map file %s: %s
smapping author %s to %s
s5overriding mapping for author %s, was %s, will be %s
(R�tstript
startswithtsplitR�RR+RktrstripRORURDtdebugR�RE(R<RPtafiletlinet srcauthort dstauthortmsgtm((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pyRT+s*
(cCs_|jj|�}|jj|j|j�|_|jj|j|j�|_||j|<|S(N(R1t getcommitRORUR�RKtbranchRN(R<R.Rf((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pyR`Gs
cCs�|j|}|jj|�}t|t�ra|tkrCt}n
|j|}||j|<dS|\}}g}|jr�xW|jD]I}||jkr�|j|�n|j |j||j|j
f�q�Wn|jj|j
|�yY|j
|} |jjtd�| |f�g| D]}
|jj|
|
�^q#} Wn.tk
rug|D]}|d^q\} nXt|j|jt|��}|jj||| |||j�}
|j�|jj||
�|
|j|<dS(Nsspliced in %s as parents of %s
i(RNR1t
getchangesRt
basestringRRQRaR`R(R�RLt setbranchRJR+R�RRUtKeyErrorR9R_t putcommitREt converted(R<R.RftchangesRLtfilestcopiest pbranchesRyRaRgtbR1tnewnode((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pytcopyNs<
,
!
c Cs4z"|jj�|jj�|jj|j�|jjtd��|jj�}|j |�}|j
||j�|jjtd��|j||�}t
|�}d}|jjtd��x�t|�D]�\}}|d8}|j|j}d|kr|j�d}n|jjd|t|�f�|jjtd�t|��|jjtd �|d
td�dt
|��|j|�q�W|jjtd �d�|jj�} i}
xG| D]?}| |}|jj|t�tkr�|j||
|<q�q�W|r�|
r�|jj|
�\}
}|
r�|r�g|jj�D]}|d|krS|^qS}|r�|
|j|dd<q�q�n|jj�}i}xG|D]?}||}|jj|t�tkr�|j|||<q�q�W|r|r|jj|�n|j�Wd|j�XdS(
Nsscanning source...
ssorting...
sconverting...
is
is%d %s
ssource: %s
t
convertingRZR[R?( R1tbeforeRLt setrevmapRQR+R�RtgetheadsRhRnRJR�R_RDt enumerateRNtdesct
splitlinesRR6R@R�tgettagsRURtputtagst iteritemstgetbookmarkstputbookmarksR�tcleanup(R<R2RbRatttnumRltiR�ttagstctagstktvtnrevt
tagsparenttettagsparentst bookmarkst
cbookmarks((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pytconvertps^
$
cCs3z|jj�Wd|jj�X|jj�dS(N(RLtafterR1RQRE(R<((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pyR��s(RFRGR=RhRnR�R�RTR`R�R�R�(((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pyRH`s z " =c
Ksftjadt_|jd�s7|jd�|d<n|sjtj|�d}|jtd�|�nt|||jd��}y1t|||jd�|jd��\}}Wn8t k
r�x!|j
D]}tj|t
�q�W�nXd} g| D]}
|j|
�r�^q�t|�d
krItjtd���n|rY|dp\|}|dkr�|j�r�tjtd���n|dkr�|j�r�tjtd���n|jd�}|r�j|||�}|jt
�n|s=y|j�}Wq=t k
r9tjj|d�}q=Xnt|||||�}
|
j|�dS(NsUTF-8RIROs-hgsassuming destination %s
t dest_typetsource_typeR.RR�R R�is!more than one sort mode specifiedis1--sourcesort is not supported by this data sources0--closesort is not supported by this data sourcetfilemapRQ(s
branchsortsdatesorts
sourcesorts closesort(RRRURtdefaultdestR�RR8R4t ExceptiontcreatedtshutiltrmtreeRqR_RR'thasnativeorderthasnativecloseR�tfilemap_sourcetsetfilemapmodeRXRRR,tjoinRHR�(R+tsrcRLRXRMtdestctsrcctdefaultsortR,t sortmodesR�R2tfmapRl((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pyR��sF
(
(,RVRRRRRRR!RRRRRRt
subversionR R
tmonotoneRR#RR$R
R%RR�RRR�t mercurialRRtmercurial.i18nRRRR&R5R4R8tobjectR9RHRDR�(((s9/sys/lib/python2.7/site-packages/hgext/convert/convcmd.pyt<module>s@"
|