3
gL-                 @   s   d dl Z d dlZd dlZd dlmZmZmZ d dlmZm	Z	m
Z
mZmZ d dlmZmZ d dlmZmZmZmZmZ e jeZejdZejdZejdZejd	ZG d
d deZeje dS )    N)ListOptionalTuple)
HiddenTextdisplay_pathis_console_interactiveis_installable_dirsplit_auth_from_netloc)CommandArgsmake_command)AuthInfoRemoteNotFoundError
RevOptions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d5Zeee	d	d
dZ
eeee dddZeeedddZeeeeeeee ee f f d fddZeeeeee ef d fddZeee ee edddZeeedddZeeeee ef dddZeeee e	dd d!Zd6e	d"d# fd$d%Zeed&f d'd(d)Zeed&f d'd*d+Zed'd,d-Zeeed"d.d/d0Z eeed"d.d1d2Z!eeed"d.d3d4Z"  Z#S )7
Subversionsvnz.svncheckoutsvn+sshsvn+http	svn+httpssvn+svnsvn+file)
remote_urlreturnc             C   s   dS )NT )clsr   r   r   Z/var/www/tester-filtro-web/env/lib/python3.6/site-packages/pip/_internal/vcs/subversion.pyshould_add_vcs_url_prefix$   s    z$Subversion.should_add_vcs_url_prefix)revr   c             C   s   d| gS )Nz-rr   )r   r   r   r   get_base_rev_args(   s    zSubversion.get_base_rev_args)locationr   c       	      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k	st|d }n | s|j	| rg |dd< qt
||}qW t|S )zR
        Return the maximum revision for all files under a given location
        r   Nentries/)oswalkdirnameremovepathjoinexists_get_svn_url_revAssertionError
startswithmaxstr)	r   r!   revisionbasedirs_Z
entries_fnZdirurlZlocalrevr   r   r   get_revision,   s$    

zSubversion.get_revision)netlocschemer   c                s   |dkr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)superget_netloc_and_authr	   )r   r5   r6   )	__class__r   r   r9   I   s    zSubversion.get_netloc_and_auth)urlr   c                s.   t  j|\}}}|jdr$d| }|||fS )Nzssh://zsvn+)r8   get_url_rev_and_authr-   )r   r;   r   	user_pass)r:   r   r   r<   X   s    
zSubversion.get_url_rev_and_auth)usernamepasswordr   c             C   s(   g }| r|d| g7 }|r$|d|g7 }|S )Nz
--usernamez
--passwordr   )r>   r?   
extra_argsr   r   r   make_rev_args`   s    zSubversion.make_rev_argsc             C   sX   |}x4t |s8|}tjj|}||krtjd| tqW | j|\}}|d krTt|S )NzMCould not find Python project for directory %s (tried all parent directories))r   r$   r(   r&   loggerwarningr   r+   )r   r!   orig_locationlast_locationr;   Z_revr   r   r   get_remote_urll   s    
zSubversion.get_remote_urlc             C   s  ddl m} tjj|| jd}tjj|rHt|}|j }W d Q R X nd}d }|j	dsn|j	dsn|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 }nryP| jdd|gddd}
tj|
}	|	d k	s,t|	jd}dd tj|
D }W n  |k
rl   d g  }}Y nX |r~t|}nd}||fS )Nr   )InstallationErrorr"    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:    c             S   s   g | ]}t |jd qS )rS   )rO   group)rP   mr   r   r   rR      s    infoz--xmlFT)show_stdoutstdout_onlyc             S   s   g | ]}t |jd qS )rS   )rO   rT   )rP   rU   r   r   r   rR      s    )pip._internal.exceptionsrG   r$   r(   r)   r&   r*   openreadr-   listmapr/   
splitlinessplit_svn_xml_url_research
ValueErrorrT   _svn_rev_refinditerrun_command_svn_info_xml_url_rer,   _svn_info_xml_rev_rer.   )r   r!   rG   Zentries_pathfdatar;   r"   Zrevsmatchxmlr   r   r   r   r+      sB    







zSubversion._get_svn_url_rev)destnamer   c             C   s   dS )z&Always assume the versions don't matchFr   )r   rl   rm   r   r   r   is_commit_id_equal   s    zSubversion.is_commit_id_equalN)use_interactiver   c                s(   |d krt  }|| _d | _t j  d S )N)r   ro   _vcs_versionr8   __init__)selfro   )r:   r   r   rq      s
    zSubversion.__init__.)r   c             C   s|   d}| j dgddd}|j|s$f S |t|d j d }|jdd jd	}yttt|}W n tk
rv   f S X |S )
a  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.
        zsvn, version z	--versionFT)rW   rX   Nr   -.)	re   r-   rN   r_   	partitiontupler]   rO   rb   )rr   Zversion_prefixversionZversion_listparsed_versionr   r   r   call_vcs_version   s    
zSubversion.call_vcs_versionc             C   s"   | j dk	r| j S | j }|| _ |S )a  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)rp   ry   )rr   Zvcs_versionr   r   r   get_vcs_version   s
    

zSubversion.get_vcs_versionc             C   s&   | j sdgS | j }|dkr"dgS g S )aC  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
            - switch
            - update

        :return: A list of command line arguments to pass to ``svn``.
        z--non-interactiverS      z--force-interactive)rS   r{   )ro   rz   )rr   Zsvn_versionr   r   r   get_remote_call_options   s    	z"Subversion.get_remote_call_options)rl   r;   rev_optionsr   c             C   sD   |j  }tjd||t| tdd| j |j ||}| j| d S )NzChecking out %s%s to %sr   z-q)
to_displayrB   rV   r   r   r|   to_argsre   )rr   rl   r;   r}   rev_displaycmd_argsr   r   r   	fetch_new  s    
zSubversion.fetch_newc             C   s&   t d| j |j ||}| j| d S )Nswitch)r   r|   r   re   )rr   rl   r;   r}   r   r   r   r   r   *  s    zSubversion.switchc             C   s$   t d| j |j |}| j| d S )Nupdate)r   r|   r   re   )rr   rl   r;   r}   r   r   r   r   r   4  s    zSubversion.update)r   r   r   r   r   )N)$__name__
__module____qualname__rm   r&   	repo_nameschemesclassmethodr/   boolr   staticmethodr   r    r4   r   r   r9   r   r<   r   r
   rA   rF   rO   r+   rn   rq   ry   rz   r|   r   r   r   r   __classcell__r   r   )r:   r   r      s>   ,$	1
r   ) loggingr$   retypingr   r   r   pip._internal.utils.miscr   r   r   r   r	   pip._internal.utils.subprocessr
   r    pip._internal.vcs.versioncontrolr   r   r   r   r   	getLoggerr   rB   compiler`   rc   rg   rf   r   registerr   r   r   r   <module>   s   




  "