
}_$                 @   s,  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	 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 e j d  Z e j d  Z e j e  Z Gd d   d e  Z d d   Z e j e  d S)    )absolute_importN)parse)Link)rmtreedisplay_path)
indent_log)vcsVersionControlzurl="([^"]+)"zcommitted-rev="(\d+)"z	URL: (.+)zRevision: (.+)z\s*revision="(\d+)"z<url>(.*)</url>c                   s   e  Z d  Z d Z d Z d Z d" Z d d	   Z d
 d   Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z   f d d   Z d d   Z d d   Z d d   Z d d   Z e d  d!    Z   S)#
Subversionsvnz.svncheckoutsvn+sshsvn+http	svn+httpssvn+svnc             C   s   | j  d  j |  j  s, t d |   |  j d | g d d d d d i } 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)z/Returns (url, revision), where both are strings/zBad directory: %sinfoshow_stdoutFextra_environLANGCz'Cannot determine URL of svn checkout %sz!Output that cannot be parsed: 
%sN   z,Cannot determine revision of svn checkout %s)NN)rstripendswithdirnameAssertionErrorrun_command_svn_url_researchloggerwarningr   debuggroupstrip_svn_revision_re)selflocationoutputmatchurl r*   1/tmp/pip-build-3_sjtvrs/pip/pip/vcs/subversion.pyget_info   s,    
zSubversion.get_infoc             C   s   |  j    \ } } t | |  } |  j |  } t j d | |  t   E t j j |  ri t	 |  |  j
 d g | | | g d d Wd QRXd S)z@Export the svn repository at the url to the destination locationz!Exporting svn repository %s to %sexportr   FN)get_url_revget_rev_optionsremove_auth_from_urlr   r   r   ospathexistsr   r   )r%   r&   r)   revrev_optionsr*   r*   r+   r-   ;   s    

zSubversion.exportc             C   s"   |  j  d g | | | g  d  S)Nswitch)r   )r%   destr)   r5   r*   r*   r+   r6   J   s    zSubversion.switchc             C   s   |  j  d g | | g  d  S)Nupdate)r   )r%   r7   r5   r*   r*   r+   r8   M   s    zSubversion.updatec             C   s   |  j    \ } } t | |  } |  j |  } | rC d | } n d } |  j | | | |  r t j d | | t |   |  j d d g | | | g  d  S)Nz (to revision %s) zChecking out %s%s to %sr   z-q)r.   r/   r0   check_destinationr   r   r   r   )r%   r7   r)   r4   r5   rev_displayr*   r*   r+   obtainP   s    zSubversion.obtainc             C   s   x | D]~ } t  |  j } | s% q d | k r\ d j | j d  d  d   j   } n | } | | j k r | j d d  d Sq Wd  S)N-r   #r   )r   egg_fragmentjoinsplitlowerkey)r%   distdependency_linksr)   r@   rD   r*   r*   r+   get_locationa   s    +zSubversion.get_locationc       
      C   s   d } x t  j |  D] \ } } } |  j | k rG g  | d d  <q | j |  j  t  j j | |  j d  } t  j j |  s q |  j |  \ } } | | k r | d }	 n* | s | j |	  r g  | d d  <q t	 | |  } q W| S)zR
        Return the maximum revision for all files under a given location
        r   Nentriesr   )
r1   walkr   remover2   rA   r3   _get_svn_url_rev
startswithmax)
r%   r&   revisionbasedirsfiles
entries_fndirurllocalrevbase_urlr*   r*   r+   get_revisiono   s"    zSubversion.get_revisionc                s>   t  t |   j   \ } } | j d  r4 d | } | | f S)Nzssh://zsvn+)superr
   r.   rL   )r%   r)   r4   )	__class__r*   r+   r.      s    
zSubversion.get_url_revc             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)Nzsetup.pyzGCould not find setup.py for directory %s (tried all parent directories)r   )r1   r2   r3   rA   r   r   r    rK   )r%   r&   orig_locationlast_locationr*   r*   r+   get_url   s    $zSubversion.get_urlc             C   s  d d l  m } t j j | |  j d  } t j j |  rb t |   } | j   } Wd  QRXn d } | j	 d  s | j	 d  s | j	 d  r t
 t t j | j d    } | d d =| d d	 } d
 d   | D d g } n | j	 d  rUt j |  } | s t d |   | j d  } d d   t j |  D d g } nx yV |  j d d | g d d }	 t j |	  j d  } d d   t j |	  D } Wn | k
 rd  g  } } Yn X| rt |  }
 n d }
 | |
 f S)Nr   )InstallationErrorrH   r9   8910z

   c             S   s<   g  |  ]2 } t  |  d  k r | d  r t | d    q S)	   )lenint).0dr*   r*   r+   
<listcomp>   s   	 z/Subversion._get_svn_url_rev.<locals>.<listcomp>z<?xmlzBadly formatted data: %rr   c             S   s%   g  |  ] } t  | j d     q S)r   )rc   r"   )rd   mr*   r*   r+   rf      s   	 r   z--xmlr   Fc             S   s%   g  |  ] } t  | j d     q S)r   )rc   r"   )rd   rg   r*   r*   r+   rf      s   	 )pip.exceptionsr\   r1   r2   rA   r   r3   openreadrL   listmapstr
splitlinesrB   _svn_xml_url_rer   
ValueErrorr"   _svn_rev_refinditerr   _svn_info_xml_url_re_svn_info_xml_rev_rerM   )r%   r&   r\   entries_pathfdatar)   revsr(   xmlr4   r*   r*   r+   rK      s>    !&	 zSubversion._get_svn_url_revc             C   s[   |  j  |  } | d  k r d  S| j   j d d  d } |  j |  } d | | | f S)Nr=   r   r   zsvn+%s@%s#egg=%s)r[   egg_namerB   rV   )r%   rE   r&   repoegg_project_namer4   r*   r*   r+   get_src_requirement   s    zSubversion.get_src_requirementc             C   s   d S)z&Always assume the versions don't matchFr*   )r%   r7   r5   r*   r*   r+   check_version   s    zSubversion.check_versionc             C   sY   t  j |   } | j j d  d } | j | | j | j | j f } t  j |  } | S)N@r   r?   )	urllib_parseurlsplitnetlocrB   schemer2   queryfragment
urlunsplit)r)   purlstripped_netloc
url_piecessurlr*   r*   r+   r0      s
    !zSubversion.remove_auth_from_url)r   r   r   r   r   )__name__
__module____qualname__namer   	repo_nameschemesr,   r-   r6   r8   r<   rG   rV   r.   r[   rK   r}   r~   staticmethodr0   r*   r*   )rX   r+   r
      s"   ,	r
   c             C   s   | r d | g } n g  } t  j |   } t | d  rO | j | j } } nl | d } d | k r | j d  d } d | k r | j d d  \ } } q | d  } } n d	 \ } } | r | d | g 7} | r | d | g 7} | S)
Nz-rusernamer   r   r   :z
--usernamez
--password)NN)r   r   hasattrr   passwordrB   )r)   r4   r5   rr   r   r   authr*   r*   r+   r/      s$    
r/   )
__future__r   loggingr1   reZpip._vendor.six.moves.urllibr   r   	pip.indexr   	pip.utilsr   r   pip.utils.loggingr   pip.vcsr   r	   compilero   rq   r   r$   rt   rs   	getLoggerr   r   r
   r/   registerr*   r*   r*   r+   <module>   s$   