a
    e0h                     @   s   d dl mZ d dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZmZ erd dl	mZ d dlmZ eeZG dd deZee dS )    )absolute_importN)configparser)
BadCommandInstallationError)display_path)make_command)TempDirectory)MYPY_CHECK_RUNNING)path_to_url)VersionControl!find_path_to_setup_from_repo_rootvcs)
HiddenText)
RevOptionsc                       s   e Zd ZdZdZdZdZedd Zdd Z	d	d
 Z
dd Zdd Zedd Zedd Zedd Zedd Zedd Ze fddZ  ZS )	Mercurialhgz.hgclone)r   zhg+filezhg+httpzhg+httpszhg+sshzhg+static-httpc                 C   s   | gS )N )revr   r   I/var/www/auris/lib/python3.9/site-packages/pip/_internal/vcs/mercurial.pyget_base_rev_args'   s    zMercurial.get_base_rev_argsc                 C   sT   t dd6}| j|j|d | jd|gd|jd W d   n1 sF0    Y  dS )z?Export the Hg repository at the url to the destination locationexport)kind)urlarchiveF)show_stdoutcwdN)r   unpackpathrun_command)selflocationr   temp_dirr   r   r   r   +   s
    zMercurial.exportc                 C   sP   |  }td||t| | tddd|| | jtdd| |d d S )NzCloning hg %s%s to %sr   z
--noupdate-qupdater   )
to_displayloggerinfor   r   r   to_args)r    destr   rev_optionsrev_displayr   r   r   	fetch_new5   s    zMercurial.fetch_newc           	   
   C   s   t j|| jd}t }zR|| |dd|j t	|d}|
| W d    n1 s`0    Y  W n8 ttjfy } ztd|| W Y d }~n(d }~0 0 tdd| }| j||d d S )	Nhgrcpathsdefaultwz/Could not switch Mercurial repository to %s: %sr$   r#   r%   )osr   joindirnamer   RawConfigParserreadsetsecretopenwriteOSErrorNoSectionErrorr'   warningr   r)   r   )	r    r*   r   r+   repo_configconfigconfig_fileexccmd_argsr   r   r   switchD   s    
,zMercurial.switchc                 C   s4   | j ddg|d tdd| }| j ||d d S )Npullr#   r%   r$   )r   r   r)   )r    r*   r   r+   rB   r   r   r   r$   U   s    zMercurial.updatec                 C   s4   | j ddgdd|d }| |r,t|}| S )N
showconfigzpaths.defaultFTr   stdout_onlyr   )r   strip_is_local_repositoryr
   )clsr!   r   r   r   r   get_remote_url[   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}FTrF   r   rH   )rJ   r!   current_revisionr   r   r   get_revisiong   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
        rL   z--template={node}FTrF   rM   )rJ   r!   current_rev_hashr   r   r   get_requirement_revisiont   s    
z"Mercurial.get_requirement_revisionc                 C   s   dS )z&Always assume the versions don't matchFr   )rJ   r*   namer   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 setup.py, relative to the repo root.
        Return None if setup.py is in the repo root.
        rootFTrF   )r   rH   r2   r   isabsabspathr3   r   )rJ   r!   	repo_rootr   r   r   get_subdirectory   s    

zMercurial.get_subdirectoryc                    sz   t t| |}|r|S z| jdg|ddddd}W n2 tyT   td| Y d S  tyf   Y d S 0 tj	
|dS )NrT   FTraise)r   r   rG   on_returncodelog_failed_cmdzIcould not determine if %s is under hg control because hg is not availablez
)superr   get_repository_rootr   r   r'   debugr   r2   r   normpathrstrip)rJ   r!   locr	__class__r   r   r]      s(    
zMercurial.get_repository_root)__name__
__module____qualname__rR   r4   	repo_nameschemesstaticmethodr   r   r-   rC   r$   classmethodrK   rO   rQ   rS   rX   r]   __classcell__r   r   rc   r   r      s,   






r   )
__future__r   loggingr2   Zpip._vendor.six.movesr   pip._internal.exceptionsr   r   pip._internal.utils.miscr   pip._internal.utils.subprocessr   pip._internal.utils.temp_dirr   pip._internal.utils.typingr	   pip._internal.utils.urlsr
    pip._internal.vcs.versioncontrolr   r   r   r   r   	getLoggerre   r'   r   registerr   r   r   r   <module>   s"   
 