ó
T³úVc           @   sŒ   d  d l  m Z m Z d  d l m Z d  d l m Z m Z m Z m	 Z	 d  d l
 Z
 d  d l Z d „  Z d „  Z d e f d „  ƒ  YZ d S(	   iÿÿÿÿ(   t   utilt   error(   t   _(   t   committ   converter_sourcet	   checktoolt   NoRepoNc         c   sG   y/ x( t  r- t j |  ƒ } | s% Pn  | Vq WWn t k
 rB n Xd S(   s,   Yield the dictionary objects generated by p4N(   t   Truet   marshalt   loadt   EOFError(   t   ft   d(    (    s4   /usr/lib/python2.7/dist-packages/hgext/convert/p4.pyt   loaditer   s    	c         C   s?   d	 d
 d d g } x& | D] \ } } |  j  | | ƒ }  q W|  S(   sO  Perforce escapes special characters @, #, *, or %
    with %40, %23, %2A, or %25 respectively

    >>> decodefilename('portable-net45%252Bnetcore45%252Bwp8%252BMonoAndroid')
    'portable-net45%2Bnetcore45%2Bwp8%2BMonoAndroid'
    >>> decodefilename('//Depot/Directory/%2525/%2523/%23%40.%2A')
    '//Depot/Directory/%25/%23/#@.*'
    s   %2At   *s   %23t   #s   %40t   @s   %25t   %(   s   %2AR   (   s   %23R   (   s   %40R   (   s   %25R   (   t   replace(   t   filenamet   replacementst   kt   v(    (    s4   /usr/lib/python2.7/dist-packages/hgext/convert/p4.pyt   decodefilename   s    	t	   p4_sourcec           B   s\   e  Z d	 d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z RS(
   c         C   se  d d  l  } t t |  ƒ j | | d | ƒd | k r` | j d ƒ r` t t d ƒ | ƒ ‚ n  t d d t ƒi  |  _	 i  |  _
 i  |  _ i  |  _ i  |  _ i  |  _ i  |  _ i  |  _ |  j j d d	 d
 | j ƒ|  _ i  |  _ i  |  _ t j d ƒ |  _ t j d ƒ |  _ t j d ƒ |  _ | rQt | ƒ d k rQt j t d ƒ ƒ ‚ n  |  j | | ƒ d  S(   Niÿÿÿÿt   revst   /s   //s%   %s does not look like a P4 repositoryt   p4t   abortt   converts   p4.encodingt   defaultsE   ([a-z]+)?(text|binary|symlink|apple|resource|unicode|utf\d+)(\+\w+)?$sA   \$(Id|Header|Date|DateTime|Change|File|Revision|Author):[^$\n]*\$s   \$(Id|Header):[^$
]*\$i   s8   p4 source does not support specifying multiple revisions(    t   convcmdt   superR   t   __init__t
   startswithR   R   R   t   Falset	   p4changest   headst	   changesett   filest   copiest   tagst
   lastbrancht   parentt   uit   configt   orig_encodingt   encodingt	   depotnamet	   localnamet   ret   compilet   re_typet   re_keywordst   re_keywords_oldt   lenR   t   Abortt   _parse(   t   selfR,   t   pathR   R   (    (    s4   /usr/lib/python2.7/dist-packages/hgext/convert/p4.pyR!   )   s2    										c         C   sk   d t  j | ƒ } t  j | d d ƒ} x< t | ƒ D]. } | j d d ƒ } | r5 t |  j | <q5 q5 Wd S(   s   Read changes affecting the paths   p4 -G changes -s submitted %st   modet   rbt   changeN(   R    t
   shellquotet   popenR   t   gett   NoneR   R$   (   R:   R;   t   cmdt   stdoutR   t   c(    (    s4   /usr/lib/python2.7/dist-packages/hgext/convert/p4.pyt   _parse_viewM   s    c   "      C   s!  | j  t d ƒ ƒ d | k rn |  j | ƒ | j d ƒ r^ | j d ƒ r^ i d | d  6} qKi d d 6} nÝ d t j | ƒ } t j t j	 | d d	 ƒƒ } i  } x£ | D]› } | j d
 ƒ r¬ | | j
 ƒ  \ } } |  j | ƒ | j d ƒ r| j d ƒ r| d  } | d  } n  | d } | | j d ƒ d } | | | <q¬ q¬ W|  j j ƒ  |  _ |  j j d t ƒ | j ƒ  }	 |	 j d t d t ƒ |  j j d d d d ƒ}
 g  |  j D]T } |
 sÜt | ƒ t |
 ƒ k r·|  j st | ƒ t |  j d ƒ k r·| ^ q·|  _ | j  t d ƒ ƒ d/ } xØ|  j D]Í} d | } t j	 | d d	 ƒ} t j | ƒ } |  j | j d d ƒ ƒ } | j
 d d ƒ d } d | d t | ƒ d d !f } | j  t j | d ƒ d ƒ | rì| g } n g  } t | d ƒ d f } t d |  j | d ƒ d t j | d  ƒ d! | d | d" d/ d# i | d$ 6ƒ } g  } i  } g  } d } x÷ d% | | k rfd& | | k rf| d% | } d/ } xK |	 D]C } | j ƒ  j | j ƒ  ƒ r«t | | | t | ƒ ƒ } Pq«q«W| rY| j | | d& | f ƒ | |  j | <| j d' | ƒ d( k rI| j | ƒ n  | |  j  | <n  | d 7} qpWxm| D]e} |  j | } d) t j | ƒ } t j	 | d d	 ƒ} d/ } xñ t! | ƒ D]ã } d/ }  d } x¨ d* | | k rx| d* | | k rk| d' | d( k rkd }! xY d+ | |! f | k rg| d, | |! f d- k rZ| d+ | |! f }  Pn  |! d 7}! qWn  | d 7} qÑW|  r¼|  |  j  k r¼|  j  |  } Pq¼q¼W| r¶| | | <qn| j" t d. ƒ | | f ƒ qnW| |  j# | <| |  j$ | <| |  j% | <| } q7W| r| g |  _& n  d/ S(0   s4   Prepare list of P4 filenames and revisions to imports   reading p4 views
