
    c6                         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dS )
    N)_)open)errorpycompat)dateutil   )commonc                   |    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dS )monotone_sourceNc                    t           j                            | ||||           |r4t          |          dk    r!t	          j        t          d                    t           j                            | |d           || _        || _	        d| _
        || _        t          j        t          d          |z            }t          j	                            t          j	                            |d                    sU	 t!          |d          }|                    d          }|                                 n# t&          $ r d	}Y nw xY w|d
k    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          j#        ddd            d S )!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HH 	CIIMM+%    	##D"f555	"	<==D
 
 w~~bgll499:: 		u%%				   /// *&j$!677zGOd"Z/(:
 
 :K$&3h>
 
 
Ht#g-85@8K
 
 EI$5$<u$Dt$KLLEI$5$<==j$!6!Dx!OPPzEMG#d*X5=
 
 w&.85@!z##e+i7 
  

 !
	ukBBBBBBs   99D3 3EEc                 D    | j         r | j        |i |S  | j        |i |S N)r   mtnrunstdiomtnrunsingler1   argskwargss      r<   mtnrunzmonotone_source.mtnrun[   s=     	6#4#T4V444$4$d5f555r   c                 8    | j         |d<    | j        dg|R i |S )Nd   automate)r   run0rA   s      r<   r@   zmonotone_source.mtnrunsinglea   s/    isty6t666v666r   c                    t          j        |          }g }|                                D ]U\  }}|                    dt	          |          |fz             |r'|                    dt	          |          |fz             V|r+|                    dd           |                    d           |                    d           |D ])}|                    dt	          |          |fz             *|                    d           d                    |          }| j                            d|z             | 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   sk   %f--LLNN 	7 	7DAqNN8s1vvqk1222 7x3q661+5666 	!NN1d###NN4   t 	7 	7CNN8s3xxo56666t((7##,w6777g&&&--g666r   c                    d }d}|dk    rH| j                             d          }|s!t          j        t	          d                    ||z  }|dk    H|d d         }| j                             d          }|dvr$t          j        t	          d          |z            | j                             d          }|dk    r!t          j        t	          d                    d }d}|dk    rH| j                             d          }|s!t          j        t	          d	                    ||z  }|dk    H	 t          |d d                   }n2# t          $ r% t          j        t	          d
          |z            w xY w| j                             |          }t          |          |k    r3t          j        t	          d          t          |          |fz            ||||fS )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   
dll>&&q))D Ok!$L"M"MNNN$J	 dll
  _
$$Q''""+899FB   ~""1%%4<<+a JKKLLL	dll>&&q))D Pk!$M"N"NOOOI	 dll
	3B3((FF 	 	 	+899IE  	
 ~""6**t99+%  t99f%	&   FFD11s   3E /E:c                 &   g }	 |                                  \  }}}}| j                            d|||fz             |dk    r-|dk    r&t          j        t          d          ||fz            n|dv rJ| j                            t          d          | j        z             | j                            |           n?|dk    r| j                            d	|z              n|d
k    r|                    |           d	                    |          S )NTs   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,   	&151H1H1J1J.JGMM.*ff1MM   ~~T>>+9::gv=NN   5Q~..=>>>V$$$$4h/00004f%%%-	&0 xxr   c                    | j         |k    rd S |                     d|                              d          | _        || _         i | _        i | _        | j        D ]}| j                            |          }|rWd}|                    d          }|                    d          }| j	                            |          r|dz  }||f| j        |<   | j
                            |          }|rd| j        |                    d          <   d S )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   ##F$6<<BB7KK
	 	- 	-A""1%%A 0wwqzzwwqzz'--a00 !DLD$($<
4 !!!$$A -(,	!''!**%	- 	-r   c                 >    |                      |           || j        v S r>   )rw   r.   r1   r7   rs   s      r<   	mtnisfilezmonotone_source.mtnisfile   s#    S!!!tz!!r   c                 >    |                      |           || j        v S r>   )rw   r/   ry   s      r<   mtnisdirzmonotone_source.mtnisdir   s#    S!!!ty  r   c                    ddddd}|                      d|          }t          j        d|          }|D ]f}| j                            |          }|rH|                                \  }}|                    dd          }|                    dd          }|||<   g|d	                             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--
 818<< 	$ 	$A""1%%A $hhjjefd33fe44#d w--d33A6@gr   c                 l    | j         s'|                     d                                          S | j         S )Ns   leaves)r   rD   
