a
    3e1                     @   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m	Z	m
Z
mZ d dlmZ d dlmZ d dlmZmZ edZed	Zed
ZedZerd dlmZmZ d dlmZ d dlmZ d dlmZmZ ee Z!G dd deZ"e#e" dS )    )absolute_importN)
indent_log)display_pathis_console_interactivermtreesplit_auth_from_netloc)make_command)MYPY_CHECK_RUNNING)VersionControlvcszurl="([^"]+)"zcommitted-rev="(\d+)"z\s*revision="(\d+)"z<url>(.*)</url>)OptionalTuple)
HiddenText)CommandArgs)AuthInfo
RevOptionsc                       s   e Zd ZdZdZdZdZedd Ze	dd Z
ed	d
 Ze fddZe fddZe	dd Zedd Zedd Zedd Zd( fdd	Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Z  ZS ))
Subversionsvnz.svncheckout)r   zsvn+sshzsvn+httpz	svn+httpszsvn+svnc                 C   s   dS )NT )cls
remote_urlr   r   O/home/pi/bot/my_env/lib/python3.9/site-packages/pip/_internal/vcs/subversion.pyshould_add_vcs_url_prefix,   s    z$Subversion.should_add_vcs_url_prefixc                 C   s   d| gS )Nz-rr   )revr   r   r   get_base_rev_args0   s    zSubversion.get_base_rev_argsc           	      C   s   d}t |D ]\}}}| j|vr0g |dd< q|| j t j|| jd}t j|s\q| |\}}||kr||d }n|r||sg |dd< qt	||}q|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
startswithmax)	r   locationrevisionbasedirs_
entries_fndirurllocalrevr   r   r   get_revision4   s"    

zSubversion.get_revisionc                    s"   |dkrt t| ||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   r3   P   s    zSubversion.get_netloc_and_authc                    s2   t t| |\}}}|dr(d| }|||fS )Nzssh://zsvn+)r2   r   get_url_rev_and_authr&   )r   urlr   	user_passr6   r   r   r8   ]   s    
zSubversion.get_url_rev_and_authc                 C   s(   g }| r|d| g7 }|r$|d|g7 }|S )Nz
--usernamez
--passwordr   )usernamepassword
extra_argsr   r   r   make_rev_argsf   s    zSubversion.make_rev_argsc                 C   sR   |}t jt j|dsD|}t j|}||krtd| d S q| |d S )Nzsetup.pyzGCould not find setup.py for directory %s (tried all parent directories)r   )r   r"   r$   r#   r    loggerwarningr%   )r   r(   orig_locationlast_locationr   r   r   get_remote_urlq   s    zSubversion.get_remote_urlc                 C   s  ddl m} tj|| jd}tj|r\t|}| }W d    q`1 sP0    Y  nd}|	ds~|	ds~|	drt
ttj|d}|d d= |d d	 }d
d |D dg }n|	drt|}|stdjf i t |d}dd t|D dg }n^z>| jdd|gddd}	t|	d}dd t|	D }W n |yr   d g  }}Y n0 |rt|}
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>       z/Subversion._get_svn_url_rev.<locals>.<listcomp>z<?xmlzBadly formatted data: {data!r}   c                 S   s   g | ]}t |d qS rQ   rL   grouprM   mr   r   r   rO      rP   infoz--xmlFTshow_stdoutstdout_onlyc                 S   s   g | ]}t |d qS rR   rS   rU   r   r   r   rO      s   )pip._internal.exceptionsrD   r   r"   r#   r    r$   openreadr&   listmapstr
splitlinessplit_svn_xml_url_research
ValueErrorformatlocalsrT   _svn_rev_refinditerrun_command_svn_info_xml_url_re_svn_info_xml_rev_rer'   )r   r(   rD   entries_pathfdatar9   revsmatchxmlr   r   r   r   r%      sN    
(





zSubversion._get_svn_url_revc                 C   s   dS )z&Always assume the versions don't matchFr   )r   destnamer   r   r   is_commit_id_equal   s    zSubversion.is_commit_id_equalNc                    s,   |d u rt  }|| _d | _tt|   d S )N)r   use_interactive_vcs_versionr2   r   __init__)selfrv   r6   r   r   rx      s
    zSubversion.__init__c                 C   s|   d}| j dgddd}||s$dS |t|d  d }|d	d d
}zttt|}W n tyv   Y dS 0 |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	--versionFTrX   r   Nr   -.)	rj   r&   rK   rb   	partitiontupler_   rL   re   )ry   version_prefixversionversion_listparsed_versionr   r   r   call_vcs_version   s    
zSubversion.call_vcs_versionc                 C   s"   | j dur| j S |  }|| _ |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)rw   r   )ry   vcs_versionr   r   r   get_vcs_version   s
    
zSubversion.get_vcs_versionc                 C   s&   | j sdgS |  }|dkr"dgS g S )aX  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
            - export
            - switch
            - update

        :return: A list of command line arguments to pass to ``svn``.
        z--non-interactive)rQ      z--force-interactive)rv   r   )ry   svn_versionr   r   r   get_remote_call_options  s    	z"Subversion.get_remote_call_optionsc                 C   s   |  |\}}td|| t J tj|r8t| td| 	 |
 ||}| j|dd W d   n1 sr0    Y  dS )z@Export the svn repository at the url to the destination locationz!Exporting svn repository %s to %sexportF)rY   N)get_url_rev_optionsr?   rW   r   r   r"   r$   r   r   r   to_argsrj   )ry   r(   r9   rev_optionscmd_argsr   r   r   r   #  s    
zSubversion.exportc                 C   sD   |  }td||t| tdd|  | ||}| | d S )NzChecking out %s%s to %sr   z-q)
to_displayr?   rW   r   r   r   r   rj   )ry   rs   r9   r   rev_displayr   r   r   r   	fetch_new4  s    

zSubversion.fetch_newc                 C   s&   t d|  | ||}| | d S )Nswitchr   r   r   rj   ry   rs   r9   r   r   r   r   r   r   C  s
    zSubversion.switchc                 C   s$   t d|  | |}| | d S )Nupdater   r   r   r   r   r   K  s
    zSubversion.update)N)__name__
__module____qualname__rt   r    	repo_nameschemesclassmethodr   staticmethodr   r0   r3   r8   r>   rC   r%   ru   rx   r   r   r   r   r   r   r   __classcell__r   r   r6   r   r   &   s<   






3
!r   )$
__future__r   loggingr   repip._internal.utils.loggingr   pip._internal.utils.miscr   r   r   r   pip._internal.utils.subprocessr   pip._internal.utils.typingr	    pip._internal.vcs.versioncontrolr
   r   compilerc   rh   rl   rk   typingr   r   r   r   r   r   	getLoggerr   r?   r   registerr   r   r   r   <module>   s,   




  0