HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/pip/_internal/vcs/__pycache__/subversion.cpython-310.pyc
o

@%Ne�-�@s�ddlZddlZddlZddlmZmZmZddlmZm	Z	m
Z
mZmZddl
mZmZddlmZmZmZmZmZe�e�Ze�d�Ze�d�Ze�d�Ze�d	�ZGd
d�de�Ze�e�dS)�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="([^"]+)"zcommitted-rev="(\d+)"z\s*revision="(\d+)"z<url>(.*)</url>cs�eZdZdZdZdZdZedede	fdd��Z
ed	edeefd
d��Z
ededefd
d��Zedededeeeeeeefff�fdd��Zededeeeeeff�fdd��Zedeedeedefdd��Zededefdd��Zededeeeeffdd��Zededeede	fd d!��Zd5d#e	dd"f�fd$d%�
Zdeed&ffd'd(�Zdeed&ffd)d*�Zdefd+d,�Zdeded-ed.edd"f
d/d0�Z deded-edd"fd1d2�Z!deded-edd"fd3d4�Z"�Z#S)6�
Subversion�svnz.svn�checkout)zsvn+sshzsvn+httpz	svn+httpszsvn+svnzsvn+file�
remote_url�returncC�dS)NT�)�clsrrr�>/usr/lib/python3/dist-packages/pip/_internal/vcs/subversion.py�should_add_vcs_url_prefix$sz$Subversion.should_add_vcs_url_prefix�revcCsd|gS)Nz-rr)rrrr�get_base_rev_args(szSubversion.get_base_rev_args�locationc	Cs�d}t�|�D]P\}}}|j|vrg|dd�<q|�|j�tj�||jd�}tj�|�s.q|�|�\}}||krD|dus?J�|d}n|rK|�|�sRg|dd�<qt	||�}qt
|�S)zR
        Return the maximum revision for all files under a given location
        rN�entries�/)�os�walk�dirname�remove�path�join�exists�_get_svn_url_rev�
startswith�max�str)	rr�revision�base�dirs�_�
entries_fn�dirurl�localrevrrr�get_revision,s$

zSubversion.get_revision�netloc�schemecs|dkrt��||�St|�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	)rr3r4��	__class__rrr7IszSubversion.get_netloc_and_auth�urlcs.t��|�\}}}|�d�rd|}|||fS)Nzssh://zsvn+)r6�get_url_rev_and_authr()rr:r�	user_passr8rrr;Xs

zSubversion.get_url_rev_and_auth�username�passwordcCs(g}|r
|d|g7}|r|d|g7}|S)Nz
--usernamez
--passwordr)r=r>�
extra_argsrrr�
make_rev_args`szSubversion.make_rev_argscCsZ|}t|�s|}tj�|�}||krt�d|�t�t|�r|�|�\}}|dur+t�|S)NzMCould not find Python project for directory %s (tried all parent directories))rr r$r"�logger�warningr
r')rr�
orig_location�
last_locationr:�_revrrr�get_remote_urlls��
zSubversion.get_remote_urlcCs�ddlm}tj�||jd�}tj�|�r.t|��}|��}Wd�n1s(wYnd}d}|�	d�sA|�	d�sA|�	d�rbt
ttj
|�d���}|dd=|dd	}d
d�|D�dg}n\|�	d�r�t�|�}	|	sutd
|����|	�d�}dd�t�|�D�dg}n6z'|jdd|gddd�}
t�|
�}	|	dus�J�|	�d�}dd�t�|
�D�}Wn|y�dg}}Ynw|r�t|�}||fSd}||fS)Nr)�InstallationErrorr��8�9�10z

�cSs,g|]}t|�dkr|drt|d��qS)�	)�len�int)�.0�drrr�
<listcomp>�s,z/Subversion._get_svn_url_rev.<locals>.<listcomp>z<?xmlzBadly formatted data: �cS�g|]	}t|�d���qS�rS�rO�group�rP�mrrrrR���infoz--xmlFT��show_stdout�stdout_onlycSrTrUrVrXrrrrR�rZ)�pip._internal.exceptionsrGr 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))rrrG�entries_path�f�datar:r�revs�match�xmlrrrrr'�sL

��



�

��zSubversion._get_svn_url_rev�dest�namecCr)z&Always assume the versions don't matchFr)rrtrurrr�is_commit_id_equal�szSubversion.is_commit_id_equalN�use_interactivecs(|durt�}||_d|_t���dS�N)rrw�_vcs_versionr6�__init__)�selfrwr8rrrz�s
zSubversion.__init__.cCszd}|jdgddd�}|�|�sdS|t|�d���d}|�d	�d�d
�}z
ttt|��}W|Sty<YdSw)aQuery 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\rNr�-�.)	rkr(rNre�	partition�tuplercrOrh)r{�version_prefix�version�version_list�parsed_versionrrr�call_vcs_version�s
��zSubversion.call_vcs_versioncCs"|jdur|jS|��}||_|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)ryr�)r{�vcs_versionrrr�get_vcs_version�s


zSubversion.get_vcs_versioncCs&|jsdgS|��}|dkrdgSgS)aCReturn 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)rwr�)r{�svn_versionrrr�get_remote_call_options�s	z"Subversion.get_remote_call_options�rev_options�	verbositycCsV|��}t�d||t|��|dkrd}nd}td||��|��||�}|�|�dS)NzChecking out %s%s to %srz--quietrHr)�
to_displayrAr[rrr��to_argsrk)r{rtr:r�r��rev_display�flag�cmd_argsrrr�	fetch_news&��zSubversion.fetch_newcCs&td|��|��||�}|�|�dS)N�switch�rr�r�rk�r{rtr:r�r�rrrr�0s�zSubversion.switchcCs$td|��|��|�}|�|�dS)N�updater�r�rrrr�:s�zSubversion.updaterx)$�__name__�
__module__�__qualname__rur"�	repo_name�schemes�classmethodr*�boolr�staticmethodrrr2rrr7rr;rr
r@rFrOr'rvrzr�r�r�rr�r�r��
__classcell__rrr8rrsh���&��� 1����
�"
r) �loggingr �re�typingrrr�pip._internal.utils.miscrrrrr	�pip._internal.utils.subprocessr
r� pip._internal.vcs.versioncontrolrr
rrr�	getLoggerr�rA�compilerfrirmrlr�registerrrrr�<module>s 




(