๓
'^c           @@  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   InstallRequirement(   t   Linkc          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-eiI0Wo/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-eiI0Wo/pip/pip/_internal/req/req_tracker.pyt   get_requirement_tracker5   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-eiI0Wo/pip/pip/_internal/req/req_tracker.pyt   __init__G   s    	c         C@  s   t  j d |  j  |  S(   Ns   Entered build tracker: %s(   R$   R%   R+   (   R.   (    (    s:   /tmp/pip-build-eiI0Wo/pip/pip/_internal/req/req_tracker.pyt	   __enter__M   s    c         C@  s   |  j    d  S(   N(   t   cleanup(   R.   t   exc_typet   exc_valt   exc_tb(    (    s:   /tmp/pip-build-eiI0Wo/pip/pip/_internal/req/req_tracker.pyt   __exit__R   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-eiI0Wo/pip/pip/_internal/req/req_tracker.pyt   _entry_path[   s    c         C@  s๎   |  j  | j  } y% t |   } | j   } Wd QXWn+ t k
 rd } | j t j k r   q n  Xd | j | f } 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   %s is already being built: %st   ws   Added %s to build tracker %r(   R>   R<   t   opent   readt   IOErrort   errnot   ENOENTt   LookupErrorR-   R   t   writeR   t   addR$   R%   R+   (   R.   t   reqt
   entry_patht   fpt   contentst   et   message(    (    s:   /tmp/pip-build-eiI0Wo/pip/pip/_internal/req/req_tracker.pyRG   `   s    
c         C@  sC   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   t   unlinkR>   R<   R-   t   removeR$   R%   R+   (   R.   RH   (    (    s:   /tmp/pip-build-eiI0Wo/pip/pip/_internal/req/req_tracker.pyRO      s    c         C@  s>   x$ t  |  j  D] } |  j |  q Wt j d |  j  d  S(   Ns   Removed build tracker: %r(   R,   R-   RO   R$   R%   R+   (   R.   RH   (    (    s:   /tmp/pip-build-eiI0Wo/pip/pip/_internal/req/req_tracker.pyR1      s    c         c@  s#   |  j  |  d  V|  j |  d  S(   N(   RG   RO   (   R.   RH   (    (    s:   /tmp/pip-build-eiI0Wo/pip/pip/_internal/req/req_tracker.pyt   track   s    (   t   __name__t
   __module__R/   R0   R5   R>   RG   RO   R1   t
   contextlibt   contextmanagerRP   (    (    (    s:   /tmp/pip-build-eiI0Wo/pip/pip/_internal/req/req_tracker.pyR&   E   s   								("   t
   __future__R    RS   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.req.req_installR   t   pip._internal.models.linkR   t	   getLoggerRQ   R$   RT   R   R*   R   R&   (    (    (    s:   /tmp/pip-build-eiI0Wo/pip/pip/_internal/req/req_tracker.pyt   <module>   s"   .