3

g                 @   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jeZG dd deZej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hg+filehg+httphg+httpshg+sshhg+static-httpc             C   s   | gS )N )revr   r   ?/tmp/pip-unpacked-wheel-v59g9nu1/pip/_internal/vcs/mercurial.pyget_base_rev_args'   s    zMercurial.get_base_rev_argsc             C   s@   t dd,}| j|j|d | jd|gd|jd W dQ R X 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   |j  }tjd||t| | jtddd|| | jtdd|j |d d S )NzCloning hg %s%s to %sr   z
--noupdatez-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|| jd}tj }y>|j| |jdd|j t	|d}|j
| W d Q R X W n6 ttjfk
r } ztjd|| W Y d d }~X n X tdd|j }| j||d d S )	Nhgrcpathsdefaultwz/Could not switch Mercurial repository to %s: %sr(   z-q)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 }| j ||d d S )Npullz-q)r!   r(   )r$   r   r,   )r%   r-   r   r.   rE   r   r   r   r(   U   s    zMercurial.updatec             C   s2   | j ddgd|dj }| j|r*t|}|j S )N
showconfigzpaths.defaultF)r    r!   )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j }|S )zW
        Return the repository-local changeset revision number, as an integer.
        parentsz--template={rev}F)r    r!   )r$   rI   )rK   r&   current_revisionr   r   r   get_revisiond   s    zMercurial.get_revisionc             C   s   | j ddgd|dj }|S )zh
        Return the changeset identification hash, as a 40-character
        hexadecimal string
        rM   z--template={node}F)r    r!   )r$   rI   )rK   r&   current_rev_hashr   r   r   get_requirement_revisionn   s    z"Mercurial.get_requirement_revisionc             C   s   dS )z&Always assume the versions don't matchFr   )rK   r-   namer   r   r   is_commit_id_equaly   s    zMercurial.is_commit_id_equalc             C   sB   | j dgd|dj }tjj|s8tjjtj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.
        rootF)r    r!   )r$   rI   r5   r#   isabsabspathr6   r   )rK   r&   	repo_rootr   r   r   get_subdirectory~   s
    zMercurial.get_subdirectoryc                sL   t t| j|rdS y| jdg|dddd dS  ttfk
rF   dS X d S )NTidentifyFraise)r!   r    on_returncodelog_failed_cmd)superr   controls_locationr$   r   r   )rK   r&   )	__class__r   r   r^      s    zMercurial.controls_location)r   r   r   r   r   r   )__name__
__module____qualname__rR   r7   	repo_nameschemesstaticmethodr   r   r0   rF   r(   classmethodrL   rO   rQ   rS   rX   r^   __classcell__r   r   )r_   r   r      s   
	
r   )
__future__r   loggingr5   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   	getLoggerr`   r*   r   registerr   r   r   r   <module>   s    
|