o
    h                     @  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   N/var/www/html/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 )
N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_flags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-   pullr!   r    )r7   r&   r   r'   )r(   r   r   r   r   r@   rE   r   r   r   r    V   s   
zMercurial.updatelocationc                 C  s4   | j ddgdd|d }| |rt|}| S )N
showconfigzpaths.defaultFTshow_stdoutstdout_onlyr"   )r&   strip_is_local_repositoryr   )clsrH   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}FTrJ   r&   rM   )rO   rH   current_revisionr   r   r   get_revisionr   s   zMercurial.get_revisionc                 C  rQ   )zh
        Return the changeset identification hash, as a 40-character
        hexadecimal string
        rR   z--template={node}FTrJ   rS   )rO   rH   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   )rO   r   rX   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.
        rootFTrJ   )r&   rM   r1   r2   isabsabspathr3   r   )rO   rH   	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 )Nr\   FTraise)r"   rK   rL   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   r1   r2   normpathrstrip)rO   rH   locr	__class__r   r   re      s,   
zMercurial.get_repository_root)r   r   r   r   )
r   r   r   r   r   r	   r   r   r   r   )r   )rH   r   r   r   )r   r   rX   rY   r   rZ   )rH   r   r   rY   )__name__
__module____qualname__rX   r4   	repo_nameschemesstaticmethodr   r+   rF   r    classmethodrP   rU   rW   r[   r`   re   __classcell__r   r   rk   r   r      s0    
r   )
__future__r   r5   loggingr1   pip._internal.exceptionsr   r   pip._internal.utils.miscr   r   pip._internal.utils.subprocessr   pip._internal.utils.urlsr    pip._internal.vcs.versioncontrolr	   r
   r   r   	getLoggerrm   r$   r   registerr   r   r   r   <module>   s    
 &