B
    UvgB	                 @   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	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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-r_9ig3yj/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   r0   &   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   r1   r#   r   r   r   r6   8   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   r6   r   r   r   r   r   )r   r1   r6   r   r   r   r   >   s    


zRequirementTracker.cleanupc             c   s   |  | d V  | | d S )N)r0   r6   )r   r1   r   r   r   trackH   s    
zRequirementTracker.trackN)__name__
__module____qualname__r   r   r   r%   r0   r6   r   
contextlibcontextmanagerr:   r   r   r   r   r      s   
r   )
__future__r   r>   r,   r   loggingr   pip._internal.utils.temp_dirr   	getLoggerr;   r   objectr   r   r   r   r   <module>   s   
