
    DIeA                     Z   d Z ddlZddlZddlZddlZddlZddlmZm	Z	m
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mZ ddlmZ dd	lmZ dd
lmZmZ ddlmZ ddl m!Z!m"Z" ddl#m$Z$m%Z%m&Z&m'Z' ddl(m)Z) ddl*m+Z+m,Z,m-Z- ddl.m/Z/ ddlm0Z0 ddl1m2Z2m3Z3 ddl4m5Z5m6Z6m4Z4m7Z7m8Z8 ddl9m:Z: ddl;m<Z<  G d d          Z= ee>          Z? ed          Z@e0Z0 ed          ZA ed          ZBd ZCd ZDd ZE G d d           ZF	 d.d!ZGd/d#ZHd$ ZId% ZJd& ZKd' ZLd( ZMd) ZNe/jO        d"fd*ZPd+ ZQd, ZRd- ZSdS )0z=Disk utility functions for creating new files or directories.    N)EACCESEPERMEROFS)	getLogger)basenamedirnameisdirisfilejoinsplitext)copyfileobjcopystat   )
CondaError)dals)CONDA_PACKAGE_EXTENSION_V1PACKAGE_CACHE_MAGIC_FILE)context)on_linuxon_win)
ensure_padexpandwin_path_double_escapewin_path_ok)	json_dump)BasicClobberErrorCondaOSErrormaybe_raise)LinkType   )mkdir_p)path_is_cleanrm_rf)islinklexistslinkreadlinksymlink)make_executable)touchc                   F    e Zd ZdZdZdZddZd Zd Zde	fd	Z
d
 Zd ZdS )TemporaryDirectorya+  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.
    NF tmpc                 <    t          j        |||          | _        d S N)tempfilemkdtempname)selfsuffixprefixdirs       :lib/python3.11/site-packages/conda/gateways/disk/create.py__init__zTemporaryDirectory.__init__0   s    $VVS99			    c                 2    d| j         j         d| j        dS )N< >)	__class____name__r3   r4   s    r8   __repr__zTemporaryDirectory.__repr__3   s"    ;4>*;;TY;;;;r:   c                     | j         S r0   )r3   rA   s    r8   	__enter__zTemporaryDirectory.__enter__6   s
    yr:   c                     ddl m} | j        rV| j        sQ	  || j                   n4# t          t
          f$ r }d| vr  || j                   Y d }~nd }~ww xY wd| _        d S d S d S )Nr    )r#   NoneT)deleter#   r3   _closed	TypeErrorAttributeError)r4   _warn	_warnings_rm_rfexs        r8   cleanupzTemporaryDirectory.cleanup9   s    ++++++9 	 T\ 	 "ty!!!!~. " " "B((ty!!!!!!!!"  DLLL	  	  	  	 s   ' AAAc                 .    |                                   d S r0   rO   )r4   excvaluetbs       r8   __exit__zTemporaryDirectory.__exit__E   s    r:   c                 2    |                      d           d S )NT)rK   rQ   rA   s    r8   __del__zTemporaryDirectory.__del__H   s    4     r:   )r-   r.   N)r@   
__module____qualname____doc__r3   rH   r9   rB   rD   rL   rO   rU   rW    r:   r8   r,   r,       s        	 	 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                     t                               d|            t          j        | dd          5 }t	          |          }|                    |           d d d            d S # 1 swxY w Y   d S )Nzwriting json to file %swbutf-8modeencoding)logtracecodecsopenr   write)	file_pathobjfojson_strs       r8   write_as_json_to_filerk   o   s    II'333	YTG	<	<	< S>>
                 s   %A%%A),A)c                    t          |           r*t          t          d | t                    t                     |                    d          d         }t
          |||dz  }|ddlm}  ||          }nd }t          j	        | dd	          5 }||
                    |           |
                    |           d d d            n# 1 swxY w Y   |t          |            | S )
