
    df%                        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j&                  e      Ze j,                  deded	   fd
       Ze j,                  ded   fd       Z G d d      Zy)    N)TracebackType)Dict	GeneratorOptionalSetTypeUnion)Link)InstallRequirement)TempDirectorychangesreturnNNNc               +     K   t         j                  }t               }i }| j                         D ]  \  }}	 ||   ||<   |||<    	 d  |j                         D ]$  \  }}||u r||= t        |t              sJ |||<   & y # t        $ r |||<   Y Tw xY w# |j                         D ]$  \  }}||u r||= t        |t              sJ |||<   & w xY wwN)osenvironobjectitemsKeyError
isinstancestr)r   targetnon_existent_markersaved_valuesname	new_valueoriginal_values          e/home/api-vastappli/venv/lib/python3.12/site-packages/pip/_internal/operations/build/build_tracker.pyupdate_env_context_managerr       s    ZZF !(24L"==? !i	5!'L !t!	. %1$6$6$8 	. D.!444L!.#66-t	.  	5!4L	5 %1$6$6$8 	. D.!444L!.#66-t	.s?   3CBCB 
8CBCBC9CC)BuildTrackerNNc               #     K   t         j                  j                  d      } t        j                         5 }| V|j                  t        d            j                  } |j                  t        |              t        j                  d|        t        |       5 }| d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY ww)NPIP_BUILD_TRACKERzbuild-tracker)kind)r#   z Initialized build tracking at %s)r   r   get
contextlib	ExitStackenter_contextr   pathr    loggerdebugr!   )rootctxtrackers      r   get_build_trackerr/   )   s     ::>>-.D				 3<$$]%HINND84PQLL;TB$ 	7M	 	 	 s5   4CA$B<B0B<'	C0B9	5B<<CCc                       e Zd ZdeddfdZddZdeee      dee   dee	   ddfd	Z
d
edefdZdeddfdZdeddfdZddZej$                  deded   fd       Zy)r!   r,   r   Nc                 p    || _         t               | _        t        j	                  d| j                          y )NzCreated build tracker: %s)_rootset_entriesr*   r+   )selfr,   s     r   __init__zBuildTracker.__init__7   s%    
140$**=    c                 F    t         j                  d| j                         | S )NzEntered build tracker: %s)r*   r+   r2   )r5   s    r   	__enter__zBuildTracker.__enter__<   s    0$**=r7   exc_typeexc_valexc_tbc                 $    | j                          y r   )cleanup)r5   r:   r;   r<   s       r   __exit__zBuildTracker.__exit__@   s     	r7   linkc                     t        j                  |j                  j                               j	                         }t
        j                  j                  | j                  |      S r   )	hashlibsha224url_without_fragmentencode	hexdigestr   r)   joinr2   )r5   r@   hasheds      r   _entry_pathzBuildTracker._entry_pathH   sA     9 9 @ @ BCMMOww||DJJ//r7   reqc                 8   |j                   sJ | j                  |j                         }	 t        |      5 }|j                         }ddd       dj	                  |j                         }t        |      # 1 sw Y   0xY w# t        $ r Y nw xY w|| j                  vsJ t        |dd      5 }|j                  t        |             ddd       n# 1 sw Y   nxY w| j                  j                  |       t        j                  d|| j                         y)z,Add an InstallRequirement to build tracking.Nz{} is already being built: {}wzutf-8)encodingzAdded %s to build tracker %r)r@   rI   openreadformatLookupErrorFileNotFoundErrorr4   writer   addr*   r+   r2   )r5   rJ   
entry_pathfpcontentsmessages         r   rT   zBuildTracker.addL   s     xx%%chh/
	'j! %R779%
 6<<SXXxPGg&&% %  		 $--'' *cG4 	HHSX	 	 	#3S$**Es4   B A6B 6A?;B 	BB/CCc                     |j                   sJ t        j                  | j                  |j                                | j                  j                  |       t        j                  d|| j                         y)z1Remove an InstallRequirement from build tracking.z Removed %s from build tracker %rN)	r@   r   unlinkrI   r4   remover*   r+   r2   r5   rJ   s     r   r[   zBuildTracker.removeh   sO     xx
		$""388,-S!7djjIr7   c                     t        | j                        D ]  }| j                  |        t        j	                  d| j
                         y )NzRemoved build tracker: %r)r3   r4   r[   r*   r+   r2   r\   s     r   r>   zBuildTracker.cleanupr   s;    t}}% 	CKK	 	0$**=r7   r   c              #   X   K   | j                  |       d  | j                  |       y wr   )rT   r[   r\   s     r   trackzBuildTracker.trackx   s      Cs   (*)r   r!   )r   N)__name__
__module____qualname__r   r6   r9   r   r   BaseExceptionr   r?   r
   rI   r   rT   r[   r>   r&   contextmanagerr   r_    r7   r   r!   r!   6   s    >S >T >
4./ -( '	
 
0 0 0F) Fd F8J, J J> + 	:J0K  r7   r!   )r&   rB   loggingr   typesr   typingr   r   r   r   r   r	   pip._internal.models.linkr
   pip._internal.req.req_installr   pip._internal.utils.temp_dirr   	getLoggerr`   r*   rd   r   r    r/   r!   re   r7   r   <module>rm      s       	  > > * < 6			8	$ .# .)<L2M . .2 	9%?@ 	 	F Fr7   