o
    Ëý°jÆ-  ã                   @   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  e¡Ze d¡Ze d¡Ze d¡Ze d	¡ZG d
d„ deƒZe 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dZedede	fdd„ƒZ
ed	edee fd
d„ƒZededefdd„ƒZedededeeeee ee f f f‡ fdd„ƒZededeeee ef f‡ fdd„ƒZedee dee defdd„ƒZededefdd„ƒZededeee ef fdd„ƒZededee de	fd d!„ƒZd5d#e	dd"f‡ fd$d%„Zdeed&f fd'd(„Zdeed&f fd)d*„Zdefd+d,„Zdeded-ed.edd"f
d/d0„Z deded-edd"fd1d2„Z!deded-edd"fd3d4„Z"‡  Z#S )6Ú
SubversionÚsvnz.svnÚcheckout)zsvn+sshzsvn+httpz	svn+httpszsvn+svnzsvn+fileÚ
remote_urlÚreturnc                 C   ó   dS )NT© )Úclsr   r   r   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pip/_internal/vcs/subversion.pyÚshould_add_vcs_url_prefix$   s   z$Subversion.should_add_vcs_url_prefixÚrevc                 C   s   d| gS )Nz-rr   )r   r   r   r   Úget_base_rev_args(   s   zSubversion.get_base_rev_argsÚlocationc           	      C   s¸   d}t  |¡D ]P\}}}| j|vrg |dd…< q| | j¡ t j || jd¡}t j |¡s.q|  |¡\}}||krD|dus?J ‚|d }n|rK| |¡sRg |dd…< qt	||ƒ}q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Ú
startswithÚmaxÚstr)	r   r   ÚrevisionÚbaseÚdirsÚ_Ú
entries_fnÚdirurlÚlocalrevr   r   r   Úget_revision,   s$   

zSubversion.get_revisionÚnetlocÚschemec                    s   |dkr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)ÚsuperÚget_netloc_and_authr	   )r   r3   r4   ©Ú	__class__r   r   r7   I   s   zSubversion.get_netloc_and_authÚurlc                    s.   t ƒ  |¡\}}}| d¡rd| }|||fS )Nzssh://zsvn+)r6   Úget_url_rev_and_authr(   )r   r:   r   Ú	user_passr8   r   r   r;   X   s   

zSubversion.get_url_rev_and_authÚusernameÚpasswordc                 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   sZ   |}t |ƒs|}tj |¡}||krt d|¡ t‚t |ƒr|  |¡\}}|d u r+t‚|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:   Ú_revr   r   r   Úget_remote_urll   s   ýõzSubversion.get_remote_urlc                 C   sœ  ddl m} tj || jd¡}tj |¡r.t|ƒ�}| ¡ }W d   ƒ n1 s(w   Y  nd}d }| 	d¡sA| 	d¡sA| 	d¡rbt
ttj| d¡ƒƒ}|d d= |d d	 }d
d„ |D ƒdg }n\| 	d¡rˆt |¡}	|	sutd|›�ƒ‚|	 d¡}dd„ t |¡D ƒdg }n6z'| jdd|gddd�}
t |
¡}	|	d usŸJ ‚|	 d¡}dd„ t |
¡D ƒ}W n |y½   d g }}Y nw |rÈt|ƒ}||fS 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   ó   g | ]	}t | d ¡ƒ‘qS ©rS   ©rO   Úgroup©rP   Úmr   r   r   rR   š   ó    Úinfoz--xmlFT©Úshow_stdoutÚstdout_onlyc                 S   rT   rU   rV   rX   r   r   r   rR   «   rZ   )Úpip._internal.exceptionsrG   r    r$   r%   r"   r&   ÚopenÚreadr(   ÚlistÚmapr*   Ú
splitlinesÚsplitÚ_svn_xml_url_reÚsearchÚ
ValueErrorrW   Ú_svn_rev_reÚfinditerÚrun_commandÚ_svn_info_xml_url_reÚ_svn_info_xml_rev_rer)   )r   r   rG   Úentries_pathÚfÚdatar:   r   ÚrevsÚmatchÚxmlr   r   r   r   r'   „   sL   

ÿ€



ý

ÿþzSubversion._get_svn_url_revÚdestÚnamec                 C   r   )z&Always assume the versions don't matchFr   )r   rt   ru   r   r   r   Úis_commit_id_equal¶   s   zSubversion.is_commit_id_equalNÚuse_interactivec                    s(   |d u rt ƒ }|| _d | _tƒ  ¡  d S ©N)r   rw   Ú_vcs_versionr6   Ú__init__)Úselfrw   r8   r   r   rz   »   s
   zSubversion.__init__.c                 C   sz   d}| j dgddd�}| |¡sdS |t|ƒd…  ¡ d }| d	¡d  d
¡}z
ttt|ƒƒ}W |S  ty<   Y dS w )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	--versionFTr\   r   Nr   ú-Ú.)	rk   r(   rN   re   Ú	partitionÚtuplerc   rO   rh   )r{   Ú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)ry   r„   )r{   Ú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 )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-interactive)rS   é   z--force-interactive)rw   r†   )r{   Úsvn_versionr   r   r   Úget_remote_call_optionsù   s   	z"Subversion.get_remote_call_optionsÚrev_optionsÚ	verbosityc                 C   sV   |  ¡ }t d||t|ƒ¡ |dkrd}nd}td||  ¡ | ¡ ||ƒ}|  |¡ d S )NzChecking out %s%s to %sr   z--quietrH   r   )Ú
to_displayrA   r[   r   r   r‰   Úto_argsrk   )r{   rt   r:   rŠ   r‹   Úrev_displayÚflagÚcmd_argsr   r   r   Ú	fetch_new  s&   üúzSubversion.fetch_newc                 C   s&   t d|  ¡ | ¡ ||ƒ}|  |¡ d S )NÚswitch©r   r‰   r�   rk   ©r{   rt   r:   rŠ   r�   r   r   r   r’   0  s   ûzSubversion.switchc                 C   s$   t d|  ¡ | ¡ |ƒ}|  |¡ d S )NÚupdater“   r”   r   r   r   r•   :  s   üzSubversion.updaterx   )$Ú__name__Ú
__module__Ú__qualname__ru   r"   Ú	repo_nameÚschemesÚclassmethodr*   Úboolr   Ústaticmethodr   r   r2   r   r   r7   r   r;   r   r
   r@   rF   rO   r'   rv   rz   r„   r†   r‰   r   r‘   r’   r•   Ú__classcell__r   r   r8   r   r      sh    ÿÿþ&ÿÿþ 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–   rA   Úcompilerf   ri   rm   rl   r   Úregisterr   r   r   r   Ú<module>   s     




  (