R   s   //s   /...t    iýÿÿÿs   p4 -G client -o %sR<   R=   t   Views   ...i   i   t   keyt   reverseR   s   p4.startrevR   i    s   collecting p4 changelists
s   p4 -G describe -s %st   descs   
s   %s %sR>   iÿÿÿÿiP   t   timet   authort   usert   dates   %Y-%m-%d %H:%M:%S %1%2t   parentst   brancht   extraR   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
N('   t   statusR   RF   R"   t   endswithR    R?   R   R	   R@   t   splitt   findR$   t   keyst   sortt   intR7   R   R,   R-   R   RB   t   recodeRA   t   reprt   ellipsisR   t   datestrt   lowerR   t   appendR0   R1   R   t   warnR&   R'   R(   R%   ("   R:   R,   R;   t   viewsRC   t
   clientspect   clientt   sviewt   cviewt	   viewordert   startrevt   xt   lastidR>   RD   R   RK   t	   shortdesct   tRP   RO   RE   R'   R(   t   copiedfilest   it   oldnameR   R   t   flcmdt   flstdoutt   copiedfilenamet   copiedoldnamet   j(    (    s4   /usr/lib/python2.7/dist-packages/hgext/convert/p4.pyR9   V   s¾    

8
!#
c         C   s   |  j  S(   N(   R%   (   R:   (    (    s4   /usr/lib/python2.7/dist-packages/hgext/convert/p4.pyt   getheadsÓ   s    c         C   sB  d t  j d |  j | | f ƒ } d  } x©t rÕt  j | d d ƒ} d  } g  } d  } xkt | ƒ D]]}	 |	 d }
 |	 j d ƒ } |
 d k r¸ | s¯ t |	 d | ƒ } Pq¾| ‚ n|
 d	 k r–|	 j d
 ƒ } | d k rã d S|  j	 j
 |	 d ƒ } | r¾d } | j d ƒ pd | j d ƒ p)d } d | k rBd } n  | j d ƒ d k r`d } n  d | k rx|  j } q“d | k r“|  j } q“q¾n( |
 d k s®|
 d k r¾| j | ƒ n  d  } qg W| s- Pq- q- W| d  k ræd Sd j | ƒ } | r| j d | ƒ } n  | d k r8| j d ƒ r8| d  } n  | | f S(    Ns   p4 -G print %ss   %s#%sR<   R=   t   codet   dataR   t   generict   statt   actiont   purget   deletes   move/deletet   typeRG   i   i   Rh   i   t   symlinkt   lt   koR   t   textt   binarys   $\1$s   
iÿÿÿÿ(   s   purgeR{   s   move/delete(   NN(   NN(   R    R?   R0   RB   R   R@   R   RA   t   IOErrorR4   t   matcht   groupR6   R5   R_   t   joint   subRT   (   R:   t   namet   revRC   t	   lasterrorRD   R<   t   contentst   keywordsR   Ru   Rv   Ry   t   p4typet   flags(    (    s4   /usr/lib/python2.7/dist-packages/hgext/convert/p4.pyt   getfileÖ   s\    !	
			
c         C   s<   | r t  j t d ƒ ƒ ‚ n  |  j | |  j | t ƒ  f S(   Ns'   convert from p4 does not support --full(   R   R8   R   R'   R(   t   set(   R:   Rˆ   t   full(    (    s4   /usr/lib/python2.7/dist-packages/hgext/convert/p4.pyt
   getchanges  s    c         C   s   |  j  | S(   N(   R&   (   R:   Rˆ   (    (    s4   /usr/lib/python2.7/dist-packages/hgext/convert/p4.pyt	   getcommit  s    c         C   s   |  j  S(   N(   R)   (   R:   (    (    s4   /usr/lib/python2.7/dist-packages/hgext/convert/p4.pyt   gettags  s    c         C   s(   t  g  |  j | D] } | d ^ q ƒ S(   Ni    (   t   sortedR'   (   R:   Rˆ   Rm   Rh   (    (    s4   /usr/lib/python2.7/dist-packages/hgext/convert/p4.pyt   getchangedfiles!  s    N(   t   __name__t
   __module__RB   R!   RF   R9   Rt   RŽ   R‘   R’   R“   R•   (    (    (    s4   /usr/lib/python2.7/dist-packages/hgext/convert/p4.pyR   (   s   $			}		@			(   t	   mercurialR    R   t   mercurial.i18nR   t   commonR   R   R   R   R   R2   R   R   R   (    (    (    s4   /usr/lib/python2.7/dist-packages/hgext/convert/p4.pyt   <module>   s   "		