B
    =)H[b&  ã               @   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 d dlmZmZ d dlmZmZ e d¡Ze d	¡Ze d
¡Ze d¡Ze d¡Ze d¡Ze e¡ZG dd„ deƒZdd„ Ze e¡ dS )é    )Úabsolute_importN)Úparse)ÚLink)Ú
indent_log)Údisplay_pathÚrmtree)ÚVersionControlÚvcsz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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)r   zsvn+sshzsvn+httpz	svn+httpszsvn+svnc             C   s   d|gS )Nz-r© )ÚselfÚrevr   r   ú]C:\Users\HIRONO~1\AppData\Local\Temp\pip-install-qz7kpjmn\pip\pip\_internal\vcs\subversion.pyÚget_base_rev_args   s    zSubversion.get_base_rev_argsc             C   s²   |  d¡ | j¡rtd| ƒ‚| jd|gdddid�}t |¡}|sdt dt	|ƒ¡ t 
d	|¡ d
S | d¡ ¡ }t |¡}|s¤t dt	|ƒ¡ t 
d	|¡ |dfS || 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: 
%s)NNé   z,Cannot determine revision of svn checkout %sN)ÚrstripÚendswithÚdirnameÚAssertionErrorÚrun_commandÚ_svn_url_reÚsearchÚloggerÚwarningr   ÚdebugÚgroupÚstripÚ_svn_revision_re)r   ÚlocationÚoutputÚmatchÚurlr   r   r   Úget_info"   s,    




zSubversion.get_infoc          	   C   s~   |   ¡ \}}t| ||ƒ}|  |¡}t d||¡ tƒ �> tj |¡rLt	|ƒ dg| 
¡  ||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)r   N)Úget_url_revÚget_rev_optionsÚremove_auth_from_urlr    r   r   ÚosÚpathÚexistsr   Úto_argsr   )r   r&   r)   r   Úrev_optionsÚcmd_argsr   r   r   r+   >   s    
zSubversion.exportc             C   s$   dg|  ¡  ||g }|  |¡ d S )NÚswitch)r2   r   )r   Údestr)   r3   r4   r   r   r   r5   L   s    zSubversion.switchc             C   s"   dg|  ¡  |g }|  |¡ d S )NÚupdate)r2   r   )r   r6   r3   r4   r   r   r   r7   P   s    zSubversion.updatec             C   sr   |   ¡ \}}t| ||ƒ}|  |¡}|  |||¡rn| ¡ }t d||t|ƒ¡ ddg| ¡  ||g }|  	|¡ d S )NzChecking out %s%s to %sr   z-q)
r,   r-   r.   Úcheck_destinationÚ
to_displayr    r   r   r2   r   )r   r6   r)   r   r3   Úrev_displayr4   r   r   r   ÚobtainT   s    

