
    ifJ6                         d dl Z d dlZd dlmZ d dlmZ d dlmZmZ d dl	m
Z
 ddlmZ  G d d	ej                  ej                        Zy)
    N)_)open)errorpycompat)dateutil   )commonc                   z    e Zd Zd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 Zd Zd Zd Zd Zy)monotone_sourceNc                    t         j                  j                  | ||||       |r,t        |      dkD  rt	        j
                  t        d            t         j                  j                  | |d       || _        || _	        d| _
        || _        t        j                  t        d      |z        }t        j                  j                  t        j                  j                  |d            s5	 t!        |d      }|j#                  d      }|j%                          |d
k7  r|d}d}	|	}
d}d}t)        j*                  |dz   |	z         | _        t)        j*                  |dz   |	z   dz   |z         | _        t)        j*                  |dz   |	z   dz   |z         | _        t)        j*                  |dz   |	z   dz   |z   dz   |z         | _        t)        j*                  |dz   |	z   dz   |	z         | _        t)        j*                  |dz   |	z         | _        t)        j*                  |dz   |	z   dz   |z         | _        t)        j*                  ||z   dz   |	z   dz   |
z         | _        |dz   |z   |z   dz   |z   }t)        j*                  |dz   |z   dz         | _        d | _        d | _         d | _!        d | _"        t        jF                  ddd        y # t&        $ r d	}Y w xY w)!Nr   s9   monotone source does not support specifying multiple revss   mtnFs+   %s does not look like a monotone repositorys   _MTNs   rb       s   SQLite format 3 s   \s*s   \s+"((?:\\"|[^"])*)"\s*s   \s+\[(\w+)\]\s*s	   (?:.|\n)+s   dirs   files   contents   add_files   patchs   froms   tos   renames   deletes   tags   revisions   names   values   attrs   "mtn:execute"s   "true"s   monotone)abortdebname)$r	   converter_source__init__lenr   Abortr   commandlineuipathautomatestdiorevsNoRepoosexistsjoinr   readcloseIOErrorrecompiledir_refile_readd_file_repatch_re	rename_re	delete_retag_recert_reattr_execute_remanifest_revmanifestfilesdirs	checktool)selfr   repotyper   r   norepofheaderspacenamevaluerevisionlinesattrs                 8/usr/lib/python3/dist-packages/hgext/convert/monotone.pyr   zmonotone_source.__init__   s   ((r8T4HCIM++%  	##D"f5	"	<=D
 ww~~bggll49:u%	 // *&jj$!67zzGOd"Z/(:
 ::K$&3h>
 

Ht#g-85@8K
 EI$5$<u$Dt$KLEI$5$<=jj$!6!Dx!OPzzEMG#d*X5=
 w&.85@!zz##e+i7 

 !
	ukBQ  s   .-K KKc                 b    | j                   r | j                  |i |S  | j                  |i |S N)r   mtnrunstdiomtnrunsingler1   argskwargss      r<   mtnrunzmonotone_source.mtnrun[   s;    #4##T4V44$4$$d5f55r   c                 L    | j                   |d<    | j                  dg|i |S )Nd   automate)r   run0rA   s      r<   r@   zmonotone_source.mtnrunsinglea   s*    iistyy6t6v66r   c                    t        j                  |      }g }|j                         D ]F  \  }}|j                  dt	        |      |fz         |s(|j                  dt	        |      |fz         H |r#|j                  dd       |j                  d       |j                  d       |D ]!  }|j                  dt	        |      |fz         # |j                  d       dj                  |      }| j                  j                  d|z         | j                  j                  |       | j                  j                          | j                  |      S )Ns   %d:%sr      o   e   lr   s   mtn: sending '%s'
)r   byteskwargsitemsappendr   insertr   r   debug
mtnwritefpwriteflushmtnstdioreadcommandoutput)r1   rB   rC   commandkvargs          r<   r?   zmonotone_source.mtnrunstdioe   s   %%f-LLN 	7DAqNN8s1vqk12x3q61+56	7 NN1d#NN4 t 	7CNN8s3xo56	7t((7#,w67g&--g66r   c                 t   d }d}|dk7  rF| j                   j                  d      }|st        j                  t	        d            ||z  }|dk7  rF|d d }| j                   j                  d      }|dvr!t        j                  t	        d      |z        | j                   j                  d      }|dk7  rt        j                  t	        d            d }d}|dk7  rF| j                   j                  d      }|st        j                  t	        d	            ||z  }|dk7  rF	 t        |d d       }| j                   j                  |      }t        |      |k7  r,t        j                  t	        d      t        |      |fz        ||||fS # t        $ r" t        j                  t	        d
      |z        w xY w)Nr      :r   s%   bad mtn packet - no end of commandnbrs   mewptls#   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 %ss9   bad mtn packet - unable to read full packet read %s of %s)	mtnreadfpr   r   r   r   int	TypeErrorr   )r1   r   
