๓
jทร^c           @@  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 rใ d  d l	 m Z d  d l m Z n  e j e  Z d e f d     YZ e j e  d S(   i    (   t   absolute_importN(   t   configparser(   t
   BadCommandt   InstallationError(   t   display_path(   t   make_command(   t   TempDirectory(   t   MYPY_CHECK_RUNNING(   t   path_to_url(   t   VersionControlt!   find_path_to_setup_from_repo_roott   vcs(   t
   HiddenText(   t
   RevOptionst	   Mercurialc           B@  sญ   e  Z d  Z d Z d Z d Z e d    Z d	   Z d
   Z	 d   Z
 d   Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z RS(   t   hgs   .hgt   clones   hg+files   hg+https   hg+httpss   hg+sshs   hg+static-httpc         C@  s   |  g S(   N(    (   t   rev(    (    s,   site-packages/pip/_internal/vcs/mercurial.pyt   get_base_rev_args'   s    c      
   C@  sT   t  d d  ? } |  j | j d | |  j d | g d t d | j Wd QXd S(   s?   Export the Hg repository at the url to the destination locationt   kindt   exportt   urlt   archivet   show_stdoutt   cwdN(   R   t   unpackt   patht   run_commandt   False(   t   selft   locationR   t   temp_dir(    (    s,   site-packages/pip/_internal/vcs/mercurial.pyR   +   s    c         C@  sp   | j    } t j d | | t |   |  j t d d d | |   |  j t d d | j    d | d  S(   Ns   Cloning hg %s%s to %sR   s
   --noupdates   -qt   updateR   (   t
   to_displayt   loggert   infoR   R   R   t   to_args(   R   t   destR   t   rev_optionst   rev_display(    (    s,   site-packages/pip/_internal/vcs/mercurial.pyt	   fetch_new5   s    c   	      C@  sิ   t  j j | |  j d  } t j   } yL | j |  | j d d | j  t	 | d   } | j
 |  Wd  QXWn/ t t j f k
 rค } t j d | |  n, Xt d d | j    } |  j | d | d  S(	   Nt   hgrct   pathst   defaultt   ws/   Could not switch Mercurial repository to %s: %sR    s   -qR   (   t   osR   t   joint   dirnameR   t   RawConfigParsert   readt   sett   secrett   opent   writet   OSErrort   NoSectionErrorR"   t   warningR   R$   R   (	   R   R%   R   R&   t   repo_configt   configt   config_filet   exct   cmd_args(    (    s,   site-packages/pip/_internal/vcs/mercurial.pyt   switchD   s    c         C@  sH   |  j  d d g d | t d d | j    } |  j  | d | d  S(   Nt   pulls   -qR   R    (   R   R   R$   (   R   R%   R   R&   R=   (    (    s,   site-packages/pip/_internal/vcs/mercurial.pyR    U   s    c         C@  sO   |  j  d d g d t d | j   } |  j |  rE t |  } n  | j   S(   Nt
   showconfigs   paths.defaultR   R   (   R   R   t   stript   _is_local_repositoryR   (   t   clsR   R   (    (    s,   site-packages/pip/_internal/vcs/mercurial.pyt   get_remote_url[   s    c         C@  s+   |  j  d d g d t d | j   } | S(   sW   
        Return the repository-local changeset revision number, as an integer.
        t   parentss   --template={rev}R   R   (   R   R   RA   (   RC   R   t   current_revision(    (    s,   site-packages/pip/_internal/vcs/mercurial.pyt   get_revisiond   s    c         C@  s+   |  j  d d g d t d | j   } | S(   sh   
        Return the changeset identification hash, as a 40-character
        hexadecimal string
        RE   s   --template={node}R   R   (   R   R   RA   (   RC   R   t   current_rev_hash(    (    s,   site-packages/pip/_internal/vcs/mercurial.pyt   get_requirement_revisionn   s    c         C@  s   t  S(   s&   Always assume the versions don't match(   R   (   RC   R%   t   name(    (    s,   site-packages/pip/_internal/vcs/mercurial.pyt   is_commit_id_equaly   s    c         C@  sg   |  j  d g d t d | j   } t j j |  sZ t j j t j j | |   } n  t | |  S(   s~   
        Return the path to setup.py, relative to the repo root.
        Return None if setup.py is in the repo root.
        t   rootR   R   (	   R   R   RA   R-   R   t   isabst   abspathR.   R
   (   RC   R   t	   repo_root(    (    s,   site-packages/pip/_internal/vcs/mercurial.pyt   get_subdirectory~   s
    $c      
   C@  s   t  t |   j |  } | r" | Sy. |  j d g d | d t d d d t } Wn3 t k
 rt t j d |  d  St	 k
 r d  SXt
 j j | j d   S(	   NRL   R   R   t   on_returncodet   raiset   log_failed_cmdsI   could not determine if %s is under hg control because hg is not availables   
(   t   superR   t   get_repository_rootR   R   R   R"   t   debugt   NoneR   R-   R   t   normpatht   rstrip(   RC   R   t   loct   r(    (    s,   site-packages/pip/_internal/vcs/mercurial.pyRU      s"    		(   R   s   hg+files   hg+https   hg+httpss   hg+sshs   hg+static-http(   t   __name__t
   __module__RJ   R/   t	   repo_namet   schemest   staticmethodR   R   R(   R>   R    t   classmethodRD   RG   RI   RK   RP   RU   (    (    (    s,   site-packages/pip/_internal/vcs/mercurial.pyR      s   	
				
(   t
   __future__R    t   loggingR-   t   pip._vendor.six.movesR   t   pip._internal.exceptionsR   R   t   pip._internal.utils.miscR   t   pip._internal.utils.subprocessR   t   pip._internal.utils.temp_dirR   t   pip._internal.utils.typingR   t   pip._internal.utils.urlsR   t    pip._internal.vcs.versioncontrolR	   R
   R   R   R   t	   getLoggerR\   R"   R   t   register(    (    (    s,   site-packages/pip/_internal/vcs/mercurial.pyt   <module>   s    