
    6h2                        S SK Jr  S SKrS SKrS SKJr  S SKJrJr  S SK	J
r
JrJr  SSKJr  S rS	 r " S
 S\R"                  5      rg)    )annotationsN)_)errorutil)dateutilprocutil
stringutil   )commonc              #  v   #      [         R                  " U 5      nU(       d  gUv   M$  ! [         a     gf = f7f)z,Yield the dictionary objects generated by p4N)marshalloadEOFError)fds     2/usr/lib/python3/dist-packages/hgext/convert/p4.pyloaditerr      s=     QAG	 
  s    9) 9) 
6969c                F    / SQnU H  u  p#U R                  X#5      n M     U $ )a9  Perforce escapes special characters @, #, *, or %
with %40, %23, %2A, or %25 respectively

>>> decodefilename(b'portable-net45%252Bnetcore45%252Bwp8%252BMonoAndroid')
'portable-net45%2Bnetcore45%2Bwp8%2BMonoAndroid'
>>> decodefilename(b'//Depot/Directory/%2525/%2523/%23%40.%2A')
'//Depot/Directory/%25/%23/#@.*'
))s   %2A   *)s   %23   #)s   %40   @)s   %25   %)replace)filenamereplacementskvs       r   decodefilenamer   '   s,    L ##A) O    c                  J  ^  \ rS rSrSU 4S jjrS rS rS r\R                  S 5       r
\R                  S 5       r\R                  S 5       r\R                  S	 5       r\R                  S
 5       r\R                  S 5       rS rS rS rSS jrS rS rS rS rSrU =r$ )	p4_source;   c                H  > SSK Jn  [        TU ]  XX4S9  SU;   a8  UR	                  S5      (       d"  [
        R                  " [        S5      U-  5      e[
        R                  " SSS	9  0 U l	        U R                  R                  S
SUR                  5      U l        [        R                  " S5      U l        [        R                  " S5      U l        [        R                  " S5      U l        U(       a/  ['        U5      S:  a  [(        R*                  " [        S5      5      eg g )Nr
   )convcmd)revs   /   //s%   %s does not look like a P4 repository   p4F)abort   converts   p4.encodingsE   ([a-z]+)?(text|binary|symlink|apple|resource|unicode|utf\d+)(\+\w+)?$sA   \$(Id|Header|Date|DateTime|Change|File|Revision|Author):[^$\n]*\$s   \$(Id|Header):[^$\n]*\$s8   p4 source does not support specifying multiple revisions) r$   super__init__
startswithr   NoRepor   	checktoolrevmapuiconfigorig_encodingencodingrecompilere_typere_keywordsre_keywords_oldlenr   Abort)selfr2   repotypepathr%   r$   	__class__s         r   r-   p4_source.__init__<   s    t74< 6 6--:;dB  	e,(=(=
 zz
 ::
  "zz*EFCIM++*  "4r   c                    Xl         g)a_  Sets the parsed revmap dictionary.

Revmap stores mappings from a source revision to a target revision.
It is set in convertcmd.convert and provided by the user as a file
on the commandline.

Revisions in the map are considered beeing present in the
repository and ignored during _parse(). This allows for incremental
imports if a revmap is provided.
N)r1   )r=   r1   s     r   	setrevmapp4_source.setrevmap_   s	     r   c                    S[         R                  " U5      -  n[         R                  " USS9n0 n[        U5       H"  nUR	                  SS5      nU(       d  M  SXF'   M$     U$ )zRead changes affecting the paths   p4 -G changes -s submitted %s   rbmode   changeNT)r   
shellquotepopenr   get)r=   r?   cmdstdout	p4changesr   cs          r   _parse_viewp4_source._parse_viewl   s_    .1D1DT1JJ%0	&!Ai&Aq#	 " r   c           	     L
   0 n0 n0 n0 n0 n0 n/ n	UR                  [        S5      5        SU;   aY  UR                  U R                  U5      5        UR	                  S5      (       a  UR                  S5      (       a  USS S0n
OSS0n
OS[        R                  " U5      -  n[        R                  " [        R                  " US	S
95      n0 n
U H  nUR	                  S5      (       d  M  X   R                  5       u  pUR                  U R                  U5      5        UR                  S5      (       a   UR                  S5      (       a
  USS nUSS nUSS nXR                  S5      S-   S nXU'   M     [        UR                  5       [        S9n[        U
R                  5       [         SS9nU R"                  R%                  SS5      nUR                  [        S5      5        SnU GH  nU(       a  [        U5      [        U5      :  a  M%  U R&                  (       a'  [        U5      [        U R&                  S   5      :  a  M]  UU R(                  ;   a  UnMq  U(       a  U/nO/ nU R+                  U5      nU R-                  UU5      nUR.                  R1                  S5      n[!        U5      S:  a  US   R3                  S5      nOSnSUR4                  U4-  nUR                  [6        R8                  " US5      S-   5        / n0 n/ nSnSU-  U;   a  SU-  U;   a  USU-     nSnU HT  n UR;                  5       R	                  U R;                  5       5      (       d  M7  [=        U
U    U[!        U 5      S -   5      n  O   U(       aL  UR?                  UUSU-     45        UUU'   URA                  SU-  5      S:X  a  UR?                  U5        UUU'   US-  nSU-  U;   a  SU-  U;   a  M  U H  nUU   nS[        R                  " U5      -  n![        R                  " U!S	S
9n"Sn#[C        U"5       H  nSn$SnS U-  U;   a`  US U-     U:X  aD  USU-     S:X  a8  Sn%S!UU%4-  U;   a+  US"UU%4-     S#:X  a  US!UU%4-     n$OU%S-  n%S!UU%4-  U;   a  M+  US-  nS U-  U;   a  M`  U$(       d  My  U$U;   d  M  UU$   n#  O   U#(       a  U#UU'   M  URE                  [        S$5      UU4-  5        M     UUU'   UUU'   UUU'   UnGM     U(       a  [!        U5      S:  a  U/n	UUUU	US%.$ )&z4Prepare list of P4 filenames and revisions to imports   reading p4 views
r&   r'   s   /...Nr   s   p4 -G client -o %srF   rG   s   Views   ...   r
   )keyT)rV   reverser*   s   p4.startrevs   collecting p4 changelists
r   s   
s    **empty changelist description**s   %s %sP      
s   depotFile%ds   rev%ds   action%ds   move/adds   p4 -G filelog %ss   change%ds	   file%d,%ds   how%d,%ds
   moved froms*   cannot find source for copied file: %s@%s
)	   changeset   files   copies   heads	   depotname)#statusr   updaterQ   r.   endswithr   rJ   r   r   rK   splitfindsortedkeysintr;   r2   r3   r%   r1   _fetch_revision_construct_commitdesc
splitlinesrstriprevr	   ellipsislowerr   appendrL   r   warn)&r=   r2   r?   rO   	changeset	files_map
copies_map	localname	depotnameheadsviewsrM   
clientspecclientsviewcview	vieworderstartrevlastidchangeparentsr   rP   descarr	shortdesctfilescopiescopiedfilesioldnamer   r   flcmdflstdoutcopiedfilenamecopiedoldnamejs&                                         r   _parsep4_source._parsew   sU   			
		
		!)*+ 4<T--d34u%%$--*@*@crC('(*=*=d*CCC hnnSu&EFJE$$$W--#-#5#;#;#=LE$$T%5%5e%<=~~f--%..2H2H %cr
 %cr
!!"IE!**T"2Q"6"89E#(%L % 9>>+5	 5::<S$?	 77>>*n= 			!234FCK#h-7yyS[3tyy|+<<$!($$V,A&&q'2Aff''-G7|a#AJ--g6	?	AEE9--AIIj))!R0589EFKA!A%!+A!0CNQ./"A}}11!'')<<#1%(WSVX=N2N#O # LL(AhlO!<=*1Ih'uu[1_-<#**84)1Ig&Q "A%!+A!0C  (#H-+h.A.A'.JJ#>>%e<!%!(+A$(MA&?q0kAo.&8 !+/ 2k A !A#/1a&#8Q">#$[Aq6%9#:m#K45laV6K4LM$) !Q	 $01a&#8Q">
 Q '?q0 %}))C)2=)A' ,* "'5F8$GGHI#V,-? (H !"If %If!'JvFm  p c)nq(HE $!#
 	
r   c                N    U R                  U R                  U R                  5      $ N)r   r2   r?   r=   s    r   _parse_oncep4_source._parse_once	  s    {{477DII..r   c                     U R                   S   $ )Nr\   r   r   s    r   r   p4_source.copies  s    	**r   c                     U R                   S   $ )Nr[   r   r   s    r   r   p4_source.files      ))r   c                     U R                   S   $ )NrZ   r   r   s    r   rq   p4_source.changeset      --r   c                     U R                   S   $ )Nr]   r   r   s    r   rv   p4_source.heads  r   r   c                     U R                   S   $ )Nr^   r   r   s    r   ru   p4_source.depotname  r   r   c                    U R                   $ r   )rv   r   s    r   getheadsp4_source.getheads!  s    zzr   c                   S[         R                  " SU R                  U   U4-  5      -  nS n [         R                  " USS9nS n/ nS n[	        U5       GH  n	U	S   n
U	R                  S5      nU
S:X  a  U(       d  [        U	S   U5      n  OUeU
S	:X  a  U	R                  S
5      nUS;   a    gU R                  R                  U	S   5      nU(       a{  SnUR                  S5      =(       d    SUR                  S5      =(       d    S-   nSU;   a  SnUR                  S5      S:X  a  SnSU;   a  U R                  nO0SU;   a  U R                  nOU
S:X  d  U
S:X  a  UR                  U5        S nGM     U(       d  OGMO  Uc  gSR                  U5      nU(       a  UR                  SU5      nUS:X  a  UR                  S5      (       a  US S nXv4$ )Ns   p4 -G print %ss   %s#%srF   rG   s   codes   datas   errors   generics   stats   action)s   purges   deletes   move/delete)NNs   typer   r
         xrU   s   symlink   ls   ko   ks   texts   binarys   $\1$rY   )r   rJ   ru   rK   r   rL   IOErrorr8   matchgroupr:   r9   ro   joinsubra   )r=   namerl   rM   	lasterrorrN   rH   contentskeywordsr   codedataactionp4typeflagss                  r   getfilep4_source.getfile$  s   ("5"5t,c22#
 
 	^^Ce4FDHHf%zuuW~8# %$+AjM4$@	'W_UU9-F!FF)!\\//'
;F"!'a!7C"LLO2s!  5=#'D!<<?j8#'D E>'+';';H!U]'+'7'7HW_	(9OOD) 	I &L ] ` <88H%||Hh7H4<H--e44}H~r   c                    U(       a  [         R                  " [        S5      5      eU R                  U   U R                  U   [        5       4$ )Ns'   convert from p4 does not support --full)r   r<   r   r   r   set)r=   rl   fulls      r   
getchangesp4_source.getchangesf  s:    ++a JKLLzz#C 0#%77r   c                   U R                  UR                  SS5      5      n[        US   5      S4nUc  / n[        R                  " U R                  US   5      [
        R                  " US5      UUSUS   US   US   S	.S
9$ )zM
Constructs a common.commit object from an unmarshalled
`p4 describe` output
s   descr   s   timer   Ns   users   %Y-%m-%d %H:%M:%S %1%2rI   )r(   s   convert_revision)authordater   ri   branchrl   extra)recoderL   rf   r   commitr   datestr)r=   objr   ri   r   s        r   rh   p4_source._construct_commitk  s    
 {{3777C01CL!1%?G}};;s7|,!!$(ABIi.s9~N
 	
r   c                b    SU-  n[         R                  " USS9n[        R                  " U5      $ )zPReturn an output of `p4 describe` including author, commit date as
a dictionary.s   p4 -G describe -s %srF   rG   )r   rK   r   r   )r=   rl   rM   rN   s       r   rg   p4_source._fetch_revision  s-     &+%0||F##r   c                    XR                   ;   a  U R                   U   $ XR                  ;   a!  U R                  U5      nU R                  US S9$ [        R
                  " [        S5      U-  5      e)N)r   s1   cannot find %s in the revmap or parsed changesets)rq   r1   rg   rh   r   r<   r   )r=   rl   r   s      r   	getcommitp4_source.getcommit  sj    .. >>#&&KK$$S)A))!T)::kkBCcI
 	
r   c                    0 $ r    r   s    r   gettagsp4_source.gettags  s    	r   c                b    [        U R                  U    Vs/ s H  o3S   PM	     sn5      $ s  snf )Nr   )rd   r   )r=   rl   r   xs       r   getchangedfilesp4_source.getchangedfiles  s)    TZZ_5_t_5665s   ,)r5   r9   r:   r8   r1   r   )__name__
__module____qualname____firstlineno__r-   rC   rQ   r   r   propertycacher   r   r   rq   rv   ru   r   r   r   rh   rg   r   r   r   __static_attributes____classcell__)r@   s   @r   r!   r!   ;   s    !F	P
d 
/ / 
+ + 
* * 
. . 
* * 
. .@D8

($
7 7r   r!   )
__future__r   r   r6   mercurial.i18nr   	mercurialr   r   mercurial.utilsr   r   r	   r+   r   r   r   converter_sourcer!   r   r   r   <module>r      sE    #  	   	(Y7'' Y7r   