splitlinesr1   s    r<   getheadszmonotone_source.getheads   s2    y 	;;y))446669r   c                 
   |r!t          j        t          d                    |                     d|                              d          }i }i }g }i }|D ]V}| j                            |          }	|	r0|||	                    d          <   |||	                    d          <   | j                            |          }	|	r|||	                    d          <   | j	                            |          }	|	r|||	                    d          <   | j
                            |          }	|	r|	                    d          }
|	                    d          }|                     |
|          rd||
<   |||
<   |||
<   |||<   )|                     |
|          r|                    ||
f           X|D ]\  }}i }| j        D ]A}||v r|                    |dz             r"||t!          |          d          z   ||<   d||<   B|                                D ]/\  }}| j                            d||fz  d           |||<   |||<   0|                                D ]}|||<   |                                |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  s    	+BCC   ;;44::7CC
 	; 	;A &&q))A -$'aggajj!),
1771::&##A&&A ($'aggajj! $$Q''A ($'aggajj!$$Q''A 	;771::>>&#.. ;)*Jv&%-F6N$'E&M&)E(OO]]63// ;&&&'9::: * 	& 	&NGUG* + +Z''$$UT\22 +&-s5zz||0D&DGFO *+Jv&$+MMOO * * J()  
 !$f!)v#NN,, & &"%h& vsuu--r   c                     |                      ||          sdS 	 |                     d||          }n# t          $ r Y dS w xY w|                     |           | j                            |d          \  }}||fS )NNNs   get_file_of)r)Nr   )rz   rD   	Exceptionrw   r.   get)r1   r7   rs   datarv   r;   s         r<   getfilezmonotone_source.getfileD  s    ~~dC(( 	:	;;~ts;;;DD 	 	 	::	S!!!Z^^D+66
dTzs   3 
A Ac           
      x   i }|                      |          }|                    d          |d         k    rd|d<   d}t          j        |d         t	          j        t	          j        |d         |                    |d         ||                     d	|                                          |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.getcommitO  s      %%99Z  E)$444"E(O)
}#!("25>:"N"NOO|$KK
C00;;==#
 
 
 	
r   c                     i }|                      d                              d          D ]I}| j                            |          }|r+|                    d          ||                    d          <   J|S )Ns   tagsrm   rn   r   )rD   rp   r)   rq   rr   )r1   tagsrt   ru   s       r<   gettagszmonotone_source.gettags_  sq    W%%++G44 	. 	.A!!!$$A .#$771::QWWQZZ r   c                     t           r>   )NotImplementedError)r1   rs   is      r<   getchangedfileszmonotone_source.getchangedfilesg  s
     "!r   c                    	 |                      d          }t          |          }n/# t          $ r" t          j        t          d                    w xY w|dk    rd| _        | j                            d|z             | 	                    ddd| j
                  \  | _        | _        | j                                        }|d	k    r$t          j        t          d
          |z            |dk    rD| j                                        }|s!t          j        t          d                    |dk    Bd S d S | j                            d|z             d S )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.beforel  s   	**+?@@JJ''GG 	 	 	+GHH  	
 d??!%DGMMCgM  
 /3jjXudi/ /+DOT^ >**,,D---kABBTI   %--~..00 +-    %------ GMM@BIJ    s	   $' ,Ac                     | j         rB| j                                         d | _        | j                                         d | _        d S d S r>   )r   rR   r   r]   r   s    r<   afterzmonotone_source.after  sQ     	"O!!###"DON  """!DNNN		" 	"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      s3       AC AC AC ACF6 6 67 7 77 7 70,2 ,2 ,2\     8- - -*" " "
! ! !  6  <. <. <.|	 	 	
 
 
   " " "
' ' 'R" " " " "r   r   )r   r!   mercurial.i18nr   mercurial.pycompatr   	mercurialr   r   mercurial.utilsr    r	   r   r   r   r   r   r<   <module>r      s    
			 				       # # # # # #        % $ $ $ $ $      C" C" C" C" C"f-v/A C" C" C" C" C"r   