
    ,i                        d dl mZ 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	 d dl
mZ d dlmZ  ej                  e      Zej"                  dd       Zej"                  dd       Z G d	 d
e      Z G d d      Zy)    )annotationsN)	Generator)TracebackType)InstallRequirement)TempDirectoryc               +    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)changestargetnon_existent_markersaved_valuesname	new_valueoriginal_values          `/var/www/mymood/env/lib/python3.12/site-packages/pip/_internal/operations/build/build_tracker.pyupdate_env_context_managerr      s     ZZF !(,.L"==?i	5!'L !t +	. %1$6$6$8 D.!444L!.#666-t %9  	5!4L	5 %1$6$6$8 D.!444L!.#666-t %9s?   3CBCB 
8CBCBC9CCc               #    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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   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   r*   r*   7   s    Dr0   r*   c                  ~    e Zd ZdZddZddZ	 	 	 	 	 	 	 	 ddZddZddZddZ	ddZ
ej                  d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.c                `    || _         i | _        t        j                  d| j                          y )NzCreated build tracker: %s)_root_entriesr"   r#   )selfr%   s     r   __init__zBuildTracker.__init__D   s#    
=?0$**=r0   c                F    t         j                  d| j                         | S )NzEntered build tracker: %s)r"   r#   r3   )r5   s    r   	__enter__zBuildTracker.__enter__I   s    0$**=r0   c                $    | j                          y r	   )cleanup)r5   exc_typeexc_valexc_tbs       r   __exit__zBuildTracker.__exit__M   s     	r0   c                    t        j                  |j                               j                         }t        j
                  j                  | j                  |      S r	   )hashlibsha224encode	hexdigestr
   r!   joinr3   )r5   keyhasheds      r   _entry_pathzBuildTracker._entry_pathU   s8    

-779ww||DJJ//r0   c                   | j                  |      }	 t        |      5 }|j                         }ddd       |j                   d }t	        |      # 1 sw Y   %x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)rG   openreadlinkLookupErrorFileNotFoundErrorr4   writer   r"   r#   r3   )r5   reqrE   
entry_pathfpcontentsmessages          r   addz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 	A+*A+B00B9c                    t        j                  | j                  |             | j                  |= t        j                  d|| j                         y)z1Remove an InstallRequirement from build tracking.z Removed %s from build tracker %rN)r
   unlinkrG   r4   r"   r#   r3   )r5   rQ   rE   s      r   removezBuildTracker.removet   s<     			$""3'(MM#7djjIr0   c                    t        | j                  j                               D ]  \  }}| j                  ||        t        j                  d| j                         y )NzRemoved build tracker: %r)listr4   r   rY   r"   r#   r3   )r5   rE   rQ   s      r   r:   zBuildTracker.cleanup}   sE    T]]0023HCKKS! 4 	0$**=r0   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)r*   rV   rY   )r5   rQ   rE   
tracker_ids       r   trackzBuildTracker.track   s0      s^
j!C$s   57N)r%   r   returnNone)r_   r$   )r;   ztype[BaseException] | Noner<   zBaseException | Noner=   zTracebackType | Noner_   r`   )rE   r*   r_   r   )rQ   r   rE   r*   r_   r`   )r_   r`   )rQ   r   rE   r   r_   Generator[None, None, None])r+   r,   r-   r.   r6   r8   r>   rG   rV   rY   r:   r   contextmanagerr^   r/   r0   r   r$   r$   ;   sl    =>
, & %	
 
0F6J> % %r0   r$   )r   r   r_   ra   )r_   z#Generator[BuildTracker, None, None])
__future__r   r   r@   loggingr
   collections.abcr   typesr   pip._internal.req.req_installr   pip._internal.utils.temp_dirr   	getLoggerr+   r"   rb   r   r(   r   r*   r$   r/   r0   r   <module>rj      s    "    	 %  < 6			8	$ . .2 	 	E EQ% Q%r0   