Nsource_pathtarget_pathr   .r   )modulefuncimport_namer   ) generate_shebang_for_entry_pointr]   r^   r_   )r%   r   r   r   splitpython_entry_point_templatecore.portabilityrt   rd   re   rf   r)   )	target_full_pathpython_full_pathrq   rr   rs   pyscriptrt   shebangri   s	            r8   create_python_entry_pointr|   v   s[      
 ,  
 	
 	
 	
 **S//!$K*". . H
 #HHHHHH223CDD	%D7	C	C	C rHHW
              
 ()))s   -C		CCc                 
   t          |          r*t          t          d |t                    t                     t          dt          |           iz  }t          t          |                    st          t          |                     t          |d          5 }d|v rt          |d          }|                    d|z             |                    |           d d d            n# 1 swxY w Y   t          |           d S )Nrm   source_full_pathwr=   "z#!%s
)r%   r   r   r    application_entry_point_templater   r	   r   r!   re   r   rf   r)   )r~   rx   ry   entry_pointri   s        r8   create_application_entry_pointr      sZ   
    
 ,  
 	
 	
 	
 323CDD6 K )**++ +())***		$	$ """)*:C@@
,,---
	              
 $%%%%%s   AC))C-0C-c                   8     e Zd Zd Zd Z fdZddZd Z xZS )ProgressFileWrapperc                     || _         || _        t          dt          j        |                                          j                  | _        d| _        d S )Nr    r   )	progress_fileprogress_update_callbackmaxosfstatfilenost_sizeprogress_file_sizeprogress_max_pos)r4   fileobjr   s      r8   r9   zProgressFileWrapper.__init__   sI    $(@%"%a'..2B2B)C)C)K"L"L !r:   c                 ,    t          | j        |          S r0   )getattrr   )r4   r3   s     r8   __getattr__zProgressFileWrapper.__getattr__   s    t)4000r:   c                     |                     d          r$t                                          ||           d S t          | j        ||           d S )N	progress_)
startswithsuper__setattr__setattrr   )r4   r3   rS   r?   s      r8   r   zProgressFileWrapper.__setattr__   sR    ??;'' 	5GGe,,,,,D&e44444r:   c                 b    | j                             |          }|                                  |S r0   )r   readprogress_update)r4   sizedatas      r8   r   zProgressFileWrapper.read   s/    !&&t,,r:   c                     t          | j        | j                                                  }t	          || j                  }|| _        || j        z  }|                     |           d S r0   )r   r   r   tellminr   r   )r4   posrel_poss      r8   r   z#ProgressFileWrapper.progress_update   sd    $');)@)@)B)BCC#t.// #//%%g.....r:   )r   )	r@   rX   rY   r9   r   r   r   r   __classcell__)r?   s   @r8   r   r      sy        " " "1 1 15 5 5 5 5   
/ / / / / / /r:   r   c                 D   dd l }|8| dd          t          k    r| d d         }n|                                 d         }t                              d| |           t          |          st                              d|           |j                            | |           t          |j        d          rd S t          r]t          j                    dk    rHt          j        |          D ]5\  }}}|D ](}t          ||          }t          j        |dd           )2d S d S d S )Nr   izextracting %s
  to %sz9package folder %s was not empty, but we're writing there.)dest_dirTHREADSAFE_EXTRACT)conda_package_handling.apir   r   rb   debugr"   apiextracthasattrr   r   getuidwalkr   lchown)	tarball_full_pathdestination_directoryr   conda_package_handlingrootdirsfilesfnps	            r8   extract_tarballr      so    &%%%$RSS!%???$5crc$:!!$5$>$>$@$@$C!II&(9;PQQQ .// 
		G!	
 	
 	

 &&$9 '    %)+?@@  #BIKK1$$ "$)>!?!? 	# 	#D$ # #rNN	!Q""""## #$$	# 	#r:   Fc                 \   t           sdS t          |                               d          rt                              d           dS 	 ddl}|                    t          | t          |                    ||            dS # t          $ r  t                              dd           Y dS w xY w)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.
    N_zHEnvironment name starts with underscore '_'. Skipping menu installation.r   zmenuinst ExceptionT)exc_info)r   r   r   rb   warnmenuinstinstallr   r   	Exception	stdoutlogerror)r6   rg   remover   s       r8   	make_menur      s      	&			$	$S	)	) V	
 	
 	
 	=fk)&<&<==vvNNNNN = = =,t<<<<<<=s   	6B &B+*B+c                 ^   t          |           r3t          d                    | |                    }t          |          	 t                              d| |           t          | |           d S # t          $ r0 t                              d| |           t          | |           Y d S w xY w)Nzx
        Cannot hard link a soft link
          source: {source_path}
          destination: {destination_path}
        )rn   destination_pathzcreating hard link %s => %sz%hard link failed, so copying %s => %s)
