o
    Ëý°j  ã                   @   sÀ   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mZm	Z	m
Z
mZmZ d dlmZ d dlmZ d dlmZ e e¡Ze jdeded fd	d
„ƒZe jded fdd„ƒZG dd„ dƒZdS )é    N)ÚTracebackType)ÚDictÚIteratorÚOptionalÚSetÚTypeÚUnion)ÚLink)ÚInstallRequirement)ÚTempDirectoryÚchangesÚreturnc               
   k   sØ   � t j}tƒ }i }|  ¡ D ]\}}z|| ||< W n ty&   |||< Y nw |||< qz"d V  W | ¡ D ]\}}||u rA||= q5t|tƒsHJ ‚|||< q5d S | ¡ D ]\}}||u r_||= qSt|tƒsfJ ‚|||< qSw ©N)ÚosÚenvironÚobjectÚitemsÚKeyErrorÚ
isinstanceÚstr)r   ÚtargetÚnon_existent_markerÚsaved_valuesÚnameÚ	new_valueÚoriginal_value© r   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pip/_internal/req/req_tracker.pyÚupdate_env_context_manager   s0   €ÿ

û
ûr   ÚRequirementTrackerc               	   c   s°   � t j d¡} t ¡ �C}| d u r'| tdd�¡j} | t| d�¡ t	 
d| ¡ t| ƒ�}|V  W d   ƒ n1 s9w   Y  W d   ƒ d S W d   ƒ d S 1 sQw   Y  d S )NÚPIP_REQ_TRACKERzreq-tracker)Úkind)r    z Initialized build tracking at %s)r   r   ÚgetÚ
contextlibÚ	ExitStackÚenter_contextr   Úpathr   ÚloggerÚdebugr   )ÚrootÚctxÚtrackerr   r   r   Úget_requirement_tracker)   s   €

ÿú"úr,   c                   @   s®   e Zd Zdeddfdd„Zddd„Zdeee  d	ee d
ee	 ddfdd„Z
dedefdd„Zdeddfdd„Zdeddfdd„Zddd„Zejdeded fdd„ƒZdS )r   r)   r   Nc                 C   s    || _ tƒ | _t d| j ¡ d S )NzCreated build tracker: %s)Ú_rootÚsetÚ_entriesr'   r(   )Úselfr)   r   r   r   Ú__init__7   s   zRequirementTracker.__init__c                 C   s   t  d| j¡ | S )NzEntered build tracker: %s)r'   r(   r-   )r0   r   r   r   Ú	__enter__<   s   zRequirementTracker.__enter__Úexc_typeÚexc_valÚexc_tbc                 C   s   |   ¡  d S r   )Úcleanup)r0   r3   r4   r5   r   r   r   Ú__exit__@   s   zRequirementTracker.__exit__Úlinkc                 C   s$   t  |j ¡ ¡ ¡ }tj | j|¡S r   )	ÚhashlibÚsha224Úurl_without_fragmentÚencodeÚ	hexdigestr   r&   Újoinr-   )r0   r8   Úhashedr   r   r   Ú_entry_pathH   s   zRequirementTracker._entry_pathÚreqc                 C   sÞ   |j sJ ‚|  |j ¡}zt|ƒ�}| ¡ }W d  ƒ n1 sw   Y  W n	 ty.   Y nw d |j |¡}t|ƒ‚|| jvsAJ ‚t|ddd��}| t	|ƒ¡ W d  ƒ n1 sZw   Y  | j 
|¡ t d|| j¡ dS )z,Add an InstallRequirement to build tracking.Nz{} is already being built: {}Úwzutf-8)ÚencodingzAdded %s to build tracker %r)r8   r@   ÚopenÚreadÚFileNotFoundErrorÚformatÚLookupErrorr/   Úwriter   Úaddr'   r(   r-   )r0   rA   Ú
entry_pathÚfpÚcontentsÚmessager   r   r   rJ   L   s$   


ÿ€ÿÿzRequirementTracker.addc                 C   s<   |j sJ ‚t |  |j ¡¡ | j |¡ t d|| j¡ dS )z1Remove an InstallRequirement from build tracking.z Removed %s from build tracker %rN)	r8   r   Úunlinkr@   r/   Úremover'   r(   r-   ©r0   rA   r   r   r   rP   h   s   
zRequirementTracker.removec                 C   s,   t | jƒD ]}|  |¡ qt d| j¡ d S )NzRemoved build tracker: %r)r.   r/   rP   r'   r(   r-   rQ   r   r   r   r6   r   s   zRequirementTracker.cleanupc                 c   s    � |   |¡ d V  |  |¡ d S r   )rJ   rP   rQ   r   r   r   Útrackx   s   €
zRequirementTracker.track)r   r   )r   N)Ú__name__Ú
__module__Ú__qualname__r   r1   r2   r   r   ÚBaseExceptionr   r7   r	   r@   r
   rJ   rP   r6   r#   Úcontextmanagerr   rR   r   r   r   r   r   6   s$    

þýü
û

)r#   r9   Úloggingr   Útypesr   Útypingr   r   r   r   r   r   Úpip._internal.models.linkr	   Úpip._internal.req.req_installr
   Úpip._internal.utils.temp_dirr   Ú	getLoggerrS   r'   rW   r   r   r,   r   r   r   r   r   Ú<module>   s     
