3
[                 @   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mZ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eZG dd deZeje dS )    )absolute_importN)Link)
indent_log)display_pathmake_vcs_requirement_urlrmtreesplit_auth_from_netloc)VersionControlvcszurl="([^"]+)"zcommitted-rev="(\d+)"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 fddZdd Zdd Zdd Zd d! Zd"d# Z  ZS )%
Subversionsvnz.svncheckoutsvn+sshsvn+http	svn+httpssvn+svnc             C   s   d|gS )Nz-r )selfrevr   r   =/tmp/pip-install-65viz3iy/pip/pip/_internal/vcs/subversion.pyget_base_rev_args   s    zSubversion.get_base_rev_argsc             C   sl   | j | j\}}tjd|| t > tjj|r:t| dg|j	  ||g }| j
|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)show_stdoutN)Zget_url_rev_optionsurlloggerinfor   ospathexistsr   to_argsrun_command)r   locationr   rev_optionscmd_argsr   r   r   r       s    zSubversion.exportc             C   sB   |j  }tjd||t| ddg|j  ||g }| j| d S )NzChecking out %s%s to %sr   z-q)
to_displayr   r   r   r   r    )r   destr   r"   rev_displayr#   r   r   r   	fetch_new-   s    
zSubversion.fetch_newc             C   s$   dg|j   ||g }| j| d S )Nswitch)r   r    )r   r%   r   r"   r#   r   r   r   r(   8   s    zSubversion.switchc             C   s"   dg|j   |g }| j| d S )Nupdate)r   r    )r   r%   r   r"   r#   r   r   r   r)   <   s    zSubversion.updatec             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   egg_fragmentjoinsplitlowerkey)r   distdependency_linksr   r.   r2   r   r   r   get_location@   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entries/)
r   walkdirnameremover   r/   r   _get_svn_url_rev
startswithmax)	r   r!   revisionbasedirsfiles
entries_fndirurllocalrevr   r   r   get_revisionN   s"    

zSubversion.get_revisionc                s"   |dkrt t| j||S t|S )z
        This override allows the auth information to be passed to svn via the
        --username and --password options instead of via the URL.
        ssh)superr   get_netloc_and_authr   )r   netlocscheme)	__class__r   r   rH   i   s    
zSubversion.get_netloc_and_authc                s2   t t| j|\}}}|jdr(d| }|||fS )Nzssh://zsvn+)rG   r   get_url_rev_and_authr<   )r   r   r   	user_pass)rK   r   r   rL   v   s    
zSubversion.get_url_rev_and_authc             C   s(   g }|r|d|g7 }|r$|d|g7 }|S )Nz
--usernamez
--passwordr   )r   usernamepassword
extra_argsr   r   r   make_rev_args}   s    zSubversion.make_rev_argsc             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   )r   r   r   r/   r9   r   warningr;   )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   )InstallationErrorr6    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+   )r^   group)r_   mr   r   r   ra      s    r   z--xmlF)r   c             S   s   g | ]}t |jd qS )r+   )r^   rb   )r_   rc   r   r   r   ra      s    )pip._internal.exceptionsrV   r   r   r/   r9   r   openreadr<   listmapstr
splitlinesr0   _svn_xml_url_research
ValueErrorrb   _svn_rev_refinditerr    _svn_info_xml_url_re_svn_info_xml_rev_rer=   )r   r!   rV   entries_pathfdatar   revsmatchxmlr   r   r   r   r;      s>    








zSubversion._get_svn_url_revc             C   sH   | j |}|d krd S d| }| j|}|j jddd }t|||S )Nzsvn+r*   r+   r   )rU   rE   egg_namer0   r   )r   r3   r!   repor   egg_project_namer   r   r   get_src_requirement   s    

zSubversion.get_src_requirementc             C   s   dS )z&Always assume the versions don't matchFr   )r   r%   namer   r   r   is_commit_id_equal   s    zSubversion.is_commit_id_equal)r   r   r   r   r   )__name__
__module____qualname__r|   r9   	repo_nameschemesr   r   r'   r(   r)   r5   rE   rH   rL   rQ   rU   r;   r{   r}   __classcell__r   r   )rK   r   r      s$   	,
r   )
__future__r   loggingr   reZpip._internal.models.linkr   pip._internal.utils.loggingr   pip._internal.utils.miscr   r   r   r   pip._internal.vcsr	   r
   compilerk   rn   rq   rp   	getLoggerr~   r   r   registerr   r   r   r   <module>   s   




 ?