
    DIe                         d Z ddlmZmZmZmZ ddlmZ ddlm	Z	 ddl
mZmZmZmZmZ ddlmZmZmZ ddlmZmZ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#m$Z$  e	e%          Z&d Z'd Z(e fdZ)d Z*d Z+dS )zDDisk utility functions for modifying file and directory permissions.    )EACCESENOENTEPERMEROFS)chain)	getLogger)X_OKaccesschmodlstatwalk)isdirisfilejoin)S_IEXECS_IMODES_ISDIRS_ISREGS_IWRITES_IXGRPS_IXOTHS_IXUSR   )on_win   )	MAX_TRIESexp_backoff_fn)islinklchmodc                    	 t          |           j        }t          |          r.t          | t	          |          t
          z  t          z             nt          |           r&t          | t	          |          t
          z             nPt          |          r&t          | t	          |          t
          z             nt                              d|            dS # t          $ r}t          |dd           }|t          fv rt                              d|             |t          t           t"          fv r"t                              d| |           Y d }~dS t                              d| |            d }~ww xY w)Nz path cannot be made writable: %sTerrnoz,tried to make writable, but didn't exist: %sz%tried make writable but failed: %s
%rFz!Error making path writable: %s
%r)r   st_moder   r   r   r   r   r   r   r   logdebug	Exceptiongetattrr   r   r   r   warn)pathmodeeenos       ?lib/python3.11/site-packages/conda/gateways/disk/permissions.pymake_writabler-      s`   T{{"4== 	@$07:;;;;D\\ 	@412222T]] 	@$01111II8$???t 
 
 
a$''6)IIDdKKKVUE***II>aHHH55555HH94CCC
s   CC 
E5$A)E0E00E5c                    t          |           j        }t          |          r't          | t	          |          t
           z             nt          |           r't          | t	          |          t
           z             nQt          |          r't          | t	          |          t
           z             nt          
                    d|            dS )Nz!path cannot be made read only: %sT)r   r"   r   r   r   r   r   r   r   r#   r$   r(   r)   s     r,   make_read_onlyr0   +   s    ;;Dt}} =dGDMMXI-....	 =tWT]]hY.////	 =dGDMMXI-....		5t<<<4    c           	         t          |           rt          |           D ]\  }}}t          j        ||f          D ]l} 	 t	          t
          t          ||           |           )# t          $ r7}|j        t          k    rt                              d|            n Y d }~ed }~ww xY wd S t	          t
          | |           d S )N)	max_trieszno such file or directory: %s)r   r   r   from_iterabler   r-   r   OSErrorr!   r   r#   r$   )r(   r3   rootdirsfilesr*   s         r,   recursive_make_writabler9   8   s     T{{ A!%d 	 	D$+UDM::  "=$tT2B2BiXXXXX   w&((		"A4HHHH IHHHH	 	 	}di@@@@@@s   %A$$
B%.-B  B%c                 &   t          |           rft          |           j        }t                              d|            t          | t          |          t          z  t          z  t          z             d S t          
                    d|            d S )Nzchmod +x %sz Cannot make path '%s' executable)r   r   r"   r#   tracer   r   r   r   r   errorr/   s     r,   make_executabler=   J   sx    d|| <T{{"		-&&&dGDMMG+g5?@@@@@		4d;;;;;r1   c                     t          |           r1t          r|                     d          nt          | t                    S dS )N)z.exez.batF)r   r   endswithr
   r	   )r(   s    r,   is_executabler@   S   s=    d|| Q28Pt}}-...fT4>P>PP5r1   N),__doc__r!   r   r   r   r   	itertoolsr   loggingr   osr	   r
   r   r   r   os.pathr   r   r   statr   r   r   r   r   r   r   r   common.compatr    r   r   linkr   r   __name__r#   r-   r0   r9   r=   r@    r1   r,   <module>rL      s   K J . . . . . . . . . . . .             / / / / / / / / / / / / / / ' ' ' ' ' ' ' ' ' ' X X X X X X X X X X X X X X X X X X X X # # # # # # ' ' ' ' ' ' ' '                i  2
 
 
 -6 A A A A$< < <    r1   