U
    P^{                     @   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
 e
rd dlmZ d dlmZmZmZmZ d dlmZ d dlmZ eeZG d	d
 d
eZdS )    )absolute_importN)TempDirectory)MYPY_CHECK_RUNNING)TracebackType)IteratorOptionalSetType)InstallRequirement)Linkc                   @   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 )RequirementTrackerc                 C   sj   t jd| _| jd krJtddd| _| jj | _t jd< td| j nd | _td| j t	 | _
d S )NPIP_REQ_TRACKERFzreq-tracker)deletekindzCreated requirements tracker %rz Re-using requirements tracker %r)osenvironget_rootr   	_temp_dirpathloggerdebugset_entriesself r   >/tmp/pip-install-220asx0h/pip/pip/_internal/req/req_tracker.py__init__   s    
zRequirementTracker.__init__c                 C   s   | S Nr   r   r   r   r   	__enter__&   s    zRequirementTracker.__enter__c                 C   s   |    d S r   )cleanup)r   exc_typeexc_valexc_tbr   r   r   __exit__*   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_path3   s    zRequirementTracker._entry_pathc                 C   s   |j }t|}| |}z,t|}td|| f W 5 Q R X W nz tk
r } z\|jtjkrd || j	ksrt
t|d}|| W 5 Q R X | j	| td|| j W 5 d }~X Y nX d S )Nz%s is already being built: %swzAdded %s to build tracker %r)r,   strr.   openLookupErrorreadIOErrorerrnoENOENTr   AssertionErrorwriteaddr   r   r   )r   reqr,   info
entry_pathfper   r   r   r9   8   s     


zRequirementTracker.addc                 C   s6   |j }| j| t| | td|| j d S )Nz Removed %s from build tracker %r)	r,   r   remover   unlinkr.   r   r   r   )r   r:   r,   r   r   r   r?   K   s    zRequirementTracker.removec                 C   sN   t | jD ]}| | q
| jd k	}|r2| j  td|r@dnd| j d S )Nz%s build tracker %rRemovedCleaned)r   r   r?   r   r!   r   r   r   )r   r:   r?   r   r   r   r!   R   s    


zRequirementTracker.cleanupc                 c   s   |  | d V  | | d S r   )r9   r?   )r   r:   r   r   r   track]   s    
zRequirementTracker.trackN)__name__
__module____qualname__r   r    r%   r.   r9   r?   r!   
contextlibcontextmanagerrC   r   r   r   r   r      s   	r   )
__future__r   rG   r5   r&   loggingr   pip._internal.utils.temp_dirr   pip._internal.utils.typingr   typesr   typingr   r   r   r	   Zpip._internal.req.req_installr
   pip._internal.models.linkr   	getLoggerrD   r   objectr   r   r   r   r   <module>   s   
