3
LY$                 @   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G d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  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id}tj|}|sftjdt	| tj
d	| dS |jdj }tj|}|st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infoFLANGC)show_stdoutextra_environz'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*   e/private/var/folders/7d/20zwc49s3kn54d3vgq8bd4640000gn/T/pip-build-an2lx5zf/pip/pip/vcs/subversion.pyget_info   s,    




zSubversion.get_infoc             C   st   | j  \}}t||}| j|}tjd|| t 6 tjj|rJt	| | j
dg| ||g dd W dQ R X dS )z@Export the svn repository at the url to the destination locationz!Exporting svn repository %s to %sexportF)r   N)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   st   | j  \}}t||}| j|}|r.d| }nd}| j||||rpt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   sf   x`|D ]X}t |j}|sqd|kr@dj|jdd d j }n|}||jkr|jddd S qW d 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}xt j|D ]\}}}| j|kr2g |dd< q|j| j t jj|| jd}t jj|s^q| j|\}}||kr~|d }	n | s|j|	 rg |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r$d| }||fS )Nzssh://zsvn+)superr
   r.   rL   )r%   r)   r4   )	__class__r*   r+   r.      s    
zSubversion.get_url_revc             C   sV   |}xBt jjt jj|dsF|}t jj|}||krtjd| d S q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   sp  ddl m} tjj|| jd}tjj|rHt|}|j }W d Q R X nd}|j	dsj|j	dsj|j	drt
ttj|jd}|d d= |d d	 }d
d |D dg }n|j	drtj|}|std| |jd}dd tj|D dg }n^y<| jdd|gdd}	tj|	jd}dd tj|	D }W n  |k
rR   d g  }}Y nX |rdt|}
nd}
||
fS )Nr   )InstallationErrorrH   r9   8910z

   c             S   s,   g | ]$}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--xmlF)r   c             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   sB   | 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   s>   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   __classcell__r*   r*   )rX   r+   r
      s"   ,	r
   c             C   s   |rd|g}ng }t j| }t|dr6|j|j }}nL|d }d|krz|jdd }d|krn|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&   






 Y