
    As<g                     &   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e      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          j/home/kevstigneev/proxy/myenv/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6-t	.  	5!4L	5 %1$6$6$8 	. D.!444L!.#6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Zy)	TrackerIdz:Uniquely identifying string provided to the build tracker.N)__name__
__module____qualname____doc__     r   r1   r1   6   s    Dr7   r1   c                       e Zd 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eddfdZdededdfdZddZej&                  dededed   fd       Zy)r!   a7  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                 `    || _         i | _        t        j                  d| j                          y )NzCreated build tracker: %s)_root_entriesr*   r+   )selfr,   s     r   __init__zBuildTracker.__init__C   s#    
=?0$**=r7   c                 F    t         j                  d| j                         | S )NzEntered build tracker: %s)r*   r+   r:   )r<   s    r   	__enter__zBuildTracker.__enter__H   s    0$**=r7   exc_typeexc_valexc_tbc                 $    | j                          y r   )cleanup)r<   r@   rA   rB   s       r   __exit__zBuildTracker.__exit__L   s     	r7   keyc                     t        j                  |j                               j                         }t        j
                  j                  | j                  |      S r   )hashlibsha224encode	hexdigestr   r)   joinr:   )r<   rF   hasheds      r   _entry_pathzBuildTracker._entry_pathT   s8    

-779ww||DJJ//r7   reqc                    | 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                  |<   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)rN   openreadformatlinkLookupErrorFileNotFoundErrorr;   writer   r*   r+   r:   )r<   rO   rF   
entry_pathfpcontentsmessages          r   addzBuildTracker.addX   s     %%c*
	'j! %R779%
 6<<SXXxPGg&&% %  		 $--''' *cG4 	HHSX	 	 	 c3S$**Es3   A* AA* A'#A* *	A65A6B;;Cc                     t        j                  | j                  |             | j                  |= t        j                  d|| j                         y)z1Remove an InstallRequirement from build tracking.z Removed %s from build tracker %rN)r   unlinkrN   r;   r*   r+   r:   )r<   rO   rF   s      r   removezBuildTracker.removes   s<     			$""3'(MM#7djjIr7   c                     t        | j                  j                               D ]  \  }}| j                  ||        t        j                  d| j                         y )NzRemoved build tracker: %r)listr;   r   ra   r*   r+   r:   )r<   rF   rO   s      r   rD   zBuildTracker.cleanup|   sJ    T]]0023 	"HCKKS!	" 	0$**=r7   r   c              #   r   K   t        |      }| j                  ||       d | j                  ||       yw)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)r1   r^   ra   )r<   rO   rF   
tracker_ids       r   trackzBuildTracker.track   s0      s^
j!C$s   57)r   r!   )r   N)r2   r3   r4   r5   r   r=   r?   r   r   BaseExceptionr   rE   r1   rN   r   r^   ra   rD   r&   contextmanagerr   rf   r6   r7   r   r!   r!   :   s    =>S >T >
4./ -( '	
 
0y 0S 0F) F	 Fd F6J, J9 J J> %+ %# %)DT:U % %r7   r!   )r&   rH   loggingr   typesr   typingr   r   r   r   r   r	   pip._internal.models.linkr
   pip._internal.req.req_installr   pip._internal.utils.temp_dirr   	getLoggerr2   r*   rh   r   r    r/   r1   r!   r6   r7   r   <module>rp      s       	  > > * < 6			8	$ .# .)<L2M . .2 	9%?@ 	 	E EQ% Q%r7   