o
    Uh                     @  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 d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZmZmZmZ eeZG dd	 d	eZee dS )
    )annotationsN)
BadCommandInstallationError)
HiddenTextdisplay_path)make_command)path_to_url)
RevOptionsVersionControl(find_path_to_project_root_from_repo_rootvcsc                      s   e Zd ZdZdZdZdZed*d	d
Zd+ddZ		d,d+ddZ
	d,d+ddZed-ddZed-ddZed-dd Zed.d$d%Zed/d&d'Zed/ fd(d)Z  ZS )0	Mercurialhgz.hgclone)zhg+filezhg+httpzhg+httpszhg+sshzhg+static-httprevstrreturn	list[str]c                 C  s   d|  gS )Nz--rev= )r   r   r   c/var/www/html/figdemos/bartoux_crm/venv/lib/python3.10/site-packages/pip/_internal/vcs/mercurial.pyget_base_rev_args!   s   zMercurial.get_base_rev_argsdesturlr   rev_optionsr	   	verbosityintNonec                 C  s   |  }td||t| |dkrd}n|dkrd}n	|dkr#d}nd}| td	d
g|||R   | jtdg|| R  |d d S )NzCloning hg %s%s to %sr   )z--quiet   r      )	--verbose)r   z--debugr   z
--noupdateupdatecwd)
to_displayloggerinfor   run_commandr   to_args)selfr   r   r   r   rev_displayflagsr   r   r   	fetch_new%   s&    
zMercurial.fetch_newr   c              
   C  s   g }t j|| jd}t }|dkr|d z)|| |dd|j	 t
|d}|| W d    n1 s;w   Y  W n ttjfy^ }	 ztd||	 W Y d }	~	d S d }	~	ww tdg|| R  }
| j|
|d	 d S )
NZhgrcr   -qpathsdefaultwz/Could not switch Mercurial repository to %s: %sr    r!   )ospathjoindirnameconfigparserRawConfigParserappendreadsetsecretopenwriteOSErrorNoSectionErrorr$   warningr   r'   r&   )r(   r   r   r   r   extra_flagsZrepo_configconfigconfig_fileexccmd_argsr   r   r   switch=   s$   

zMercurial.switchc                 C  sT   g }|dkr| d | jdg||d tdg|| R  }| j||d d S )Nr   r,   Zpullr!   r    )r6   r&   r   r'   )r(   r   r   r   r   r?   rC   r   r   r   r    V   s   
zMercurial.updatelocationc                 C  s4   | j ddgdd|d }| |rt|}| S )NZ
showconfigzpaths.defaultFTshow_stdoutstdout_onlyr"   )r&   strip_is_local_repositoryr   )clsrE   r   r   r   r   get_remote_urlf   s   
zMercurial.get_remote_urlc                 C     | j ddgdd|d }|S )zW
        Return the repository-local changeset revision number, as an integer.
        parentsz--template={rev}FTrF   r&   rI   )rK   rE   Zcurrent_revisionr   r   r   get_revisionr   s   zMercurial.get_revisionc                 C  rM   )zh
        Return the changeset identification hash, as a 40-character
        hexadecimal string
        rN   z--template={node}FTrF   rO   )rK   rE   Zcurrent_rev_hashr   r   r   get_requirement_revision   s   z"Mercurial.get_requirement_revisionname
str | Noneboolc                 C  s   dS )z&Always assume the versions don't matchFr   )rK   r   rR   r   r   r   is_commit_id_equal   s   zMercurial.is_commit_id_equalc                 C  sD   | j dgdd|d }tj|stjtj||}t||S )z
        Return the path to Python project root, relative to the repo root.
        Return None if the project root is in the repo root.
        rootFTrF   )r&   rI   r0   r1   isabsabspathr2   r   )rK   rE   	repo_rootr   r   r   get_subdirectory   s   

zMercurial.get_subdirectoryc                   sv   t  |}|r
|S z| jdg|ddddd}W n ty(   td| Y d S  ty1   Y d S w tj	|
dS )NrV   FTraise)r"   rG   rH   on_returncodelog_failed_cmdzIcould not determine if %s is under hg control because hg is not availablez
)superget_repository_rootr&   r   r$   debugr   r0   r1   normpathrstrip)rK   rE   locr	__class__r   r   r_      s,   
zMercurial.get_repository_root)r   r   r   r   )
r   r   r   r   r   r	   r   r   r   r   )r   )rE   r   r   r   )r   r   rR   rS   r   rT   )rE   r   r   rS   )__name__
__module____qualname__rR   r3   	repo_nameschemesstaticmethodr   r+   rD   r    classmethodrL   rP   rQ   rU   rZ   r_   __classcell__r   r   re   r   r      s0    
r   )
__future__r   r4   loggingr0   pip._internal.exceptionsr   r   pip._internal.utils.miscr   r   pip._internal.utils.subprocessr   pip._internal.utils.urlsr    pip._internal.vcs.versioncontrolr	   r
   r   r   	getLoggerrg   r$   r   registerr   r   r   r   <module>   s    
 &