U
    fmfs                     @   s   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rd 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 eeZejd
d Zejdd ZG dd de Z!dS )    )absolute_importN)contextlib2)TempDirectory)MYPY_CHECK_RUNNING)TracebackType)DictIteratorOptionalSetTypeUnion)InstallRequirement)Linkc               
   k   s   t j}t }i }|  D ]>\}}z|| ||< W n tk
rL   |||< Y nX |||< qz
d V  W 5 | D ].\}}||kr||= qlt|tst|||< qlX d S N)osenvironobjectitemsKeyError
isinstancestrAssertionError)ZchangestargetZnon_existent_markerZsaved_valuesnameZ	new_valueoriginal_value r   /home/dh_an3skk/arjun-chandrasekhar-teaching.com/tomato/tomatoenvy/lib/python3.8/site-packages/pip/_internal/req/req_tracker.pyupdate_env_context_manager   s     

r   c               
   c   st   t jd} t V}| d krL|tddj} |t| d t	
d|  t| }|V  W 5 Q R X W 5 Q R X d S )NPIP_REQ_TRACKERzreq-tracker)kind)r   z Initialized build tracking at %s)r   r   getr   	ExitStackenter_contextr   pathr   loggerdebugRequirementTracker)rootctxZtrackerr   r   r   get_requirement_tracker5   s    

r)   c                   @   sR   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	e
jdd ZdS )r&   c                 C   s    || _ t | _td| j  d S )NzCreated build tracker: %s)_rootset_entriesr$   r%   )selfr'   r   r   r   __init__G   s    zRequirementTracker.__init__c                 C   s   t d| j | S )NzEntered build tracker: %s)r$   r%   r*   )r-   r   r   r   	__enter__M   s    zRequirementTracker.__enter__c                 C   s   |    d S r   )cleanup)r-   exc_typeexc_valexc_tbr   r   r   __exit__R   s    zRequirementTracker.__exit__c                 C   s$   t |j  }tj| j|S r   )	hashlibsha224url_without_fragmentencode	hexdigestr   r#   joinr*   )r-   linkhashedr   r   r   _entry_path[   s    zRequirementTracker._entry_pathc              
   C   s   |  |j}z t|}| }W 5 Q R X W n0 tk
r\ } z|jtjkrL W 5 d}~X Y nX d|j|f }t||| jkst	t|d}|
t| W 5 Q R X | j| td|| j dS )z5Add an InstallRequirement to build tracking.
        Nz%s is already being built: %swzAdded %s to build tracker %r)r=   r;   openreadIOErrorerrnoENOENTLookupErrorr,   r   writer   addr$   r%   r*   )r-   reqZ
entry_pathfpcontentsemessager   r   r   rF   `   s    
zRequirementTracker.addc                 C   s2   t | |j | j| td|| j dS )z:Remove an InstallRequirement from build tracking.
        z Removed %s from build tracker %rN)	r   unlinkr=   r;   r,   remover$   r%   r*   r-   rG   r   r   r   rM      s    zRequirementTracker.removec                 C   s,   t | jD ]}| | q
td| j d S )NzRemoved build tracker: %r)r+   r,   rM   r$   r%   r*   rN   r   r   r   r0      s    zRequirementTracker.cleanupc                 c   s   |  | d V  | | d S r   )rF   rM   rN   r   r   r   track   s    
zRequirementTracker.trackN)__name__
__module____qualname__r.   r/   r4   r=   rF   rM   r0   
contextlibcontextmanagerrO   r   r   r   r   r&   E   s   	r&   )"
__future__r   rS   rB   r5   loggingr   pip._vendorr   pip._internal.utils.temp_dirr   pip._internal.utils.typingr   typesr   typingr   r   r	   r
   r   r   pip._internal.req.req_installr   pip._internal.models.linkr   	getLoggerrP   r$   rT   r   r)   r   r&   r   r   r   r   <module>   s&    


