a
    ñ»j.  ã                   @  s¼   d dl mZ d dlZd dlZd dl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 )é    )ÚannotationsN)Ú
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                      sh  e Zd ZdZdZdZdZedddœdd	„ƒZe	dd
dœdd„ƒZ
edddœdd„ƒZeddddœ‡ fdd„ƒZedddœ‡ fdd„ƒZe	ddddœdd„ƒZedddœdd „ƒZedd!dœd"d#„ƒZedddd$œd%d&„ƒZd@d(d)d*œ‡ fd+d,„Zd-d.œd/d0„Zd-d.œd1d2„Zdd.œd3d4„Zdd5d6d7d)d8œd9d:„ZdAdd5d6d7d)d8œd<d=„ZdBdd5d6d7d)d8œd>d?„Z‡  ZS )CÚ
SubversionÚsvnz.svnÚcheckout)zsvn+sshzsvn+httpz	svn+httpszsvn+svnzsvn+fileÚstrÚbool)Ú
remote_urlÚreturnc                 C  s   dS )NT© )Úclsr   r   r   úBE:\soccer\ml_env\Lib\site-packages\pip/_internal/vcs/subversion.pyÚshould_add_vcs_url_prefix%   s    z$Subversion.should_add_vcs_url_prefixz	list[str])Ú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}t  |¡D ] \}}}| j|vr0g |dd…< q| | j¡ t j || jd¡}t j |¡s\q|  |¡\}}||krˆ|dus~J ‚|d }n|r–| |¡s¤g |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Úmaxr   )	r   r   ÚrevisionÚbaseÚdirsÚ_Ú
entries_fnÚdirurlÚlocalrevr   r   r   Úget_revision-   s$    

zSubversion.get_revisionz)tuple[str, tuple[str | None, str | None]])ÚnetlocÚschemer   c                   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   r1   r2   ©Ú	__class__r   r   r5   J   s    zSubversion.get_netloc_and_authz tuple[str, str | None, AuthInfo])Úurlr   c                   s.   t ƒ  |¡\}}}| d¡r$d| }|||fS )Nzssh://zsvn+)r4   Úget_url_rev_and_authr'   )r   r8   r   Ú	user_passr6   r   r   r9   Y   s    
zSubversion.get_url_rev_and_authz
str | NonezHiddenText | Noner   )Ú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_argsa   s    zSubversion.make_rev_argsc                 C  sT   |}t |ƒs6|}tj |¡}||krt d|¡ t‚q|  |¡\}}|d u rPt‚|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_locationr8   Ú_revr   r   r   Úget_remote_urlk   s    ýzSubversion.get_remote_urlztuple[str | None, int]c                 C  sˆ  ddl m} tj || jd¡}tj |¡r\t|ƒ�}| ¡ }W d   ƒ q`1 sP0    Y  nd}d }| 	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 }npzP| jdd|gddd�}
t |
¡}	|	d u�s,J ‚|	 d¡}dd	„ t |
¡D ƒ}W n |�yj   d g  }}Y n0 |�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>“   ó    z/Subversion._get_svn_url_rev.<locals>.<listcomp>z<?xmlzBadly formatted data: é   c                 S  s   g | ]}t | d ¡ƒ‘qS ©rR   ©rM   Úgroup©rN   Úmr   r   r   rP   ™   rQ   Úinfoz--xmlFT©Úshow_stdoutÚstdout_onlyc                 S  s   g | ]}t | d ¡ƒ‘qS rS   rT   rV   r   r   r   rP   ª   rQ   )Úpip._internal.exceptionsrE   r   r#   r$   r!   r%   ÚopenÚreadr'   ÚlistÚmapr   Ú
splitlinesÚsplitÚ_svn_xml_url_reÚsearchÚ
ValueErrorrU   Ú_svn_rev_reÚfinditerÚrun_commandÚ_svn_info_xml_url_reÚ_svn_info_xml_rev_rer(   )r   r   rE   Úentries_pathÚfÚdatar8   r   ÚrevsÚmatchÚxmlr   r   r   r   r&   ƒ   sD    
(




ý


zSubversion._get_svn_url_rev)ÚdestÚnamer   c                 C  s   dS )z&Always assume the versions don't matchFr   )r   rq   rr   r   r   r   Úis_commit_id_equalµ   s    zSubversion.is_commit_id_equalNzbool | NoneÚNone)Úuse_interactiver   c                   s(   |d u rt ƒ }|| _d | _tƒ  ¡  d S )N)r   ru   Ú_vcs_versionr4   Ú__init__)Úselfru   r6   r   r   rw   º   s
    zSubversion.__init__ztuple[int, ...])r   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	--versionFTrY   r   Nr   ú-Ú.)	rh   r'   rL   rb   Ú	partitionÚtupler`   rM   re   )rx   Ú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)rv   r�   )rx   Ú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)rR   é   z--force-interactive)ru   rƒ   )rx   Úsvn_versionr   r   r   Úget_remote_call_optionsø   s    	z"Subversion.get_remote_call_optionsr   r   rM   )rq   r8   Úrev_optionsÚ	verbosityr   c                 C  sf   |  ¡ }t d||t|ƒ¡ |dkr,dg}ng }tdg|¢|  ¡ ‘| ¡ ‘|‘|‘R Ž }|  |¡ d S )NzChecking out %s%s to %sr   z--quietr   )Ú
to_displayr?   rX   r   r	   r†   Úto_argsrh   )rx   rq   r8   r‡   rˆ   Úrev_displayÚflagsÚcmd_argsr   r   r   Ú	fetch_new  s0    üÿþýüûúzSubversion.fetch_newr   c                 C  s&   t d|  ¡ | ¡ ||ƒ}|  |¡ d S )NÚswitch©r	   r†   rŠ   rh   ©rx   rq   r8   r‡   rˆ   r�   r   r   r   r�   /  s    ûzSubversion.switchc                 C  s$   t d|  ¡ | ¡ |ƒ}|  |¡ d S )NÚupdater�   r‘   r   r   r   r’   ?  s    üzSubversion.update)N)r   )r   )Ú__name__Ú
__module__Ú__qualname__rr   r!   Ú	repo_nameÚschemesÚclassmethodr   Ústaticmethodr   r0   r5   r9   r>   rD   r&   rs   rw   r�   rƒ   r†   rŽ   r�   r’   Ú__classcell__r   r   r6   r   r      s>   	1 û ûr   )Ú
__future__r   Úloggingr   ÚreÚpip._internal.utils.miscr   r   r   r   r   Úpip._internal.utils.subprocessr   r	   Ú pip._internal.vcs.versioncontrolr
   r   r   r   r   Ú	getLoggerr“   r?   Úcompilerc   rf   rj   ri   r   Úregisterr   r   r   r   Ú<module>   s   




  2