zSubversion.obtainc             C   sf   x`|D ]X}t |ƒj}|sqd|kr@d | d¡d d… ¡ ¡ }n|}||jkr| dd¡d S qW d S )Nú-éÿÿÿÿú#r   r   )r   Úegg_fragmentÚjoinÚsplitÚlowerÚkey)r   ÚdistÚdependency_linksr)   r?   rC   r   r   r   Úget_locationc   s    


zSubversion.get_locationc       	      C   s¬   d}x¢t  |¡D ]”\}}}| j|kr2g |dd…< q| | j¡ t j || jd¡}t j |¡s^q|  |¡\}}||kr~|d }n|rŒ| |¡sšg |dd…< qt	||ƒ}qW |S )zR
        Return the maximum revision for all files under a given location
        r   NÚentriesr   )
r/   Úwalkr   Úremover0   r@   r1   Ú_get_svn_url_revÚ
startswithÚmax)	r   r&   ÚrevisionÚbaseÚdirsÚfilesÚ
entries_fnÚdirurlÚlocalrevr   r   r   Úget_revisionq   s"    

zSubversion.get_revisionc                s,   t t| ƒ ¡ \}}| d¡r$d| }||fS )Nzssh://zsvn+)Úsuperr
   r,   rK   )r   r)   r   )Ú	__class__r   r   r,   Œ   s    
zSubversion.get_url_revc             C   sV   |}xBt j t j |d¡¡sF|}t j |¡}||krt d|¡ d S qW |  |¡d S )Nzsetup.pyzGCould not find setup.py for directory %s (tried all parent directories)r   )r/   r0   r1   r@   r   r    r!   rJ   )r   r&   Úorig_locationÚlast_locationr   r   r   Úget_url“   s    zSubversion.get_urlc          	   C   sp  ddl m} tj || jd¡}tj |¡rHt|ƒ�}| ¡ }W d Q R X nd}| 	d¡sj| 	d¡sj| 	d¡r¬t
ttj| d¡ƒƒ}|d d= |d d	 }d
d„ |D ƒdg }n¨| 	d¡röt |¡}|sÐtd| ƒ‚| d¡}dd„ t |¡D ƒdg }n^y<| jdd|gdd�}	t |	¡ d¡}dd„ t |	¡D ƒ}W n  |k
�rR   d g  }}Y nX |�rdt|ƒ}
nd}
||
fS )Nr   )ÚInstallationErrorrG   Ú Ú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 | d ¡ƒ‘qS )r   )rb   r#   )rc   Úmr   r   r   re   ½   s    r   z--xmlF)r   c             S   s   g | ]}t | d ¡ƒ‘qS )r   )rb   r#   )rc   rf   r   r   r   re   Ç   s    )Úpip._internal.exceptionsrZ   r/   r0   r@   r   r1   ÚopenÚreadrK   ÚlistÚmapÚstrÚ
splitlinesrA   Ú_svn_xml_url_rer   Ú
ValueErrorr#   Ú_svn_rev_reÚfinditerr   Ú_svn_info_xml_url_reÚ_svn_info_xml_rev_rerL   )r   r&   rZ   Úentries_pathÚfÚdatar)   Úrevsr(   Úxmlr   r   r   r   rJ   §   s>    








zSubversion._get_svn_url_revc             C   sB   |   |¡}|d krd S | ¡  dd¡d }|  |¡}d|||f S )Nr<   r   r   zsvn+%s@%s#egg=%s)rY   Úegg_namerA   rT   )r   rD   r&   ÚrepoÚegg_project_namer   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   r6   Únamer   r   r   Úis_commit_id_equalÜ   s    zSubversion.is_commit_id_equalc             C   s>   t  | ¡}|j d¡d }|j||j|j|jf}t  |¡}|S )Nú@r=   )	Úurllib_parseÚurlsplitÚnetlocrA   Úschemer0   ÚqueryÚfragmentÚ
urlunsplit)r)   ÚpurlÚstripped_netlocÚ
url_piecesÚsurlr   r   r   r.   à   s
    

zSubversion.remove_auth_from_url)Ú__name__Ú
__module__Ú__qualname__r}   r   Ú	repo_nameÚschemesr   r*   r+   r5   r7   r;   rF   rT   r,   rY   rJ   r|   r~   Ústaticmethodr.   Ú__classcell__r   r   )rV   r   r
      s$   ,	r
   c       	      C   s¢   t  |¡}t|dƒr$|j|j }}nL|d }d|krh| d¡d }d|kr\| dd¡\}}qp|d }}nd\}}g }|r„|d|g7 }|r”|d	|g7 }| j||d
�S )z%
    Return a RevOptions object.
    Úusernamer   r   r   ú:N)NNz
--usernamez
--password)Ú
extra_args)r€   r�   Úhasattrr’   ÚpasswordrA   Úmake_rev_options)	r	   r)   r   Úrr’   r–   r‚   Úauthr”   r   r   r   r-   ó   s     

r-   )Ú
__future__r   Úloggingr/   ÚreZpip._vendor.six.moves.urllibr   r€   Úpip._internal.indexr   Úpip._internal.utils.loggingr   Úpip._internal.utils.miscr   r   Úpip._internal.vcsr   r	   Úcompilern   rp   r   r%   rs   rr   Ú	getLoggerr‹   r    r
   r-   Úregisterr   r   r   r   Ú<module>   s&   






 [