
    ifZ,                        d dl Z d dlZ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
mZ d dlmZmZ ddlmZmZ ej$                  Zej&                  Zej(                  Zej*                  Zej,                  Zej.                  Z G d d	e      Zy)
    N)_)open)encodingerrorutil)dateutilprocutil   )commoncvspsc                   P     e Zd Zd
 fd	Zd Zd Zd Zd Zd Zd Z	d Z
d	 Z xZS )convert_cvsc                    t         t        |   ||||       t        j                  j                  |d      }t        j                  j                  |      st        t        d      |z        t        dd       d | _
        i | _        i | _        i | _        d | _        t        t        j                  j                  |d      d      j!                         d d | _        t        t        j                  j                  |d	      d      j!                         d d | _        t&        j&                  | _        | j)                          y )
N)revss   CVSs$   %s does not look like a CVS checkout   cvs)debnames   Root   rbs
   Repository)superr   __init__ospathjoinexistsNoRepor   	checktool	changesetfilestags
lastbranchsocketr   readcvsrootcvsrepor   _connect)selfuirepotyper   r   cvs	__class__s         3/usr/lib/python3/dist-packages/hgext/convert/cvs.pyr   zconvert_cvs.__init__)   s    k4)"h4)Hggll4(ww~~c"BCdJKK&&)
	BGGLLg6>CCEcrJBGGLLm<eDIIKCRP ))    c           
         | j                   y i | _         d}| j                  rOt        | j                        dkD  rt        j                  t        d            	 t        | j                  d         }t        j                         }	 t        j                  | j                         d}| j                  j                  dd      sd }t        j                   | j                  |      }t        j"                  | j                  |t        | j                  j%                  dd	            | j                  j%                  dd
      | j                  j%                  dd            }|D ]  }|r|j&                  |kD  r nd|j&                  z  }| j)                  |j*                        |_        || j,                  |j.                  <   | j)                  |j0                        |_        | j                  j                  dd      rt3        |j4                  d         |_        t7        j8                  |j4                  d      }| j:                  j=                  t>        jA                  |j:                  |             i }|jB                  D ]O  }	ddjE                  |	jF                  D 
cg c]  }
d|
z  	 c}
      ddg|	jH                     fz  ||	jJ                  <   Q tM        |j*                  ||jN                  D cg c]  }d|j&                  z   c}|j0                  |j.                  xs d      }|| j                   |<   || jP                  |<    | j,                  jS                         | _*        t        j                  |       y # t        $ r/ t        j                  t        d      | j                  d   z        w xY wc c}
w c c}w # t        j                  |       w xY w)Nr   r
   s4   cvs source does not support specifying multiple revss$   revision %s is not a patchset numbers   updates   converts   cvsps.cache)caches
   cvsps.fuzzs   cvsps.mergetos   cvsps.mergefrom)fuzzmergeto	mergefroms   %ds   localtimezones   %Y-%m-%d %H:%M:%S %1%2s   %s%s   .r,      (DEAD))authordateparentsdescbranch)+r   r   lenr   Abortr   int
ValueErrorr   getcwdr   chdirr   r'   
configboolr   	createlogcreatechangesetconfigidrecoder4   r    r8   commentmakedatetimestampr5   r   datestrr   updatedictfromkeysentriesr   revisiondeadfilecommitr6   r   valuesheads)r&   maxrevdr.   dbcsrC   r5   r   fxpcs                r+   _parsezconvert_cvs._parse=   s   >>%99499~!kk) TYYq\* OO/	HHTYYE77%%j.A6B&&
MBCz3CD''..5GHB  'beefnRUU] KK		2	-/		*![[4
77%%j2BC/
;BG''1JK		  rww!;< A$+		

"C1EAI"CDi(0/ %E!&&M 9957ZZ@eaddl@99+ &'r"!&

29'< //1DJHHQKk  kk=>1M H #D A HHQKs9   N HO !N>-AO 5OA"O 8N;>
O Oc           
         | j                   }d }d\  }}ddg}| j                  j                  t        d      |z         |j	                  d      r|dd  }t        j                  d|      }|ryd}|j                         \  }}}}	}|sd	}|	sd
}	nt        |	      }	d|||fz  }
d|||	|fz  }|sd}t        j                  j                  d      }	 t        |d      }|j                         j                         D ]?  }|j                  dd      \  }}|dk(  r|j                  dd      \  }}|}n|
}||k(  s=|} n |j!                          t-        j,                         }|j/                  ||	f       |j1                  dj3                  d|||ddg             |j5                  d      dk7  rt7        j8                  t        d            |j;                  d      x| _        | _        |s|j	                  d      rd}|dd  }|s|j	                  d      r|d d  }t        j                  d!|      }t        j                  jA                  |      s|sd}n5d"}|jC                  d      |jC                  d#      |jC                  d$      }}}|dk7  ru|d"k(  r6tD        jF                  jI                  d%      xs d&}|r
|d'||g|z   }n||g|z   }dj3                  d( |D              }tK        jL                  |      \  | _        | _        || _'        | j<                  jQ                  d)|z         | j<                  jQ                  d*       | j<                  jQ                  d+       | j<                  jS                          | j>                  jU                         }|j	                  d,      s!t7        j8                  t        d-      |z        d.|v rP| j<                  jQ                  d/       | j<                  jS                          | j>                  jU                          y y # t"        $ r=}|j$                  t$        j&                  k7  rt)        |dd       s||_         Y d }~d }~ww xY w)0NNNr   s   servers   connecting to %s
s	   :pserver:	   s-   (?:(.*?)(?::(.*?))?@)?([^:/]*)(?::(\d*))?(.*)s   pservers	   anonymousia	  s   :pserver:%s@%s:%ss   :pserver:%s@%s:%d%s   As
   ~/.cvspassr       r
   s   /1filename   
