ó
b]c           @@  s9  d  d l  m Z 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	 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 e rd  d l m Z m Z m Z d  d l m Z n  e j e ƒ Z d e f d „  ƒ  YZ e j e ƒ d S(   i    (   t   absolute_importN(   t
   indent_log(   t   display_patht   rmtreet   split_auth_from_netloc(   t   MYPY_CHECK_RUNNING(   t   VersionControlt   vcss   url="([^"]+)"s   committed-rev="(\d+)"s   \s*revision="(\d+)"s   <url>(.*)</url>(   t   Listt   Optionalt   Tuple(   t
   RevOptionst
   Subversionc           B@  sò   e  Z d  Z d Z d Z d Z e d „  ƒ Z e d „  ƒ Z	 e d	 „  ƒ Z
 e d
 „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   t   svns   .svnt   checkouts   svn+sshs   svn+https	   svn+httpss   svn+svnc         C@  s   t  S(   N(   t   True(   t   clst
   remote_url(    (    s;   lib/python2.7/site-packages/pip/_internal/vcs/subversion.pyt   should_add_vcs_url_prefix"   s    c         C@  s
   d |  g S(   Ns   -r(    (   t   rev(    (    s;   lib/python2.7/site-packages/pip/_internal/vcs/subversion.pyt   get_base_rev_args&   s    c   	      C@  sí   d } xà t  j | ƒ D]Ï \ } } } |  j | k rA g  | (q n  | j |  j ƒ t  j j | |  j d ƒ } t  j j | ƒ s„ q n  |  j | ƒ \ } } | | k r² | d } n$ | sÉ | j | ƒ rÖ g  | (q n  t	 | | ƒ } q W| S(   sR   
        Return the maximum revision for all files under a given location
        i    t   entriest   /(
   t   ost   walkt   dirnamet   removet   patht   joint   existst   _get_svn_url_revt
   startswitht   max(	   R   t   locationt   revisiont   baset   dirst   filest
   entries_fnt   dirurlt   localrev(    (    s;   lib/python2.7/site-packages/pip/_internal/vcs/subversion.pyt   get_revision*   s"    c         C@  s/   | d k r% t  t |  ƒ j | | ƒ St | ƒ S(   s™   
        This override allows the auth information to be passed to svn via the
        --username and --password options instead of via the URL.
        t   ssh(   t   superR   t   get_netloc_and_authR   (   R   t   netloct   scheme(    (    s;   lib/python2.7/site-packages/pip/_internal/vcs/subversion.pyR,   F   s    c         C@  sJ   t  t |  ƒ j | ƒ \ } } } | j d ƒ r= d | } n  | | | f S(   Ns   ssh://s   svn+(   R+   R   t   get_url_rev_and_authR   (   R   t   urlR   t	   user_pass(    (    s;   lib/python2.7/site-packages/pip/_internal/vcs/subversion.pyR/   S   s    !c         C@  s<   g  } |  r | d |  g 7} n  | r8 | d | g 7} n  | S(   Ns
   --usernames
   --password(    (   t   usernamet   passwordt
   extra_args(    (    s;   lib/python2.7/site-packages/pip/_internal/vcs/subversion.pyt   make_rev_args[   s    c         C@  sw   | } x] t  j j t  j j | d ƒ ƒ se | } t  j j | ƒ } | | k r	 t j d | ƒ d  Sq	 W|  j | ƒ d S(   Ns   setup.pysG   Could not find setup.py for directory %s (tried all parent directories)i    (	   R   R   R   R   R   t   loggert   warningt   NoneR   (   R   R!   t   orig_locationt   last_location(    (    s;   lib/python2.7/site-packages/pip/_internal/vcs/subversion.pyt   get_remote_urle   s    $c         C@  sI  d d l  m } t j j | |  j d ƒ } t j j | ƒ ra t | ƒ  } | j ƒ  } Wd  QXn d } | j	 d ƒ s” | j	 d ƒ s” | j	 d ƒ rt
 t t j | j d ƒ ƒ ƒ } | d d =| d d	 } g  | D]2 } t | ƒ d
 k rÕ | d
 rÕ t | d
 ƒ ^ qÕ d g } n| j	 d ƒ r˜t j | ƒ }	 |	 sNt d | ƒ ‚ n  |	 j d ƒ } g  t j | ƒ D] }
 t |
 j d ƒ ƒ ^ qmd g } nŒ yk |  j d d | g d t ƒ} t j | ƒ j d ƒ } g  t j | ƒ D] }
 t |
 j d ƒ ƒ ^ qá} Wn | k
 r#d  g  } } n X| r9t | ƒ } n d } | | f S(   Ni    (   t   InstallationErrorR   t    t   8t   9t   10s   

