ó
'šMc           @   s×   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 m Z e j d ƒ Z e j d ƒ Z e j d	 ƒ Z e j d
 ƒ Z d e f d „  ƒ  YZ e j e ƒ d S(   iÿÿÿÿN(   t   call_subprocess(   t   Link(   t   rmtreet   display_path(   t   logger(   t   vcst   VersionControls   url="([^"]+)"s   committed-rev="(\d+)"s	   URL: (.+)s   Revision: (.+)t
   Subversionc           B   s¤   e  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 „  Z e d „ Z RS(   t   svns   .svnt   checkouts   svn+sshs   svn+https	   svn+httpss   svn-checkout.txtsg   # This was an svn checkout; to make it a checkout again run:
svn checkout --force -r %(rev)s %(url)s .
c         C   s  | j  d ƒ j |  j ƒ s) t d | ‚ t |  j d | g d t d i d d 6ƒ} t j | ƒ } | s• t	 j
 d t | ƒ ƒ t	 j d	 | ƒ d S| j d
 ƒ j ƒ  } t j | ƒ } | sñ t	 j
 d t | ƒ ƒ t	 j d	 | ƒ | d f S| | j d
 ƒ f S(   s/   Returns (url, revision), where both are stringst   /s   Bad directory: %st   infot   show_stdoutt   extra_environt   Ct   LANGs'   Cannot determine URL of svn checkout %ss!   Output that cannot be parsed: 
%si   s,   Cannot determine revision of svn checkout %sN(   NN(   t   rstript   endswitht   dirnamet   AssertionErrorR    t   cmdt   Falset   _svn_url_ret   searchR   t   warnR   R   t   Nonet   groupt   stript   _svn_revision_re(   t   selft   locationt   outputt   matcht   url(    (    s6   /usr/lib/python2.7/dist-packages/pip/vcs/subversion.pyt   get_info   s    )(
c         C   s›   x” | j  ƒ  D]† } | j ƒ  s | j ƒ  j d ƒ r; q n  t j d | ƒ } | sW d S| j d ƒ } | | j ƒ  j ƒ  j d  d ƒ d } | | f SWd S(   Nt   #s   ^-r\s*([^ ])?i   i    (   NN(   NN(	   t
   splitlinesR   t
   startswitht   reR   R   R   t   endt   split(   R   t   contentt   lineR    t   revt   rest(    (    s6   /usr/lib/python2.7/dist-packages/pip/vcs/subversion.pyt   parse_vcs_bundle_file*   s    "&c         C   sš   |  j  ƒ  \ } } t j d | | f ƒ t j d 7_ zK t j j | ƒ rZ t | ƒ n  t |  j	 d | | g d |  j
 d t ƒWd t j d 8_ Xd S(   s@   Export the svn repository at the url to the destination locations!   Exporting svn repository %s to %si   t   exportt   filter_stdoutR   N(   t   get_url_revR   t   notifyt   indentt   ost   patht   existsR   R    R   t   _filterR   (   R   R   R!   R+   (    (    s6   /usr/lib/python2.7/dist-packages/pip/vcs/subversion.pyR.   6   s    c         C   s%   t  |  j d g | | | g ƒ d  S(   Nt   switch(   R    R   (   R   t   destR!   t   rev_options(    (    s6   /usr/lib/python2.7/dist-packages/pip/vcs/subversion.pyR7   F   s    c         C   s"   t  |  j d g | | g ƒ d  S(   Nt   update(   R    R   (   R   R8   R9   (    (    s6   /usr/lib/python2.7/dist-packages/pip/vcs/subversion.pyR:   J   s    c         C   s    |  j  ƒ  \ } } | r1 d | g } d | } n g  } d } |  j | | | | ƒ rœ t j d | | t | ƒ f ƒ t |  j d d g | | | g ƒ n  d  S(   Ns   -rs    (to revision %s)t    s   Checking out %s%s to %sR	   s   -q(   R0   t   check_destinationR   R1   R   R    R   (   R   R8   R!   R+   R9   t   rev_display(    (    s6   /usr/lib/python2.7/dist-packages/pip/vcs/subversion.pyt   obtainN   s    	c         C   sŠ   xƒ | D]{ } t  | ƒ j } | s( q n  d | k rY d j | j d ƒ d  ƒ j ƒ  } n | } | | j k r | j d d ƒ d Sq Wd  S(   Nt   -iÿÿÿÿR#   i   i    (   R   t   egg_fragmentt   joinR(   t   lowert   keyR   (   R   t   distt   dependency_linksR!   R@   RC   (    (    s6   /usr/lib/python2.7/dist-packages/pip/vcs/subversion.pyt   get_location\   s    %c      	   C   sT  d } xGt  j | ƒ D]6\ } } } |  j | k rA g  | (q n  | j |  j ƒ t  j j | |  j d ƒ } t  j j | ƒ s„ q n  t | ƒ } | j ƒ  } | j	 ƒ  | j
 d ƒ sÓ | j
 d ƒ sÓ | j
 d ƒ rqt t t j | j d ƒ ƒ ƒ } | d d =| d d }	 g  | D]2 }
 t |
 ƒ d k r|
 d rt |
 d ƒ ^ qd g } | rht | ƒ } qd } n— | j
 d	 ƒ rît j | ƒ j d
 ƒ }	 g  t j | ƒ D] } t | j d
 ƒ ƒ ^ q¨d g } | råt | ƒ } qd } n t j d | ƒ g  | (q | | k r!|	 d } n |	 j
 | ƒ s=g  | (q n  t | | ƒ } q W| S(   sR   
        Return the maximum revision for all files under a given location
        i    t   entriest   8t   9t   10s   

i   i	   s   <?xmli   s-   Unrecognized .svn/entries format; skipping %sR
   (   R3   t   walkR   t   removeR4   RA   R5   t   opent   readt   closeR%   t   listt   mapt   strR$   R(   t   lent   intt   maxt   _svn_xml_url_reR   R   t   _svn_rev_ret   finditerR   R   (   R   R   t   revisiont   baset   dirst   filest
   entries_fnt   ft   datat   dirurlt   dt   revst   localrevt   mt   base_url(    (    s6   /usr/lib/python2.7/dist-packages/pip/vcs/subversion.pyt   get_revisionj   sH    
-!F	8	c         C   sA   t  t |  ƒ j ƒ  \ } } | j d ƒ r7 d | } n  | | f S(   Ns   ssh://s   svn+(   t   superR   R0   R%   (   R   R!   R+   (    (    s6   /usr/lib/python2.7/dist-packages/pip/vcs/subversion.pyR0   š   s    c         C   s`  | } x^ t  j j t  j j | d ƒ ƒ sf | } t  j j | ƒ } | | k r	 t j d | ƒ d  Sq	 Wt t  j j | |  j d ƒ ƒ } | j	 ƒ  } | j
 ƒ  | j d ƒ sË | j d ƒ sË | j d ƒ rt t t j | j d ƒ ƒ ƒ } | d d =| d d	 S| j d
 ƒ rGt j | ƒ } | s:t d | ƒ ‚ n  | j d ƒ St j d | ƒ d  Sd  S(   Ns   setup.pysG   Could not find setup.py for directory %s (tried all parent directories)RG   RH   RI   RJ   s   

i    i   s   <?xmls   Badly formatted data: %ri   s&   Unrecognized .svn/entries format in %s(   R3   R4   R5   RA   R   R   R   R   RM   RN   RO   R%   RP   RQ   RR   R$   R(   RV   R   t
   ValueErrorR   (   R   R   t   orig_locationt   last_locationR^   R_   R    (    (    s6   /usr/lib/python2.7/dist-packages/pip/vcs/subversion.pyt   get_url¡   s,    $	!
-!c         C   s„   t  |  j d d | g d t ƒ} g  } xV | j ƒ  D]H } | j ƒ  } t | d ƒ } | d j d ƒ } | j | | f ƒ q4 W| S(   Nt   lss   -vR   i    iÿÿÿÿR
   (   R    R   R   R$   R(   RT   R   t   append(   R   t   svn_tag_urlt   stdoutt   resultsR*   t   partsR+   t   tag(    (    s6   /usr/lib/python2.7/dist-packages/pip/vcs/subversion.pyt   get_tag_revs¾   s    c         C   sZ   d  } d  } xG | D]? \ } } | | k r | d  k sC | | k r | } | } q q W| S(   N(   R   (   R   R+   t   tag_revst   best_match_revt   best_tagRr   t   tag_rev(    (    s6   /usr/lib/python2.7/dist-packages/pip/vcs/subversion.pyt   find_tag_matchÉ   s    c         C   s†  |  j  | ƒ } | d  k r d  S| j d ƒ } | j ƒ  j d d ƒ d } |  j | ƒ } | d d k r€ d | | d	 f } nõ | d d k r° d | j ƒ  | d	 | f } nÅ | d	 d k rTd | j ƒ  | f } | rud j | d	  ƒ d }	 |  j |	 ƒ }
 |  j | |
 ƒ } | rQt j	 d | ƒ d |	 | f } d | | f } qQqun! t j
 d | ƒ d | | f } d | | | f S(   NR
   R?   i   i    iþÿÿÿt   tagsRr   s   %s-%siÿÿÿÿt   branchest   branchs	   %s-%s-r%st   trunks
   %s-dev_r%ss   /tagss2   trunk checkout %s seems to be equivalent to tag %ss   %s/%ss?   svn URL does not fit normal structure (tags/branches/trunk): %ss   svn+%s@%s#egg=%s(   Ry   s   tag(   Rz   s   branch(   Rk   R   R(   t   egg_nameRf   RA   Rs   Rx   R   R1   R   (   R   RD   R   t	   find_tagst   repoRq   t   egg_project_nameR+   t   full_egg_namet   tag_urlRt   R    (    (    s6   /usr/lib/python2.7/dist-packages/pip/vcs/subversion.pyt   get_src_requirementÕ   s.     (   R   s   svn+sshs   svn+https	   svn+https(   t   __name__t
   __module__t   nameR   t	   repo_namet   schemest   bundle_filet   guideR"   R-   R.   R7   R:   R>   RF   Rf   R0   Rk   Rs   Rx   R   Rƒ   (    (    (    s6   /usr/lib/python2.7/dist-packages/pip/vcs/subversion.pyR      s&   								0				(   R3   R&   t   pipR    t	   pip.indexR   t   pip.utilR   R   t   pip.logR   t   pip.vcsR   R   t   compileRV   RW   R   R   R   t   register(    (    (    s6   /usr/lib/python2.7/dist-packages/pip/vcs/subversion.pyt   <module>   s   å