
    siQ@                        S r SSKrSSKrSSKrSSKrSSKJrJrJ	r	  SSK
Jr  SSKJrJrJrJrJr  SSKJrJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJ r   SSK!J"r"J#r#J$r$J%r%  SSK&J'r'  SSK(J)r)  SSK*J+r+J,r,J-r-J.r.  SSK/J0r0  SSKJ1r1  SSK2J3r3  SSK4J5r5J6r6J4r4J7r7J8r8  SSK9J:r:  SSK;J<r<   " S S5      r=\" \>5      r?\" S5      r@\1r1\" S5      rA\" S5      rBS rCS rD\)" S S!5      S" 5       rE\)" S S!5       " S# S$5      5       rF\)" S!S%S&S'9 S6S( j5       rGS7S* jrHS+ rIS, rJS- rK\)" S S!5      S. 5       rLS/ rMS0 rN\0R                  S)4S1 jrPS2 rQS3 rRS4 rSS8S5 jrTg)9z=Disk utility functions for creating new files or directories.    N)EACCESEPERMEROFS)	getLogger)dirnameisdirisfilejoinsplitext)copyfileobjcopystat   )
CondaError)dals)PACKAGE_CACHE_MAGIC_FILE)context)on_win)TRACE)
ensure_padexpandwin_path_double_escapewin_path_ok)json)
deprecated)BasicClobberErrorCondaOSErrorNoWritableEnvsDirErrormaybe_raise)LinkType   )mkdir_prm_rf)islinklexistslinkreadlinksymlink)make_executable)touchc                   P    \ rS rSrSrSrSrSS jrS rS r	S\
4S jrS	 rS
 rSrg)TemporaryDirectory'   a  Create and return a temporary directory.  This has the same
behavior as mkdtemp but can be used as a context manager.  For
example:

    with TemporaryDirectory() as tmpdir:
        ...