i   i	   s   <?xmls   Badly formatted data: %ri   t   infos   --xmlt   show_stdout(   t   pip._internal.exceptionsR<   R   R   R   R   R   t   opent   readR   t   listt   mapt   strt
   splitlinest   splitt   lent   intt   _svn_xml_url_ret   searcht
   ValueErrort   groupt   _svn_rev_ret   finditert   run_commandt   Falset   _svn_info_xml_url_ret   _svn_info_xml_rev_reR8   R    (   R   R!   R<   t   entries_patht   ft   dataR0   t   dt   revst   matcht   mt   xmlR   (    (    s;   lib/python2.7/site-packages/pip/_internal/vcs/subversion.pyR   z   s>    !I;	5c         C@  s   t  S(   s&   Always assume the versions don't match(   RT   (   R   t   destt   name(    (    s;   lib/python2.7/site-packages/pip/_internal/vcs/subversion.pyt   is_commit_id_equal¬   s    c         C@  sG   | d  k r t j j ƒ  } n  | |  _ d  |  _ t t |  ƒ j ƒ  d  S(   N(	   R8   t   syst   stdint   isattyt   use_interactivet   _vcs_versionR+   R   t   __init__(   t   selfRe   (    (    s;   lib/python2.7/site-packages/pip/_internal/vcs/subversion.pyRg   ±   s
    		c         C@  sŒ   d } |  j  d g d t ƒ} | j | ƒ s1 d S| t | ƒ j ƒ  d } | j d ƒ } y t t t | ƒ ƒ } Wn t k
 r‡ d SX| S(   s  Query the version of the currently installed Subversion client.

        :return: A tuple containing the parts of the version information or
            ``()`` if the version returned from ``svn`` could not be parsed.
        :raises: BadCommand: If ``svn`` is not installed.
        s   svn, version s	   --versionRB   i    t   .(    (    (	   RS   RT   R   RK   RJ   t   tupleRG   RL   RO   (   Rh   t   version_prefixt   versiont   version_listt   parsed_version(    (    s;   lib/python2.7/site-packages/pip/_internal/vcs/subversion.pyt   call_vcs_versionÀ   s    c         C@  s/   |  j  d k	 r |  j  S|  j ƒ  } | |  _  | S(   s  Return the version of the currently installed Subversion client.

        If the version of the Subversion client has already been queried,
        a cached value will be used.

        :return: A tuple containing the parts of the version information or
            ``()`` if the version returned from ``svn`` could not be parsed.
        :raises: BadCommand: If ``svn`` is not installed.
        N(   Rf   R8   Ro   (   Rh   t   vcs_version(    (    s;   lib/python2.7/site-packages/pip/_internal/vcs/subversion.pyt   get_vcs_versionÛ   s
    	c         C@  s3   |  j  s d g S|  j ƒ  } | d k r/ d g Sg  S(   sX  Return options to be used on calls to Subversion that contact the server.

        These options are applicable for the following ``svn`` subcommands used
        in this class.

            - checkout
            - export
            - switch
            - update

        :return: A list of command line arguments to pass to ``svn``.
        s   --non-interactivei   i   s   --force-interactive(   i   i   (   Re   Rq   (   Rh   t   svn_version(    (    s;   lib/python2.7/site-packages/pip/_internal/vcs/subversion.pyt   get_remote_call_optionsð   s    		c         C@  s•   |  j  | ƒ \ } } t j d | | ƒ t ƒ  ^ t j j | ƒ rQ t | ƒ n  d g |  j ƒ  | j	 ƒ  | | g } |  j
 | d t ƒWd QXd S(   s@   Export the svn repository at the url to the destination locations!   Exporting svn repository %s to %st   exportRB   N(   t   get_url_rev_optionsR6   RA   R   R   R   R   R   Rs   t   to_argsRS   RT   (   Rh   R!   R0   t   rev_optionst   cmd_args(    (    s;   lib/python2.7/site-packages/pip/_internal/vcs/subversion.pyRt     s    
'c         C@  sc   | j  ƒ  } t j d | | t | ƒ ƒ d d g |  j ƒ  | j ƒ  | | g } |  j | ƒ d  S(   Ns   Checking out %s%s to %sR   s   -q(   t
   to_displayR6   RA   R   Rs   Rv   RS   (   Rh   R_   R0   Rw   t   rev_displayRx   (    (    s;   lib/python2.7/site-packages/pip/_internal/vcs/subversion.pyt	   fetch_new  s    *c         C@  s8   d g |  j  ƒ  | j ƒ  | | g } |  j | ƒ d  S(   Nt   switch(   Rs   Rv   RS   (   Rh   R_   R0   Rw   Rx   (    (    s;   lib/python2.7/site-packages/pip/_internal/vcs/subversion.pyR|   -  s    'c         C@  s5   d g |  j  ƒ  | j ƒ  | g } |  j | ƒ d  S(   Nt   update(   Rs   Rv   RS   (   Rh   R_   R0   Rw   Rx   (    (    s;   lib/python2.7/site-packages/pip/_internal/vcs/subversion.pyR}   3  s    $(   R   s   svn+sshs   svn+https	   svn+httpss   svn+svnN(   t   __name__t
   __module__R`   R   t	   repo_namet   schemest   classmethodR   t   staticmethodR   R)   R,   R/   R5   R;   R   Ra   R8   Rg   Ro   Rq   Rs   Rt   R{   R|   R}   (    (    (    s;   lib/python2.7/site-packages/pip/_internal/vcs/subversion.pyR      s*   
2			!			(    t
   __future__R    t   loggingR   t   reRb   t   pip._internal.utils.loggingR   t   pip._internal.utils.miscR   R   R   t   pip._internal.utils.typingR   t    pip._internal.vcs.versioncontrolR   R   t   compileRM   RQ   RV   RU   t   typingR   R	   R
   R   t	   getLoggerR~   R6   R   t   register(    (    (    s;   lib/python2.7/site-packages/pip/_internal/vcs/subversion.pyt   <module>   s&   ÿ 