s   BEGIN AUTH REQUESTs   END AUTH REQUESTr,      s   I LOVE YOU
s!   CVS pserver authentication failedrwbs   :local:s   local   s   :ext:   s   (?:([^@:/]+)@)?([^:/]+):?(.*)s   rsh      s   CVS_RSHs   sshs   -lc              3   F   K   | ]  }t        j                  |        y wN)r	   
shellquote).0args     r+   	<genexpr>z'convert_cvs._connect.<locals>.<genexpr>   s     DH//4Ds   !s   Root %s
sc   Valid-responses ok error Valid-requests Mode M Mbinary E Checked-in Created Updated Merged Removed
s   valid-requests
s   Valid-requestssK   unexpected response from CVS server (expected "Valid-requests", but got %r)s   UseUnchangeds   UseUnchanged
)+r#   r'   statusr   
startswithrematchgroupsr;   r   r   
expanduserr   r"   
splitlinessplitcloseIOErrorerrnoENOENTgetattrr`   r!   connectsendr   recvr   r:   makefilewritepreadpisdirgroupr   environgetr	   popen2realrootwriteflushreadline)r&   rootconntypeuserhostcmdmpasswservportformat0format1cvspasspflinepart1part2formatinstsckrshrs                         r+   r%   zconvert_cvs._connect   s   ||
dy!q./$67??<(8DA4A %01
-eT4'DDt9D.$d1CC0D$d3KK E gg00?G"!'51$&GGI$8$8$: &D+/::dA+>LE5  %~/4{{4/Cu)0 *1$(- %& 
 mmoT4L)JJ1  !/	 88C=O3++a(L&MNN+.<<+>>djDOOJ7H8Dx(ABx:DAAww}}T"!#!#$771:qwwqz1771:Ddz!6!&&**:6@&tT2S8C++C ))DDDC&.ooc&:#DK,-.!	

 	-.JJ!||-.++? 	  aKK/0KKJJ!  Q # "::5#*4T#B07! 6"s   A&P 7P 	Q"2QQc                 :    | j                          | j                  S ri   )rZ   rQ   r&   s    r+   getheadszconvert_cvs.getheads   s    zzr,   c                    d }| j                          |j                  d      ryd|z  j                         }|j                  | j                  dz   |z          |D ]   }| j
                  j                  d|z         " | j
                  j                  d| j                  z         | j
                  j                          d}d }	 | j                  j                         }|j                  d	      s|j                  d
      r| j                  j                          | j                  j                          | j                  j                         d d }t        | j                  j                         d d       }	 || j                  |	      }n5|j                  d      r
||dd  z  }n|j                  d      rn|j                  d      r:t        | j                  j                         d d       }	 || j                  |	      }n|dk(  r.|t        j                  t        d            |d|v xr dxs dfS |j                  d      r+| j                   j#                  t        d      |dd  z         nM|j                  d      r| j                  j                          n!t        j                  t        d      |z        )Nc                 
   d}t               }|dkD  rc| j                  t        ||            }|s!t        j                  t        d      |z        |t        |      z  }|j                  |       |dkD  rc|j                         S )Ni   r   s!   %d bytes missing from remote file)	stringior"   minr   r:   r   r9   r   getvalue)fpcount	chunksizeoutputdatas        r+   chunkedreadz(convert_cvs.getfile.<locals>.chunkedread  s     IZF!)wws5)45++>?%G  T"T" !) ??$$r,   r3   r\   s   -N -P -kk -r %s --   /s   Argument %s
s   Directory .
%s
co
r,   s   Created s   Updated r   r_   r
   s   M s   Mbinary s   ok
s   malformed response from CVS   xs   E s   cvs server: %s
rf   s   Removes   unknown CVS response: %s)rZ   endswithru   appendr$   r   r   r   r   r   r   ro   r;   r   r:   r   r'   warn)
r&   namerevr   argsrW   r   moder   r   s
             r+   getfilezconvert_cvs.getfile  sE   	% 	<<	"%+224DLL4'$./ 	4AKK.23	42T]]BC::&&(D{+t{/K

##%

##%zz**,Sb1DJJ//1#267"4::u5&QR '-DJJ//1#267"4::u57?|#kk!,J*KLL $$,"74">3??__U+GGLL#6!7$qr(!BC__Y/JJ'')++a(C&Dt&KLL3 r,   c                     |rt        j                  t        d            | j                          t	        | j
                  |   j                               i t               fS )Ns(   convert from cvs does not support --full)r   r:   r   rZ   sortedr   itemsset)r&   r   fulls      r+   
getchangeszconvert_cvs.getchanges;  sH    ++a KLMMdjjo++-.CE99r,   c                 @    | j                          | j                  |   S ri   )rZ   r   )r&   r   s     r+   	getcommitzconvert_cvs.getcommitA  s    ~~c""r,   c                 :    | j                          | j                  S ri   )rZ   r   r   s    r+   gettagszconvert_cvs.gettagsE  s    yyr,   c                 R    | j                          t        | j                  |         S ri   )rZ   r   r   )r&   r   is      r+   getchangedfileszconvert_cvs.getchangedfilesI  s    djjo&&r,   ri   )__name__
__module____qualname__r   rZ   r%   r   r   r   r   r   r   __classcell__)r*   s   @r+   r   r   (   s6    (GRw"r6Mp:#'r,   r   )rx   r   rp   r!   mercurial.i18nr   mercurial.pycompatr   	mercurialr   r   r   mercurial.utilsr   r	    r   r   r   r   rO   converter_sourcerF   r   r    r,   r+   <module>r      s~     	 	   


 ==		** ,, 	c'" c'r,   