a
    Œ�éiS  ã                   @   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
 d dlmZ er 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 e e¡Zejd
d„ ƒZejdd„ ƒZG dd„ de ƒZ!dS )é    )Úabsolute_importN)Úcontextlib2)ÚTempDirectory)ÚMYPY_CHECK_RUNNING)ÚTracebackType)ÚDictÚIteratorÚOptionalÚSetÚTypeÚUnion)ÚLink)ÚInstallRequirementc               
   k   sØ   t j}tƒ }i }|  ¡ D ]<\}}z|| ||< W n tyJ   |||< Y n0 |||< qzBd V  W | ¡ D ].\}}||u r€||= qht|tƒsŽJ ‚|||< qhn:| ¡ D ].\}}||u rº||= q¢t|tƒsÈJ ‚|||< q¢0 d S ©N)ÚosÚenvironÚobjectÚitemsÚKeyErrorÚ
isinstanceÚstr)ÚchangesÚtargetÚnon_existent_markerÚsaved_valuesÚnameÚ	new_valueÚoriginal_value© r   úM/home/Claro/venv/lib/python3.9/site-packages/pip/_internal/req/req_tracker.pyÚupdate_env_context_manager   s*    
ûr    c               	   c   sœ   t j d¡} t ¡ �t}| d u rL| tdd�¡j} | t| d�¡ t	 
d| ¡ t| ƒ�}|V  W d   ƒ n1 sp0    Y  W d   ƒ n1 sŽ0    Y  d S )NÚPIP_REQ_TRACKERzreq-tracker)Úkind)r!   z Initialized build tracking at %s)r   r   Úgetr   Ú	ExitStackÚenter_contextr   Úpathr    ÚloggerÚdebugÚRequirementTracker)ÚrootÚctxÚtrackerr   r   r   Úget_requirement_tracker3   s    
ÿ
r-   c                   @   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 )r)   c                 C   s    || _ tƒ | _t d| j ¡ d S )NzCreated build tracker: %s)Ú_rootÚsetÚ_entriesr'   r(   )Úselfr*   r   r   r   Ú__init__E   s    zRequirementTracker.__init__c                 C   s   t  d| j¡ | S )NzEntered build tracker: %s)r'   r(   r.   )r1   r   r   r   Ú	__enter__K   s    zRequirementTracker.__enter__c                 C   s   |   ¡  d S r   )Úcleanup)r1   Úexc_typeÚexc_valÚexc_tbr   r   r   Ú__exit__P   s    zRequirementTracker.__exit__c                 C   s$   t  |j ¡ ¡ ¡ }tj | j|¡S r   )	ÚhashlibÚsha224Úurl_without_fragmentÚencodeÚ	hexdigestr   r&   Újoinr.   )r1   ÚlinkÚhashedr   r   r   Ú_entry_pathY   s    zRequirementTracker._entry_pathc              
   C   sú   |j s
J ‚|  |j ¡}z4t|ƒ�}| ¡ }W d  ƒ n1 s>0    Y  W n2 ty| } z|jtjkrh‚ W Y d}~n d}~0 0 d |j |¡}t|ƒ‚|| j	vs¢J ‚t|dƒ�}| 
t|ƒ¡ W d  ƒ n1 sÐ0    Y  | j	 |¡ t d|| j¡ dS )z5Add an InstallRequirement to build tracking.
        Nz{} is already being built: {}ÚwzAdded %s to build tracker %r)r?   rA   ÚopenÚreadÚIOErrorÚerrnoÚENOENTÚformatÚLookupErrorr0   Úwriter   Úaddr'   r(   r.   )r1   ÚreqÚ
entry_pathÚfpÚcontentsÚeÚmessager   r   r   rK   ^   s"    

*ÿ,zRequirementTracker.addc                 C   s<   |j s
J ‚t |  |j ¡¡ | j |¡ t d|| j¡ dS )z:Remove an InstallRequirement from build tracking.
        z Removed %s from build tracker %rN)	r?   r   ÚunlinkrA   r0   Úremover'   r(   r.   ©r1   rL   r   r   r   rS      s    
zRequirementTracker.removec                 C   s,   t | jƒD ]}|  |¡ q
t d| j¡ d S )NzRemoved build tracker: %r)r/   r0   rS   r'   r(   r.   rT   r   r   r   r4   ‹   s    zRequirementTracker.cleanupc                 c   s   |   |¡ d V  |  |¡ d S r   )rK   rS   rT   r   r   r   Útrack’   s    
zRequirementTracker.trackN)Ú__name__Ú
__module__Ú__qualname__r2   r3   r8   rA   rK   rS   r4   Ú
contextlibÚcontextmanagerrU   r   r   r   r   r)   C   s   	!r)   )"Ú
__future__r   rY   rF   r9   Úloggingr   Úpip._vendorr   Úpip._internal.utils.temp_dirr   Úpip._internal.utils.typingr   Útypesr   Útypingr   r   r	   r
   r   r   Úpip._internal.models.linkr   Zpip._internal.req.req_installr   Ú	getLoggerrV   r'   rZ   r    r-   r   r)   r   r   r   r   Ú<module>   s&    


