ó
Ð²Ebc           @@  s0  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l m Z d  d l	 m
 Z
 d  d l m Z e rã d  d l m Z d  d l m Z m Z m Z m Z m Z m Z d  d l m Z d  d	 l m Z n  e j e ƒ Z e j d
 „  ƒ Z e j d „  ƒ Z d e  f d „  ƒ  YZ! d S(   i    (   t   absolute_importN(   t   contextlib2(   t   TempDirectory(   t   MYPY_CHECK_RUNNING(   t   TracebackType(   t   Dictt   Iteratort   Optionalt   Sett   Typet   Union(   t   Link(   t   InstallRequirementc          k@  sÒ   t  j } t ƒ  } i  } xT |  j ƒ  D]F \ } } y | | | | <Wn t k
 r` | | | <n X| | | <q% Wz	 d  VWd  xO | j ƒ  D]A \ } } | | k rª | | =qˆ t | t ƒ s¿ t ‚ | | | <qˆ WXd  S(   N(   t   ost   environt   objectt   itemst   KeyErrort
   isinstancet   strt   AssertionError(   t   changest   targett   non_existent_markert   saved_valuest   namet	   new_valuet   original_value(    (    s:   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_tracker.pyt   update_env_context_manager   s     			
c       	   c@  s•   t  j j d ƒ }  t j ƒ  q } |  d  k rq | j t d d ƒ ƒ j }  | j t	 d |  ƒ ƒ t
 j d |  ƒ n  t |  ƒ  } | VWd  QXWd  QXd  S(   Nt   PIP_REQ_TRACKERt   kinds   req-trackers    Initialized build tracking at %s(   R   R   t   getR   t	   ExitStackt   Nonet   enter_contextR   t   pathR   t   loggert   debugt   RequirementTracker(   t   roott   ctxt   tracker(    (    s:   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_tracker.pyt   get_requirement_tracker3   s    R&   c           B@  sY   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e	 j
 d „  ƒ Z RS(   c         C@  s,   | |  _  t ƒ  |  _ t j d |  j  ƒ d  S(   Ns   Created build tracker: %s(   t   _roott   sett   _entriesR$   R%   (   t   selfR'   (    (    s:   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_tracker.pyt   __init__E   s    	c         C@  s   t  j d |  j ƒ |  S(   Ns   Entered build tracker: %s(   R$   R%   R+   (   R.   (    (    s:   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_tracker.pyt	   __enter__K   s    c         C@  s   |  j  ƒ  d  S(   N(   t   cleanup(   R.   t   exc_typet   exc_valt   exc_tb(    (    s:   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_tracker.pyt   __exit__P   s    c         C@  s4   t  j | j j ƒ  ƒ j ƒ  } t j j |  j | ƒ S(   N(	   t   hashlibt   sha224t   url_without_fragmentt   encodet	   hexdigestR   R#   t   joinR+   (   R.   t   linkt   hashed(    (    s:   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_tracker.pyt   _entry_pathY   s    c         C@  sÿ   | j  s t ‚ |  j | j  ƒ } y% t | ƒ  } | j ƒ  } Wd QXWn+ t k
 rs } | j t j k r• ‚  q• n" Xd j | j  | ƒ } t	 | ƒ ‚ | |  j
 k sª t ‚ t | d ƒ  } | j t | ƒ ƒ Wd QX|  j
 j | ƒ t j d | |  j ƒ d S(   s5   Add an InstallRequirement to build tracking.
        Ns   {} is already being built: {}t   ws   Added %s to build tracker %r(   R<   R   R>   t   opent   readt   IOErrort   errnot   ENOENTt   formatt   LookupErrorR-   t   writeR   t   addR$   R%   R+   (   R.   t   reqt
   entry_patht   fpt   contentst   et   message(    (    s:   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_tracker.pyRH   ^   s     
c         C@  sR   | j  s t ‚ t j |  j | j  ƒ ƒ |  j j | ƒ t j d | |  j	 ƒ d S(   s:   Remove an InstallRequirement from build tracking.
        s    Removed %s from build tracker %rN(
   R<   R   R   t   unlinkR>   R-   t   removeR$   R%   R+   (   R.   RI   (    (    s:   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_tracker.pyRP      s    c         C@  s>   x$ t  |  j ƒ D] } |  j | ƒ q Wt j d |  j ƒ d  S(   Ns   Removed build tracker: %r(   R,   R-   RP   R$   R%   R+   (   R.   RI   (    (    s:   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_tracker.pyR1   ‹   s    c         c@  s#   |  j  | ƒ d  V|  j | ƒ d  S(   N(   RH   RP   (   R.   RI   (    (    s:   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_tracker.pyt   track’   s    (   t   __name__t
   __module__R/   R0   R5   R>   RH   RP   R1   t
   contextlibt   contextmanagerRQ   (    (    (    s:   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_tracker.pyR&   C   s   						!		("   t
   __future__R    RT   RC   R6   t   loggingR   t   pip._vendorR   t   pip._internal.utils.temp_dirR   t   pip._internal.utils.typingR   t   typesR   t   typingR   R   R   R   R	   R
   t   pip._internal.models.linkR   t   pip._internal.req.req_installR   t	   getLoggerRR   R$   RU   R   R*   R   R&   (    (    (    s:   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_tracker.pyt   <module>   s"   .