r$   r   formatr   rb   rc   r&   OSErrorinfo_do_copy)srcdstmessages      r8   create_hard_link_or_copyr     s    c{{ $ F!$   	
 	
 7###		/c:::S#   8#sCCCcs   ,A2 26B,+B,c                     t           rdS t          |           o.t          |            ot          j        | t          j                  S )NF)r   r
   r$   r   accessX_OK)paths    r8    _is_unix_executable_using_ORIGINr   &  s=     Nud||MF4LL 0MRYtRW5M5MMr:   c                     t          |           rt          | |           d S t                              d| |           t	          | |           d S )Nsoft linking %s => %s)r   copyrb   rc   r(   )r   r   s     r8   _do_softlinkr   -  sR    ',, 
 	S#		)3444Sr:   c                     t           sJ t          |           \  }}t          |d          5 }|                    d|z             d d d            n# 1 swxY w Y   |S )Nr   z@echo off
call "%s" %%*
)r   r   re   rf   )r   r   src_rootr   fs        r8   create_fake_executable_softlinkr   9  s    MMM3--KHa	c3 ?1	2X=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Js   AAAc                     t           sat          |           rRt          |           }|                    d          s.t                              d| |           t          ||           d S t          | |           d S )N/r   )r   r$   r'   r   rb   rc   r(   r   )r   r   src_points_tos      r8   r   r   B  sz     fSkk  '',, 	II-sC888M3'''FS#r:   c                    t                               d| |           d}t          | d          5 }t          |d          5 }t          |||           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   	 t	          | |           d S # t
          $ r&}t                               d|           Y d }~d S d }~ww xY w)Nzcopying %s => %si  @ rbr]   %r)rb   rc   re   r   r   r   r   )r   r   buffer_sizefsrcfdstes         r8   r   r   N  sT   II #s+++ K	c4 1D#t__ 	1dK000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	11 1 1 1 1 1 1 1 1 1 1 1 1 1 1c    			$sM   A5 AA5A"	"A5%A"	&A55A9<A9B 
CB>>Cc                 h   |t           j        k    rt          |          rft          |          sW|s)t	          t          | |t                    t                     t                              d|z             t          |           t          |           d S t          |           st          d| z            t          |          rW|s)t	          t          | |t                    t                     t                              d|z             t          |           |t           j        k    rt          |           rt          d| z            	 t                              d| |           t          | |           d S # t          $ rS}t                              d|           t                              d|| |           t#          | |           Y d }~d S d }~ww xY w|t           j        k    rt'          | |           d S |t           j        k    rt#          | |           d S t          d|z            )	Nz-file exists, but clobbering for directory: %rzgCannot link a source that does not exist. %s
Running `conda clean --packages` may resolve your problem.zfile exists, but clobbering: %rz Cannot hard link a directory. %szhard linking %s => %sr   zFhard-link failed. falling back to copy
  error: %r
  src: %s
  dst: %szDid not expect linktype=%r)r   	directoryr%   r	   r   r   r   rb   r   r#   r!   r   hardlinkrc   r&   r   r   r   softlinkr   )r   r   	link_typeforcer   s        r8   create_linkr   c  s8   H&&& 3<< 	c

 	 K-c3@@'JJJHHDsJKKK#JJJ3<< 
IKNO
 
 	

 s||  	G)#sG<<gFFF2S8999c


