B
    He%                 @   s   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mZm	Z	m
Z
mZmZ d dlmZ d dlmZ d dlmZ eeZe jeed dd	d
Ze jed dddZG dd dZdS )    N)TracebackType)Dict	GeneratorOptionalSetTypeUnion)Link)InstallRequirement)TempDirectory)NNN)changesreturnc           
   k   s   t j}t }i }xJ|  D ]>\}}y|| ||< W n tk
rN   |||< Y nX |||< qW z
d V  W d x:| D ].\}}||kr||= qrt|tst|||< qrW X d S )N)osenvironobjectitemsKeyError
isinstancestrAssertionError)r   targetnon_existent_markersaved_valuesname	new_valueoriginal_value r   /var/www/downstreamdata.science/rtclock/rtclock-venv/lib/python3.7/site-packages/pip/_internal/operations/build/build_tracker.pyupdate_env_context_manager   s     
r   )BuildTrackerNN)r   c           
   c   st   t jd} t V}| d krL|tddj} |t| d t	
d|  t| }|V  W d Q R X W d Q R X d S )NPIP_BUILD_TRACKERzbuild-tracker)kind)r    z Initialized build tracking at %s)r   r   get
contextlib	ExitStackenter_contextr   pathr   loggerdebugr   )rootctxtrackerr   r   r   get_build_tracker)   s    

r,   c               @   s   e Zd ZeddddZd dddZeee  ee ee	 ddd	d
Z
eedddZeddddZeddddZddddZejeed dddZdS )r   N)r)   r   c             C   s    || _ t | _td| j  d S )NzCreated build tracker: %s)_rootset_entriesr'   r(   )selfr)   r   r   r   __init__7   s    zBuildTracker.__init__)r   c             C   s   t d| j | S )NzEntered build tracker: %s)r'   r(   r-   )r0   r   r   r   	__enter__<   s    zBuildTracker.__enter__)exc_typeexc_valexc_tbr   c             C   s   |    d S )N)cleanup)r0   r3   r4   r5   r   r   r   __exit__@   s    zBuildTracker.__exit__)linkr   c             C   s$   t |j  }tj| j|S )N)	hashlibsha224url_without_fragmentencode	hexdigestr   r&   joinr-   )r0   r8   hashedr   r   r   _entry_pathH   s    zBuildTracker._entry_path)reqr   c          	   C   s   |j s
t| |j }y t|}| }W dQ R X W n tk
rJ   Y nX d|j |}t||| jksptt|ddd}|	t
| W dQ R X | j| td|| j dS )z,Add an InstallRequirement to build tracking.Nz{} is already being built: {}wzutf-8)encodingzAdded %s to build tracker %r)r8   r   r@   openreadFileNotFoundErrorformatLookupErrorr/   writer   addr'   r(   r-   )r0   rA   
entry_pathfpcontentsmessager   r   r   rJ   L   s    

zBuildTracker.addc             C   s<   |j s
tt| |j  | j| td|| j	 dS )z1Remove an InstallRequirement from build tracking.z Removed %s from build tracker %rN)
r8   r   r   unlinkr@   r/   remover'   r(   r-   )r0   rA   r   r   r   rP   h   s    
zBuildTracker.removec             C   s0   xt | jD ]}| | qW td| j d S )NzRemoved build tracker: %r)r.   r/   rP   r'   r(   r-   )r0   rA   r   r   r   r6   r   s    zBuildTracker.cleanup)NNNc             c   s   |  | d V  | | d S )N)rJ   rP   )r0   rA   r   r   r   trackx   s    
zBuildTracker.track)__name__
__module____qualname__r   r1   r2   r   r   BaseExceptionr   r7   r	   r@   r
   rJ   rP   r6   r#   contextmanagerr   rQ   r   r   r   r   r   6   s   

r   )r#   r9   loggingr   typesr   typingr   r   r   r   r   r   pip._internal.models.linkr	   Zpip._internal.req.req_installr
   pip._internal.utils.temp_dirr   	getLoggerrR   r'   rV   r   r   r,   r   r   r   r   r   <module>   s    
