a
    s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dd	Zdd
ddddddZ	d&dd
ddddddZ
d'dd
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Zeddddd d!Zedddd"d#Zeddd fd$d%Z  ZS )(	Mercurialhgz.hgclone)zhg+filezhg+httpzhg+httpszhg+sshzhg+static-httpstrz	list[str])revreturnc                 C  s   d|  gS )Nz--rev= )r   r   r   W/var/www/html/assistant/venv/lib/python3.9/site-packages/pip/_internal/vcs/mercurial.pyget_base_rev_args!   s    zMercurial.get_base_rev_argsr   r	   intNone)desturlrev_options	verbosityr   c                 C  s   |  }td||t| |dkr*d}n |dkr8d}n|dkrFd}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r0|d zR|| |dd|j	 t
|d}|| W d    n1 sv0    Y  W n8 ttjfy }	 ztd||	 W Y d }	~	n0d }	~	0 0 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   )r6   r%   r   r&   )r'   r   r   r   r   r?   rD   r   r   r   r   V   s    
zMercurial.update)locationr   c                 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   )clsrG   r   r   r   r   get_remote_urlf   s    

zMercurial.get_remote_urlc                 C  s   | j ddgdd|d }|S )zW
        Return the repository-local changeset revision number, as an integer.
        parentsz--template={rev}FTrI   r%   rL   )rN   rG   current_revisionr   r   r   get_revisionr   s    
zMercurial.get_revisionc                 C  s   | j ddgdd|d }|S )zh
        Return the changeset identification hash, as a 40-character
        hexadecimal string
        rP   z--template={node}FTrI   rQ   )rN   rG   current_rev_hashr   r   r   get_requirement_revision   s    
z"Mercurial.get_requirement_revisionz
str | Nonebool)r   namer   c                 C  s   dS )z&Always assume the versions don't matchFr   )rN   r   rW   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.
        rootFTrI   )r%   rL   r0   r1   isabsabspathr2   r   )rN   rG   	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 n2 tyP   td| Y d S  tyb   Y d S 0 tj	|
dS )NrY   FTraise)r!   rJ   rK   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)rN   rG   locr	__class__r   r   rb      s*    
zMercurial.get_repository_root)r   )r   )__name__
__module____qualname__rW   r3   	repo_nameschemesstaticmethodr   r*   rE   r   classmethodrO   rS   rU   rX   r]   rb   __classcell__r   r   rh   r   r      s.     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   	getLoggerrj   r#   r   registerr   r   r   r   <module>   s   
 &