ó
j·Ã^c           @@  sc  d  d l  m 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
 m Z d  d l 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 d  d l m Z d  d l m Z d  d l m Z 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   is_console_interactivet   rmtreet   split_auth_from_netloc(   t   make_command(   t   MYPY_CHECK_RUNNING(   t   VersionControlt   vcss   url="([^"]+)"s   committed-rev="(\d+)"s   \s*revision="(\d+)"s   <url>(.*)</url>(   t   Optionalt   Tuple(   t   CommandArgs(   t
   HiddenText(   t   AuthInfot
   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-   site-packages/pip/_internal/vcs/subversion.pyt   should_add_vcs_url_prefix+   s    c         C@  s
   d |  g S(   Ns   -r(    (   t   rev(    (    s-   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-   site-packages/pip/_internal/vcs/subversion.pyt   get_revision3   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-   site-packages/pip/_internal/vcs/subversion.pyR0   O   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-   site-packages/pip/_internal/vcs/subversion.pyR3   \   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-   site-packages/pip/_internal/vcs/subversion.pyt   make_rev_argse   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-   site-packages/pip/_internal/vcs/subversion.pyt   get_remote_urlp   s    $c         C@  sQ  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 | ƒ }	 |	 sVt d j t ƒ    ƒ ‚ n  |	 j d ƒ } g  t j | ƒ D] }
 t |
 j d ƒ ƒ ^ qu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| rAt | ƒ } n d } | | f S(   Ni    (   t   InstallationErrorR   t    t   8t   9t   10s   

i   i	   s   <?xmls   Badly formatted data: {data!r}i   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   formatt   localst   groupt   _svn_rev_ret   finditert   run_commandt   Falset   _svn_info_xml_url_ret   _svn_info_xml_rev_reR<   R$   (   R   R%   R@   t   entries_patht   ft   dataR4   t   dt   revst   matcht   mt   xmlR   (    (    s-   site-packages/pip/_internal/vcs/subversion.pyR"   …   s@    !I;	5c         C@  s   t  S(   s&   Always assume the versions don't match(   RZ   (   R   t   destt   name(    (    s-   site-packages/pip/_internal/vcs/subversion.pyt   is_commit_id_equal¸   s    c         C@  sA   | d  k r t ƒ  } n  | |  _ d  |  _ t t |  ƒ j ƒ  d  S(   N(   R<   R   t   use_interactivet   _vcs_versionR/   R   t   __init__(   t   selfRh   (    (    s-   site-packages/pip/_internal/vcs/subversion.pyRj   ½   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	   --versionRF   i    t   .(    (    (	   RY   RZ   R#   RO   RN   t   tupleRK   RP   RS   (   Rk   t   version_prefixt   versiont   version_listt   parsed_version(    (    s-   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(   Ri   R<   Rr   (   Rk   t   vcs_version(    (    s-   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   (   Rh   Rt   (   Rk   t   svn_version(    (    s-   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  t d |  j	 ƒ  | j
 ƒ  | | ƒ } |  j | d t ƒWd QXd S(   s@   Export the svn repository at the url to the destination locations!   Exporting svn repository %s to %st   exportRF   N(   t   get_url_rev_optionsR:   RE   R   R   R   R!   R   R   Rv   t   to_argsRY   RZ   (   Rk   R%   R4   t   rev_optionst   cmd_args(    (    s-   site-packages/pip/_internal/vcs/subversion.pyRw     s    
c         C@  s`   | j  ƒ  } t j d | | t | ƒ ƒ t d d |  j ƒ  | j ƒ  | | ƒ } |  j | ƒ d  S(   Ns   Checking out %s%s to %sR   s   -q(   t
   to_displayR:   RE   R   R   Rv   Ry   RY   (   Rk   Re   R4   Rz   t   rev_displayR{   (    (    s-   site-packages/pip/_internal/vcs/subversion.pyt	   fetch_new.  s    c         C@  s5   t  d |  j ƒ  | j ƒ  | | ƒ } |  j | ƒ d  S(   Nt   switch(   R   Rv   Ry   RY   (   Rk   Re   R4   Rz   R{   (    (    s-   site-packages/pip/_internal/vcs/subversion.pyR   =  s    c         C@  s2   t  d |  j ƒ  | j ƒ  | ƒ } |  j | ƒ d  S(   Nt   update(   R   Rv   Ry   RY   (   Rk   Re   R4   Rz   R{   (    (    s-   site-packages/pip/_internal/vcs/subversion.pyR€   E  s    	(   R   s   svn+sshs   svn+https	   svn+httpss   svn+svnN(   t   __name__t
   __module__Rf   R   t	   repo_namet   schemest   classmethodR   t   staticmethodR   R-   R0   R3   R9   R?   R"   Rg   R<   Rj   Rr   Rt   Rv   Rw   R~   R   R€   (    (    (    s-   site-packages/pip/_internal/vcs/subversion.pyR   %   s*   	3			!			($   t
   __future__R    t   loggingR   t   ret   pip._internal.utils.loggingR   t   pip._internal.utils.miscR   R   R   R   t   pip._internal.utils.subprocessR   t   pip._internal.utils.typingR   t    pip._internal.vcs.versioncontrolR   R	   t   compileRQ   RW   R\   R[   t   typingR
   R   R   R   R   R   t	   getLoggerR   R:   R   t   register(    (    (    s-   site-packages/pip/_internal/vcs/subversion.pyt   <module>   s*   "ÿ *