
    wBf                         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  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-y)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)TRACE   )	MAX_TRIESexp_backoff_fn)islinklchmodc                 d   	 t        |       j                  }t        |      r$t        | t	        |      t
        z  t        z         yt        |       rt        | t	        |      t
        z         yt        |      rt        | t	        |      t
        z         yt        j                  d|        y# t        $ ry}t        |dd       }|t        fv rt        j                  d|         |t        t         t"        fv rt        j                  d| |       Y d }~yt        j%                  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.12/site-packages/conda/gateways/disk/permissions.pymake_writabler.      s   T{""4=$07:;  D\412
 	 T]$01  II8$? 
a$'6)IIDdKVUE**II>aHHH94C
s1   AB- 'B- .'B- B- -	D/6AD*D**D/c                 P   t        |       j                  }t        |      rt        | t	        |      t
         z         yt        |       rt        | t	        |      t
         z         yt        |      rt        | t	        |      t
         z         yt        j                  d|        y)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_onlyr1   -   s    ;Dt}dGDMXI-.  
tWT]hY./
 	 
dGDMXI-.  			5t<    c           	      \   t        |       rNt        |       D ]?  \  }}}t        j                  ||f      D ]  } 	 t	        t
        t        ||       |       ! A y t	        t
        | |       y # t        $ r5}|j                  t        k(  rt        j                  d|        n Y d }~qd }~ww xY w)N)	max_trieszno such file or directory: %s)r   r   r   from_iterabler   r.   r   OSErrorr"   r   r$   r%   )r)   r4   rootdirsfilesr+   s         r-   recursive_make_writabler:   :   s     T{!%d 	D$++UDM: "=$tT2BiX	 	}di@  ww&(		"A4H Is   A--	B+6+B&&B+c                     t        |       r[t        |       j                  }t        j                  t        d|        t        | t        |      t        z  t        z  t        z         y t        j                  d|        y )Nzchmod +x %sz Cannot make path '%s' executable)r   r   r#   r$   r   r   r   r   r   r   errorr0   s     r-   make_executabler=   L   sT    d|T{""}d+dGDMG+g5?@		4d;r2   c                 h    t        |       r't        r| j                  d      S t        | t              S y)N)z.exez.batF)r   r   endswithr
   r	   )r)   s    r-   is_executabler@   U   s*    d|28t}}-.PfT4>PPr2   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   common.constantsr    r   r   linkr   r    __name__r$   r.   r1   r:   r=   r@    r2   r-   <module>rM      sa    K . .   / / ' ' X X X # % '  2
 -6 A$<r2   