
    ]h                        S SK Jr  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	  S SK
Jr  S SKJr  \R                  " \5      r\R"                  SS j5       r\R"                  SS j5       r " S	 S
\5      r " S S5      rg)    )annotationsN)	Generator)TracebackType)InstallRequirement)TempDirectoryc               +    #    [         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)changes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 !(,.L"==?	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c               #    #    [         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debugBuildTracker)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)	TrackerId7   z:Uniquely identifying string provided to the build tracker. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r,       r   r*   r*   7   s    Dr3   r*   c                      \ rS rSrSrSS jrSS jr        SS jrSS jrSS jr	SS jr
SS	 jr\R                  SS
 j5       rSrg)r$   ;   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.c                ^    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__D   s!    
=?0$**=r3   c                F    [         R                  SU R                  5        U $ )NzEntered build tracker: %s)r"   r#   r7   )r9   s    r   	__enter__BuildTracker.__enter__I   s    0$**=r3   c                $    U R                  5         g r	   )cleanup)r9   exc_typeexc_valexc_tbs       r   __exit__BuildTracker.__exit__M   s     	r3   c                    [         R                  " UR                  5       5      R                  5       n[        R
                  R                  U R                  U5      $ r	   )hashlibsha224encode	hexdigestr
   r!   joinr7   )r9   keyhasheds      r   _entry_pathBuildTracker._entry_pathU   s8    

-779ww||DJJ//r3   c                   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)rN   openreadlinkLookupErrorFileNotFoundErrorr8   writer   r"   r#   r7   )r9   reqrL   
entry_pathfpcontentsmessages          r   addBuildTracker.addY   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
   unlinkrN   r8   r"   r#   r7   )r9   rY   rL   s      r   removeBuildTracker.removet   s:     			$""3'(MM#7jjIr3   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)listr8   r   rb   r"   r#   r7   )r9   rL   rY   s      r   r@   BuildTracker.cleanup}   sA    T]]0023HCKK! 4 	0$**=r3   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*   r^   rb   )r9   rY   rL   
tracker_ids       r   trackBuildTracker.track   s+      s^
!C$s   35)r8   r7   N)r%   r   returnNone)rk   r$   )rA   ztype[BaseException] | NonerB   zBaseException | NonerC   zTracebackType | Nonerk   rl   )rL   r*   rk   r   )rY   r   rL   r*   rk   rl   )rk   rl   )rY   r   rL   r   rk   Generator[None, None, None])r-   r.   r/   r0   r1   r:   r=   rD   rN   r^   rb   r@   r   contextmanagerri   r2   r,   r3   r   r$   r$   ;   sl    =>
, & %	
 
0F6J> % %r3   r$   )r   r   rk   rm   )rk   z#Generator[BuildTracker, None, None])
__future__r   r   rG   loggingr
   collections.abcr   typesr   pip._internal.req.req_installr   pip._internal.utils.temp_dirr   	getLoggerr-   r"   rn   r   r(   r   r*   r$   r,   r3   r   <module>rv      s~    "    	 %  < 6			8	$ . .2 	 	E EQ% Q%r3   