
    DIe                       d Z ddlm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 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mZ d
dlmZ d
dlmZ d
dlmZ d
dl m!Z! d
dl"m#Z# ddl$m%Z%m&Z&m'Z' ddl(m)Z) ddl*m+Z+  ee,          Z- ej.        d          Z/ G d de0          Z1d Z2d#dZ3ed$d%d             Z4d#d!Z5d&d"Z6dS )'zCDisk utility functions for modifying existing files or directories.    )annotationsN)contextmanager)EINVALEPERMEXDEV)	getLogger)basenamedirnameexistsisdirjoinsplit)move)PIPEPopen   )DRY_RUN_PREFIX)context)on_win)expand)NotWritableError   )exp_backoff_fnmkdir_pmkdir_p_sudo_safe)rm_rf)lexistss   ^(#!((?:\\ |[^ \n\r])+)(.*))c                      e Zd ZdS )CancelOperationN)__name__
__module____qualname__     :lib/python3.11/site-packages/conda/gateways/disk/update.pyr   r      s        Dr$   r   c                   d }	 t          t          | d          }t                              d|            |                                }|                    d           	 |                     ||                     |                                 	 |r|                                 dS dS # t          $ r Y nw xY w	 |r|                                 n# |r|                                 w w xY wdS )Nzrb+z"in-place update path locked for %sr   TF)
r   openlogtracereadseekwritetruncatecloser   )file_full_pathcallbackfhdatas       r%   update_file_in_place_as_binaryr3   "   s    
BD.%88		6GGGwwyy



	HHXXd^^$$$KKMMM  	HHJJJJJ	 	  	 	 	D	 	HHJJJ  	HHJJJJ	5s*   AC 2B, ,
B96C 8B99C C-Fc           	        t          |          r|rt          |           t          |           rt                              d| |           	 t	          j        | |           d S # t          $ ro}t          rt          |           t          |          k    rt          j	        
                    |           rt          t          j        d          }t          |d          }t          |          r[t          |           \  }}t!          |          }t#          dd||||gt$          t$                    }	|	                                \  }
}nt                              d                    |                     nO|j        t.          t0          t2          fv r3t                              d| ||j                   t5          | |           n Y d }~d S Y d }~d S Y d }~d S d }~ww xY wt                              d	|            d S )
Nzrenaming %s => %scondabinzrename_tmp.batzcmd.exez/C)stdoutstderrzx{} is missing.  Conda was not installed correctly or has been corrupted.  Please file an issue on the conda github repo.zHCould not rename %s => %s due to errno [%s]. Falling back to copy/unlinkz.cannot rename; source path does not exist '%s')r   r   r(   r)   osrenameOSErrorr   r
   pathisfiler   r   conda_prefixr   r   r	   r   r   communicatedebugformaterrnor   r   r   r   )source_pathdestination_pathforceecondabin_dirrename_script_dirname_src_fn_dest_fnpr6   r7   s               r%   r9   r9   8   sJ       U  { ,Q		%{4DEEE(	Ik#344444 &	 &	 &	%K((G4D,E,EEEGNN;// F  $G$8*EE $\3C D D-(( (-k(:(:%Hg'(899H"D-7HU##  A
 &']]__NFFFIIUU[U[)V V    VUE222 		&$G   ["23333)      #FFFFF( 433333I&	P 			BKPPPPPs   A% %G0EGGsourcestrdestination
str | Nonedry_runboolc              #     K   |t          j                    }|r"t          t           d|  d|            dV  dS 	 t	          | |d           dV  dS # t
          $ r}t	          || d           |d}~ww xY w)z
    Used for removing a directory when there are dependent actions (i.e. you need to ensure
    other actions succeed before removing it).

    Example:
        with rename_context(directory):
            # Do dependent actions here
    Nz rename_context z > T)rD   )tempfilemkdtempprintr   r9   	Exception)rL   rN   rP   excs       r%   rename_contextrX   j   s       &(( IIIIKIIJJJv{$////   {F$////	s   A 
A8A33A8c                4    t          t          | ||           d S )N)r   r9   )rB   rC   rD   s      r%   backoff_renamerZ      s    6;(8%@@@@@r$   c                   	 t          |           } t                              d|            t          |           rt	          j        | d            dS t          |           }t          |          s$|r"|rt          |           n.t          |           nt          t          |                     sJ t          | d          5  	 d d d            n# 1 swxY w Y   dS # t          $ r}t          | |j        |          d }~ww xY w)Nztouching path %sTaF)	caused_by)r   r(   r)   r   r8   utimer
   r   r   r   r'   r:   r   rA   )r;   mkdir	sudo_safedirpathrE   s        r%   touchrb      sS   ;d||		$d+++4== 	HT4   4dmmG>> ,e , %%g....G$$$$WT]]+++++dC                 5 ; ; ;tQW::::;sC   AC A0C CC CC CC 
D'C>>D)F)NF)rL   rM   rN   rO   rP   rQ   )FF)7__doc__
__future__r   r8   rerS   
contextlibr   rA   r   r   r   loggingr   os.pathr	   r
   r   r   r   r   shutilr   
subprocessr   r   base.constantsr   base.contextr   common.compatr   common.pathr   
exceptionsr    r   r   r   deleter   linkr   r    r(   compileSHEBANG_REGEXrV   r   r3   r9   rX   rZ   rb   r#   r$   r%   <module>ru      sA   J I " " " " " " 				 				  % % % % % % & & & & & & & & & &       A A A A A A A A A A A A A A A A       " " " " " " " " , , , , , , # # # # # # # # # # # # ! ! ! ! ! ! * * * * * * 8 8 8 8 8 8 8 8 8 8            i
;<<	 	 	 	 	i 	 	 	  ,/Q /Q /Q /Qd     4A A A A"; "; "; "; "; ";r$   