B
    KkdY                 @   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
rxd dl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)SetIterator)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   st   t jd| _| jd krTtddd| _| j  | 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createpathloggerdebugset_entries)self r   >/tmp/pip-install-gxxfd9b7/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 )N)cleanup)r   exc_typeexc_valexc_tbr   r   r   __exit__&   s    zRequirementTracker.__exit__c             C   s$   t |j  }tj| j|S )N)	hashlibsha224url_without_fragmentencode	hexdigestr   r   joinr   )r   linkhashedr   r   r   _entry_path)   s    zRequirementTracker._entry_pathc             C   s   |j }t|}| |}y,t|}td|| f W d Q R X W nz tk
r } z\|jtjkrd || j	ksrt
t|d}|| W d Q R X | j	| td|| j W d 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   r5   .   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   r6   r(   r   r   r   r;   A   s    zRequirementTracker.removec             C   sR   xt | jD ]}| | qW | jd k	}|r6| j  td|rDdnd| j d S )Nz%s build tracker %rRemovedCleaned)r   r   r;   r   r   r   r   r   )r   r6   r;   r   r   r   r   H   s    


zRequirementTracker.cleanupc             c   s   |  | d V  | | d S )N)r5   r;   )r   r6   r   r   r   trackS   s    
zRequirementTracker.trackN)__name__
__module____qualname__r   r   r!   r*   r5   r;   r   
contextlibcontextmanagerr?   r   r   r   r   r	      s   r	   )
__future__r   rC   r1   r"   loggingr   pip._internal.utils.temp_dirr   pip._internal.utils.typingr   typingr   r   Zpip._internal.req.req_installr   pip._internal.models.linkr   	getLoggerr@   r   objectr	   r   r   r   r   <module>   s   