Upon exiting the context, the directory and everything contained
in it are removed.
NFc                 <    [         R                  " XU5      U l        g N)tempfilemkdtempname)selfsuffixprefixdirs       :lib/python3.13/site-packages/conda/gateways/disk/create.py__init__TemporaryDirectory.__init__7   s    $$VS9	    c                 R    SU R                   R                   SU R                  < S3$ )N< >)	__class____name__r2   r3   s    r7   __repr__TemporaryDirectory.__repr__:   s&    4>>**+1TYYM;;r:   c                     U R                   $ r/   )r2   rA   s    r7   	__enter__TemporaryDirectory.__enter__=   s    yyr:   c                     SSK Jn  U R                  (       a-  U R                  (       d   U" U R                  5        SU l        g g g ! [        [
        4 a$  nSU ;  a  e U" U R                  5         S nAN9S nAff = f)Nr    r"   NoneT)deleter#   r2   _closed	TypeErrorAttributeError)r3   _warn	_warnings_rm_rfexs        r7   cleanupTemporaryDirectory.cleanup@   sf    +99T\\"tyy!
  DL *9 ~. "B4(tyy!!"s   A A:A55A:c                 $    U R                  5         g r/   rQ   )r3   excvaluetbs       r7   __exit__TemporaryDirectory.__exit__L   s    r:   c                 "    U R                  SS9  g )NT)rM   rT   rA   s    r7   __del__TemporaryDirectory.__del__O   s    4 r:   )rJ   r2   ) tmpN)r@   
__module____qualname____firstlineno____doc__r2   rJ   r8   rB   rE   rN   rQ   rX   r[   __static_attributes__ r:   r7   r,   r,   '   s8    	 DG:< "Y 
 !r:   r,   zconda.stdoutlogz
# -*- coding: utf-8 -*-
import re
import sys

from %(module)s import %(import_name)s

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(%(func)s())
z
# -*- coding: utf-8 -*-
if __name__ == '__main__':
    import os
    import sys
    args = ["%(source_full_path)s"]
    if len(sys.argv) > 1:
        args += sys.argv[1:]
    os.execv(args[0], args)
c                     [         R                  [        SU 5        [        U SSS9 n[        R                  " X5        S S S 5        g ! , (       d  f       g = f)Nzwriting json to file %swutf-8modeencoding)logr   openr   dump)	file_pathobjfos      r7   write_as_json_to_filerq   v   s9    GGE,i8	icG	4		# 
5	4	4s   A
Ac                 z   [        U 5      (       a  [        [        S U [        S9[        5        UR	                  S5      S   n[
        UUUS.-  nUb  SSKJn  U" U5      nOS n[        U SSS	9 nUb  UR                  U5        UR                  U5        S S S 5        Ub  [        U 5        U $ ! , (       d  f       N= f)
Nsource_pathtarget_pathr   .r   )modulefuncimport_namer   ) generate_shebang_for_entry_pointrf   rg   rh   )r%   r   r   r   splitpython_entry_point_templatecore.portabilityrz   rl   writer)   )	target_full_pathpython_full_pathrw   rx   ry   pyscriptrz   shebangrp   s	            r7   create_python_entry_pointr   |   s       ,
 	
 **S/!$K*". H
 #H23CD	S7	;rHHW
 
<
 () 
<	;s   .&B,,
B:z26.3z26.9c                    [        U5      (       a  [        [        S U[        S9[        5        [        S[        U 5      0-  n[        [        U5      5      (       d  [        [        U5      5        [        US5       nSU;   a  [        US5      nUR                  SU S35        UR                  U5        S S S 5        [        U5        g ! , (       d  f       N= f)Nrs   source_full_pathrf   r=   "z#!
)r%   r   r   r    application_entry_point_templater   r   r   r!   rl   r   r~   r)   )r   r   r   entry_pointrp   s        r7   create_application_entry_pointr      s        ,
 	
 323CD6 K )*++()*		$"")*:C@
2&'r*+
	 
%
 $% 
%	$s   ;9C
Cc                   D   ^  \ rS rSrS rS rU 4S jrSS jrS rSr	U =r
$ )	ProgressFileWrapper   c                     Xl         X l        [        S[        R                  " UR                  5       5      R                  5      U l        SU l        g )Nr    r   )	progress_fileprogress_update_callbackmaxosfstatfilenost_sizeprogress_file_sizeprogress_max_pos)r3   fileobjr   s      r7   r8   ProgressFileWrapper.__init__   s;    $(@%"%a'..2B)C)K)K"L !r:   c                 .    [        U R                  U5      $ r/   )getattrr   )r3   r2   s     r7   __getattr__ProgressFileWrapper.__getattr__   s    t))400r:   c                 ~   > UR                  S5      (       a  [        TU ]	  X5        g [        U R                  X5        g )N	progress_)
startswithsuper__setattr__setattrr   )r3   r2   rV   r?   s      r7   r   ProgressFileWrapper.__setattr__   s/    ??;''G,D&&4r:   c                 \    U R                   R                  U5      nU R                  5         U$ r/   )r   readprogress_update)r3   sizedatas      r7   r   ProgressFileWrapper.read   s)    !!&&t,r:   c                     [        U R                  U R                  R                  5       5      n[	        XR
                  5      nXl        XR
                  -  nU R                  U5        g r/   )r   r   r   tellminr   r   )r3   posrel_poss      r7   r   #ProgressFileWrapper.progress_update   sU    $''););)@)@)BC#../ #///%%g.r:   )r   r   r   r   ))r@   r_   r`   ra   r8   r   r   r   r   rc   __classcell__)r?   s   @r7   r   r      s!    "15
/ /r:   r   z27.3zHUse `conda.base.context.context.plugin_manager.extract_package` instead.)addendumc                     SSK Jn  U" X5      $ )Nr   )extract_conda_or_tarball) plugins.package_extractors.condar   )tarball_full_pathdestination_directoryr   r   s       r7   extract_tarballr      s     M#$5MMr:   Fc                      SSK nUR                  [        U [        U5      5      UU [        R
                  S9  g! [         a    [        R                  SSS9   gf = f)z
Create cross-platform menu items (e.g. Windows Start Menu)

Passes all menu config files %PREFIX%/Menu/*.json to ``menuinst.install``.
``remove=True`` will remove the menu items.
r   N)remover5   root_prefixzmenuinst ExceptionT)exc_info)	menuinstinstallr
   r   r   r   	Exception	stdoutlogerror)r5   rn   r   r   s       r7   	make_menur      s]    
=Y/0++	 	 	
  =,t<=s   7: AAc                    [        U 5      (       a  [        SU  SU S35      n[        U5      e [        R                  [        SX5        [        X5        g ! [         a$    [        R                  SX5        [        X5         g f = f)Nz8
        Cannot hard link a soft link
          source: z
          destination: z	
        zcreating hard link %s => %sz%hard link failed, so copying %s => %s)	r$   r   r   rk   r   r&   OSErrorinfo_do_copy)srcdstmessages      r7   create_hard_link_or_copyr      s    c{{% u 	
 7##4c?S 8#Cs   &A +BBc                     [         (       a  g[        U 5      =(       a<    [        U 5      (       + =(       a%    [        R                  " U [        R
                  5      $ )NF)r   r	   r$   r   accessX_OK)paths    r7    _is_unix_executable_using_ORIGINr     s4    vd|MF4L 0MRYYtRWW5MMr:   c                     [        U 5      (       a  [        X5        g [        R                  [        SX5        [	        X5        g )Nsoft linking %s => %s)r   copyrk   r   r(   )r   r   s     r7   _do_softlinkr     s/    ',,
 	S.9r:   c                     [         (       d  [        S5      e[        U 5      u  p#[        US5       nUR	                  SU S35        S S S 5        U$ ! , (       d  f       U$ = f)NzOnly runs on Windows.rf   z@echo off
call "z" %*
)r   RuntimeErrorr   rl   r~   )r   r   src_root_fs        r7   create_fake_executable_softlinkr   !  sV    62333-KH	c31	#H:V45 
J 
Js   A
Ac                     [         (       dX  [        U 5      (       aH  [        U 5      nUR                  S5      (       d'  [        R	                  [
        SX5        [        X!5        g [        X5        g )N/r   )r   r$   r'   r   rk   r   r(   r   )r   r   src_points_tos      r7   r   r   ,  sM    6fSkk '',,GGE2C=M'Sr:   c                 `   [         R                  [        SX5        Sn[        U S5       n[        US5       n[        X4U5        S S S 5        S S S 5         [	        X5        g ! , (       d  f       N#= f! , (       d  f       N,= f! [
         a   n[         R                  SU5         S nAg S nAff = f)Nzcopying %s => %si  @ rbwb%r)rk   r   rl   r   r   r   debug)r   r   buffer_sizefsrcfdstes         r7   r   r   8  s    GGE%s0 K	c4D#t_K0  
	 _ 
   			$s:   A2A!A2B !
A/	+A22
B 
B-B((B-c                    U[         R                  :X  au  [        U5      (       aY  [        U5      (       dI  U(       d  [	        [        X[        5      [        5        [        R                  SU< 35        [        U5        [        U5        g [        U 5      (       d  [        SU  S35      e[        U5      (       aI  U(       d  [	        [        X[        5      [        5        [        R                  SU< 35        [        U5        U[         R                  :X  aF  [        U 5      (       a  [        SU  35      e [        R                  [        SX5        [        X5        g U[         R$                  :X  a  ['        X5        g U[         R"                  :X  a  [#        X5        g [        S	U< 35      e! [         aC  n[        R!                  SU5        [        R!                  SUU U5        [#        X5         S nAg S nAff = f)
Nz+file exists, but clobbering for directory: z*Cannot link a source that does not exist. z;
Running `conda clean --packages` may resolve your problem.zfile exists, but clobbering: zCannot hard link a directory. zhard linking %s => %sr   zFhard-link failed. falling back to copy
  error: %r
  src: %s
  dst: %szDid not expect linktype=)r   	directoryr%   r   r   r   r   rk   r   r#   r!   r   hardlinkr   r&   r   r   r   softlinkr   )r   r   	link_typeforcer   s        r7   create_linkr   M  s   H&&& 3<<c

-c@'JHHB3'JK#J3<<8 >I I
 	

 s||)#G<gF089c
H%%%::=cUCDD	GGE2C=N 
h''	'S	hmm	#S3I=ABB%  	IIdAII  NN	s   5&F+ +
G859G33G8c           
         [        U5      n[        U5      n[        U5      S:X  a  / $ [        R                  " 5       u  pV U Ho  n[        R
                  R                  Xs5      n[        US5      (       a#  UR                  [        R                  " 5       SS9n[        R                  " XWS-   5        Mq     [        R                  " U5        SSSS	S
SU/n[        US   5      S:  a4  [        UR                  S5      S   5      S:  a  UR                  SS/5        U /USS& [         R!                  ["        U5        SSKJn	  U	" X5      u  pn[        R(                  " U5        / n[+        X5       HN  u  p[-        U5      (       d(  [/        S5      n[         R1                  UU UUUU
U5        M=  UR3                  U5        MP     U$ ! [        R(                  " U5        f = f)Nr   encodereplace)errors   
z-Wiz-m
compileallz-qz-lz-ir   rv   r       z-j0   )any_subprocessa  
            pyc file failed to compile successfully (run_command failed)
            python_exe_full_path: %s
            py_full_path: %s
            pyc_full_path: %s
            compile rc: %s
            compile stdout: %s
            compile stderr: %s
            )tuplelenr0   mkstempr   r   relpathhasattrr   sysgetfilesystemencodingr~   closeintr{   extendrk   r   
subprocessr   r   zipr	   r   r   append)python_exe_full_pathpy_full_pathspyc_full_pathsr5   py_verfdfilenamer   commandr   stdoutstderrrccreated_pyc_pathspy_full_pathpyc_full_pathr   s                    r7   compile_multiple_pycr    s    -(M>*N
=Q	##%LBA*Aq(##HHS668HKHHRU#	 
 	$dD$I vay>Q3v||C'8';#<q#@NND#;',-!w/ ,G<
		('*='I#m$$
G HH$ $$]3/ (J2 9 			(s    DG Gc                     [         R                  [        SU 5        [        U 5      R                  [        S5      5      n[	        [        U [        5      SUS9  [	        [        U S5      US9  g! [         aE  nUR                  [        [        [        4;   a   [         R                  [        SU 5         S nAge S nAff = f)	Nz%creating package cache directory '%s'~Tmkdir	sudo_safeurls)r  z*cannot create package cache directory '%s'F)rk   r   r   r   r*   r
   r   r   errnor   r   r   )pkgs_dirr  r   s      r7   create_package_cache_directoryr    s    
>I8$//s<	d856diXd8V$	:   77vue,,GGEGRs   A+A. .
B=8:B87B88B=c                 f   [        U S5      n [        R                  [        SU 5        [        U 5      R	                  [        S5      5      n[        [        X5      SUS9  g! [         aE  nUR                  [        [        [        4;   a   [        R                  [        SU 5         S nAge S nAff = f)N.conda_envs_dir_testzcreating envs directory '%s'r  Tr  z!cannot create envs directory '%s'F)r
   rk   r   r   r   r*   r   r  r   r   r   )envs_direnvs_dir_magic_filer  r   s       r7   create_envs_directoryr     s     x)?@	5x@8$//s<	d81S   77vue,,GGE>Is   AA! !
B0+:B+*B++B0c                    [         R                   Hs  nU[        R                  :X  a  M  [	        US5      n[        U5      (       a   [        US5      R                  5         Us  $ U (       d  M]  [        U5      nU(       d  Mq  Us  $    [        [         R                  5      e! [         a    [        R                  [        SU5         M  f = f)Nr  az#Tried envs_dir but not writable: %s)r   	envs_dirsr   devnullr
   r	   rl   r   r   rk   r   r   r   )creater  r  was_createds       r7   first_writable_envs_dirr'    s     %%rzz!
 #8-CD%&&P(#.446 V/9K{% &( !!2!2
33  PDhOPs   B!!%C
	C
)NN)F)T)Urb   r   r   r0   warningsrN   r  r   r   r   loggingr   os.pathr   r   r	   r
   r   shutilr   r   r]   r   
auxlib.ishr   base.constantsr   base.contextr   common.compatr   common.constantsr   common.pathr   r   r   r   common.serializer   deprecationsr   
exceptionsr   r   r   r   models.enumsr   r!   rI   r#   r&   r$   r%   r'   r(   permissionsr)   updater*   r,   r@   rk   r   r|   r   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r'  rd   r:   r7   <module>r8     s   D 	 
   & &  : : (   6 # # % R R $ &  %   : : ( 
*! *!Z '(	 "
  $(	$   F FF& &8 FF/ / /: 

W MQN
N=(&N	 FF 	* %-$5$5U 0Cf=@ (4r:   