H%%%:: 	G?#EFFF	II-sC888cNNNNN 	 	 	IIdAII    cNNNNNNNNN	 
h'	'	'S#	hm	#	#S#5	ABBBs   ,E> >
GAGGc           
         t          |          }t          |          }t          |          dk    rg S t          j                    \  }}	 |D ]r}t          j                            ||          }t          |d          r(|                    t          j
                    d          }t	          j        ||dz              st	          j        |           dddd	d
d|g}t          |d                   dk    rCt          |                    d          d                   dk    r|                    ddg           | g|dd<   t                               |           ddlm}	  |	||          \  }
}}t	          j        |           n# t	          j        |           w xY wg }t+          ||          D ]Y\  }}t-          |          s0t/          d          }t                               || ||||
|           D|                    |           Z|S )Nr   encodereplace)errors   
z-Wiz-m
compileallz-qz-lz-ir   rp   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lenr1   mkstempr   r   relpathr   r   sysgetfilesystemencodingrf   closeintru   extendrb   rc   conda.gateways.subprocessr   r   zipr
   r   r   append)python_exe_full_pathpy_full_pathspyc_full_pathsr6   py_verfdfilenamer   commandr   stdoutstderrrccreated_pyc_pathspy_full_pathpyc_full_pathr   s                    r8   compile_multiple_pycr    s<    -((M>**N
=Q	#%%LB 	$ 	$A6**Aq(## LHHS688HKKHRU####
$dD$I vay>>Q3v||C'8'8';#<#<q#@#@NND#;''',-!		'<<<<<< ,^GV<<
	(	('*=.'I'I 4 4#mm$$ 	4
 
G HH$    $$]3333s   D&F Fc                    	 t                               d|            t          |                               t          d                    }t	          t          | t                    d|           t	          t          | d          |           nO# t          $ rB}|j        t          t          t          fv r!t                               d|            Y d }~dS  d }~ww xY wdS )	Nz%creating package cache directory '%s'~Tmkdir	sudo_safeurls)r  z*cannot create package cache directory '%s'F)rb   rc   r   r   r*   r   r   r   errnor   r   r   )pkgs_dirr  r   s      r8   create_package_cache_directoryr    s    
		98DDD8$$//s<<	d8566diXXXXd8V$$	:::::   7vue,,,IIBHMMM55555 4s   BB 
C6CCCc                    t          | d          }	 t                              d|            t          |                               t          d                    }t          t          | |          d|           nO# t          $ rB}|j        t          t          t          fv r!t                              d|            Y d }~dS  d }~ww xY wdS )Nz.conda_envs_dir_testzcreating envs directory '%s'r  Tr  z!cannot create envs directory '%s'F)r   rb   rc   r   r   r*   r   r  r   r   r   )envs_direnvs_dir_magic_filer  r   s       r8   create_envs_directoryr    s     x)?@@			0(;;;8$$//s<<	d8011SSSSS   7vue,,,II98DDD55555 4s   A*A= =
C	6CCC	)NN)F)TrZ   rd   r   r   r1   warningsrL   r  r   r   r   loggingr   os.pathr   r   r	   r
   r   r   shutilr   r   r-   r   
auxlib.ishr   base.constantsr   r   base.contextr   common.compatr   r   common.pathr   r   r   r   common.serializer   
exceptionsr   r   r   models.enumsr   r!   rG   r"   r#   r&   r$   r%   r'   r(   permissionsr)   updater*   r,   r@   rb   r   rv   r   rk   r|   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r[   r:   r8   <module>r+     s   D C  				 



      & & & & & & & & & &       D D D D D D D D D D D D D D D D ( ( ( ( ( ( ( (             R R R R R R R R # # # # # # - - - - - - - - R R R R R R R R R R R R ) ) ) ) ) ) F F F F F F F F F F $ $ $ $ $ $       ( ( ( ( ( ( ( ( : : : : : : : : : : : : : : ( ( ( ( ( (      
*! *! *! *! *! *! *! *!Z iI'((	 "d
   $(4	$ $         F& & &8/ / / / / / / /< MQ$# $# $# $#N= = = =.  ,N N N	 	 	  	 	 	  * %-$5U 0C 0C 0C 0Cf= = =@       r:   