commandnbrstream	lengthstrlengths         r<   mtnstdioreadpacketz"monotone_source.mtnstdioreadpacket}   s   
dl>>&&q)Dkk!$L"MNN$J	 dl
  _
$$Q'"++89FB  ~~""1%4<++a JKLL	dl>>&&q)Dkk!$M"NOOI	 dl
	3B(F ~~""6*t9++% t9f%	&  FFD11  	++89IE 	s   #F +F7c                 
   g }	 | j                         \  }}}}| j                  j                  d|||fz         |dk(  r)|dk7  r#t        j                  t        d      ||fz        n|dv rM| j                  j                  t        d      | j                  z         | j                  j                  |       n:|dk(  r| j                  j                  d|z          n|d	k(  r|j                  |       d
j                  |      S )Ns   mtn: read packet %s:%s:%d
rL      0s   mtn command '%s' returned %ss   ews
   %s error:
   ps   mtn:    mr   )
rd   r   rQ   r   r   r   warnrV   rO   r   )r1   rV   retvalr`   ra   rc   outputs          r<   rU   z)monotone_source.mtnstdioreadcommandoutput   s    151H1H1J.JGGMM.*ff1MM ~T>++9:gv=NN  5Q~.=>V$4h/04f%- 0 xxr   c                    | j                   |k(  ry | j                  d|      j                  d      | _        || _         i | _        i | _        | j                  D ]  }| j                  j                  |      }|rUd}|j                  d      }|j                  d      }| j                  j                  |      r|dz  }||f| j                  |<   | j                  j                  |      }|sd| j
                  |j                  d      <    y )Ns   get_manifest_of   

r   r         xT)r,   rD   splitr-   r.   r/   r$   matchgroupr+   r#   )r1   revemr;   r7   nodes          r<   mtnloadmanifestzmonotone_source.mtnloadmanifest   s    #$6<BB7K
	 	-A""1%Awwqzwwqz''--a0DLD$($<

4 !!!$A(,		!''!*%	-r   c                 @    | j                  |       || j                  v S r>   )rw   r.   r1   r7   rs   s      r<   	mtnisfilezmonotone_source.mtnisfile   s    S!tzz!!r   c                 @    | j                  |       || j                  v S r>   )rw   r/   ry   s      r<   mtnisdirzmonotone_source.mtnisdir   s    S!tyy  r   c                 h   ddddd}| j                  d|      }t        j                  d|      }|D ]`  }| j                  j	                  |      }|s!|j                         \  }}|J |j                  dd      }|j                  dd      }|||<   b |d	   j                  d
      d   dz   |d	<   |S )Ns	   <missing>)   author   date	   changelog   branchs   certss   \n\n {6}key ["\[]s   \"   "s   \\   \r      .r   s    UTC)rD   r!   rp   r*   rq   groupsreplace)r1   rs   certscertlistrt   ru   r7   r8   s           r<   mtngetcertszmonotone_source.mtngetcerts   s    #!&#	
 ;;x-
 8818< 	$A""1%Ahhje(((fd3fe4#d	$ w--d3A6@gr   c                 p    | j                   s| j                  d      j                         S | j                   S )Ns   leaves)r   rD   
splitlinesr1   s    r<   getheadszmonotone_source.getheads  s+    yy;;y)446699r   c                    |rt        j                  t        d            | j                  d|      j	                  d      }i }i }g }i }|D ]9  }| j
                  j                  |      }	|	r(|||	j                  d      <   |||	j                  d      <   | j                  j                  |      }	|	r|||	j                  d      <   | j                  j                  |      }	|	r|||	j                  d      <   | j                  j                  |      }	|	s|	j                  d      }
