
    q"h                        S SK r S SKrS SKrS SKrS SKJr  S SKJrJrJ	r	J
r
Jr  S SKJr  S SKJr  \R                   " \5      r\ R&                  S\S\S   4S	 j5       r\ R&                  S\S
   4S j5       r " S S\5      r " S S5      rg)    N)TracebackType)Dict	GeneratorOptionalTypeUnion)InstallRequirement)TempDirectorychangesreturnNNNc               +     #    [         R                  n[        5       n0 nU R                  5        H  u  pE X   X4'   XQU'   M      S v   UR                  5        H(  u  pFXbL a  X	 M  [        U[        5      (       d   eXaU'   M*     g ! [         a    X#U'    NZf = f! UR                  5        H(  u  pFXbL a  X	 M  [        U[        5      (       d   eXaU'   M*     f = f7fN)osenvironobjectitemsKeyError
isinstancestr)r   targetnon_existent_markersaved_valuesname	new_valueoriginal_values          ^/var/www/html/env/lib/python3.13/site-packages/pip/_internal/operations/build/build_tracker.pyupdate_env_context_managerr      s     ZZF !(24L"==?	5!'L !t +	. %1$6$6$8 D4L!.#6666-t %9  	5!4	5 %1$6$6$8 D4L!.#6666-t %9s?   2CBCB =CBCBC>CC)BuildTrackerNNc               #     #    [         R                  R                  S5      n [        R                  " 5        nU cP  UR                  [        SS95      R                  n UR                  [        U S95        [        R                  SU 5        [        U 5       nUv   S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f7f)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   5CAB=B,B=#	C,
B:	6B==
CCc                       \ rS rSrSrSrg)	TrackerId5   z:Uniquely identifying string provided to the build tracker. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r1       r   r/   r/   5   s    Dr8   r/   c                       \ rS rSrSrS\SS4S jrSS jrS\\	\
      S	\\
   S
\\   SS4S jrS\S\4S jrS\S\SS4S jrS\S\SS4S jrSS jr\R(                  S\S\S\S   4S j5       rSrg)r   9   a'  Ensure that an sdist cannot request itself as a setup requirement.

When an sdist is prepared, it identifies its setup requirements in the
context of ``BuildTracker.track()``. If a requirement shows up recursively, this
raises an exception.

This stops fork bombs embedded in malicious packages.r*   r   Nc                 ^    Xl         0 U l        [        R                  SU R                   5        g )NzCreated build tracker: %s)_root_entriesr(   r)   )selfr*   s     r   __init__BuildTracker.__init__B   s!    
=?0$**=r8   c                 F    [         R                  SU R                  5        U $ )NzEntered build tracker: %s)r(   r)   r<   )r>   s    r   	__enter__BuildTracker.__enter__G   s    0$**=r8   exc_typeexc_valexc_tbc                 $    U R                  5         g r   )cleanup)r>   rD   rE   rF   s       r   __exit__BuildTracker.__exit__K   s     	r8   keyc                     [         R                  " UR                  5       5      R                  5       n[        R
                  R                  U R                  U5      $ r   )hashlibsha224encode	hexdigestr   r'   joinr<   )r>   rK   hasheds      r   _entry_pathBuildTracker._entry_pathS   s8    

-779ww||DJJ//r8   reqc                    U R                  U5      n [        U5       nUR                  5       nSSS5        UR                   SW 3n[	        U5      e! , (       d  f       N*= f! [
         a     Of = fX R                  ;  d   e[        USSS9 nUR                  [        U5      5        SSS5        O! , (       d  f       O= fXR                  U'   [        R                  SXR                  5        g)z,Add an InstallRequirement to build tracking.Nz is already being built: wzutf-8)encodingzAdded %s to build tracker %r)rS   openreadlinkLookupErrorFileNotFoundErrorr=   writer   r(   r)   r<   )r>   rU   rK   
entry_pathfpcontentsmessages          r   addBuildTracker.addW   s     %%c*
	'j!R779 "
 
";H:FGg&& "!  		 --''' *cG4HHSX 544 c3S**Es3   A$ AA$ 
A!A$ $
A10A1B44
Cc                     [         R                  " U R                  U5      5        U R                  U	 [        R                  SXR                  5        g)z1Remove an InstallRequirement from build tracking.z Removed %s from build tracker %rN)r   unlinkrS   r=   r(   r)   r<   )r>   rU   rK   s      r   removeBuildTracker.remover   s:     			$""3'(MM#7jjIr8   c                     [        U R                  R                  5       5       H  u  pU R                  X!5        M     [        R                  SU R                  5        g )NzRemoved build tracker: %r)listr=   r   rg   r(   r)   r<   )r>   rK   rU   s      r   rH   BuildTracker.cleanup{   sA    T]]0023HCKK! 4 	0$**=r8   r   c              #   n   #    [        U5      nU R                  X5        Sv   U R                  X5        g7f)zEnsure that `key` cannot install itself as a setup requirement.

:raises LookupError: If `key` was already provided in a parent invocation of
                     the context introduced by this method.N)r/   rc   rg   )r>   rU   rK   
tracker_ids       r   trackBuildTracker.track   s+      s^
!C$s   35)r=   r<   )r   r   )r   N)r2   r3   r4   r5   r6   r   r?   rB   r   r   BaseExceptionr   rI   r/   rS   r	   rc   rg   rH   r$   contextmanagerr   rn   r7   r1   r8   r   r   r   9   s    =>S >T >
4./ -( '	
 
0y 0S 0F) F	 Fd F6J, J9 J J> %+ %# %)DT:U % %r8   r   )r$   rM   loggingr   typesr   typingr   r   r   r   r   pip._internal.req.req_installr	   pip._internal.utils.temp_dirr
   	getLoggerr2   r(   rq   r   r   r-   r/   r   r1   r8   r   <module>rx      s       	  9 9 < 6			8	$ .# .)<L2M . .2 	9%?@ 	 	E EQ% Q%r8   