3
[B	                 @   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 ej	e
ZG dd deZdS )    )absolute_importN)TempDirectoryc               @   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jd| _| jd krTtddd| _| jj  | jj | _t jd< tj	d| j nd | _tj	d| j t
 | _d S )NZ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-65viz3iy/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   | j   d S )N)cleanup)r   exc_typeexc_valexc_tbr   r   r   __exit__   s    zRequirementTracker.__exit__c             C   s$   t j|jj j }tj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|}| j|}y,t|}td||j f W d Q R X W nz tk
r } z^|jtjkrd || j	ksrt
t|d}|j| W d Q R X | j	j| tjd|| j W Y d d }~X 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"   infoZ
entry_pathfper   r   r   r/   &   s    

zRequirementTracker.addc             C   s6   |j }| jj| tj| j| tjd|| j d S )Nz Removed %s from build tracker %r)	r"   r   remover   unlinkr$   r   r   r
   )r   r0   r"   r   r   r   r4   8   s    zRequirementTracker.removec             C   sR   xt | jD ]}| j| qW | jd k	}|r6| jj  tjd|rDdnd| j d S )Nz%s build tracker %rZRemovedZCleaned)r   r   r4   r   r   r   r   r
   )r   r0   r4   r   r   r   r   >   s    


zRequirementTracker.cleanupc             c   s   | j | d V  | j| d S )N)r/   r4   )r   r0   r   r   r   trackH   s    
zRequirementTracker.trackN)__name__
__module____qualname__r   r   r   r$   r/   r4   r   
contextlibcontextmanagerr6   r   r   r   r   r      s   
r   )
__future__r   r:   r+   r   loggingr   pip._internal.utils.temp_dirr   	getLoggerr7   r   objectr   r   r   r   r   <module>   s   