|	j                  d      }| j                  |
|      rd||
<   |||
<   |||
<   |||<   | j                  |
|      s'|j                  ||
f       < |D ]  \  }}i }| j                  D ]5  }||v r|j                  |dz         s||t!        |      d  z   ||<   d||<   7 |j#                         D ]0  \  }}| j$                  j'                  d||fz  d       |||<   |||<   2 |j)                         D ]  }|||<   	  |j#                         |t+               fS )	Ns-   convert from monotone does not support --fulls   get_revisionrm   r   rn      /s3   copying file in renamed directory from '%s' to '%s'   
)r   r   r   rD   rp   r%   rq   rr   r&   r(   r'   rz   r|   rO   r.   
startswithr   rN   r   rQ   valuesset)r1   rs   fullr9   r.   
ignoremoverenameddirscopiesrt   ru   tonamefromnamefromdirtodirrenamedtofilefromfiles                    r<   
getchangeszmonotone_source.getchanges  so   ++BC  ;;4::7C
 	;A  &&q)A$'aggaj!),
1771:&##A&A$'aggaj! $$Q'A$'aggaj!$$Q'A771:>>&#.)*Jv&%-F6N$'E&M&)E(O]]63/&&&'9:1	;8 * 	&NGUG** +Z'$$UT\2&-s5z|0D&DGFO *+Jv&+ %,MMO * J()
 !$f!)v* $NN, &"%h&'	&, vsu--r   c                     | j                  ||      sy	 | j                  d||      }| j                  |       | j                  j                  |d      \  }}||fS # t        $ r Y yw xY w)NNNs   get_file_of)r)Nr   )rz   rD   	Exceptionrw   r.   get)r1   r7   rs   datarv   r;   s         r<   getfilezmonotone_source.getfileE  sr    ~~dC(	;;~ts;;D 	S!ZZ^^D+6
dTz	  		s   A 	A)(A)c           
      >   i }| j                  |      }|j                  d      |d   k(  rd|d<   d}t        j                  |d   t	        j
                  t	        j                  |d   |            |d   || j                  d	|      j                         |d   |
      S )Ns   suspendr      1s   closes   %Y-%m-%dT%H:%M:%Sr~   r   r   s   parents)authordatedescrs   parentsbranchextra)	r   r   r	   commitr   datestrstrdaterD   r   )r1   rs   r   r   
dateformats        r<   	getcommitzmonotone_source.getcommitP  s      %99Z E)$44"E(O)
}}#!!("2"25>:"NO|$KK
C0;;=#
 	
r   c                     i }| j                  d      j                  d      D ]C  }| j                  j                  |      }|s!|j	                  d      ||j	                  d      <   E |S )Ns   tagsrm   rn   r   )rD   rp   r)   rq   rr   )r1   tagsrt   ru   s       r<   gettagszmonotone_source.gettags`  sb    W%++G4 	.A!!!$A#$771:QWWQZ 	. r   c                     t         r>   )NotImplementedError)r1   rs   is      r<   getchangedfileszmonotone_source.getchangedfilesh  s
     "!r   c                    	 | j                  d      }t        |      }|dk\  rd| _        | j                  j                  d|z         | j                  ddd| j                        \  | _        | _        | j                  j                         }|d	k7  r!t        j                  t        d
      |z        |dk7  rA| j                  j                         }|st        j                  t        d            |dk7  r@y y | j                  j                  d|z         y # t        $ r t        j                  t        d            w xY w)Ns   interface_versions2   unable to determine mtn automate interface versiong      (@Ts/   mtn automate version %f - using automate stdio
rG   s   stdios   -ds   format-version: 2
s(   mtn automate stdio header unexpected: %sr   s1   failed 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@   floatr   r   r   r   r   r   rQ   _run2r   rR   r]   readline)r1   
versionstrversionr   s       r<   beforezmonotone_source.beforem  s>   	**+?@JJ'G d?!%DGGMMCgM
 /3jjXudii/+DOT^ >>**,D--kkABTI  %-~~..0++-  %- GGMM@BIJ?  	++GH 	s   D (Ec                     | j                   rC| j                  j                          d | _        | j                  j                          d | _        y y r>   )r   rR   r   r]   r   s    r<   afterzmonotone_source.after  s>    OO!!#"DONN  "!DN	 r   r   )__name__
__module____qualname__r   rD   r@   r?   rd   rU   rw   rz   r|   r   r   r   r   r   r   r   r   r    r   r<   r   r      sb    ACF6770,2\ 8-*"
!8<.|	
 "
'R"r   r   )r   r!   mercurial.i18nr   mercurial.pycompatr   	mercurialr   r   mercurial.utilsr    r	   r   r   r   r   r   r<   <module>r      s<    
 	  # % D"f--v/A/A D"r   