
    si                         S 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Jr  SSKJrJrJr  SSKJrJrJrJr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#  SSK$J%r%J&r&  \	" \'5      r(S r)S r*\"4S jr+S r,S r-g)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                     [        U 5      R                  n[        U5      (       a$  [        U [	        U5      [
        -  [        -  5        g[        U 5      (       a  [        U [	        U5      [
        -  5        g[        U5      (       a  [        U [	        U5      [
        -  5        g[        R                  SU 5        g! [         a{  n[        USS 5      nU[        4;   a  [        R                  SU 5        e U[        [         ["        4;   a  [        R                  SX5         S nAg[        R%                  SX5        e S nAff = f)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   warning)pathmodeeenos       ?lib/python3.13/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>HKK<dF
s1   AB< ,B< 8,B< %B< <
EAD<%D<<Ec                 n   [        U 5      R                  n[        U5      (       a  [        U [	        U5      [
        ) -  5        g[        U 5      (       a  [        U [	        U5      [
        ) -  5        g[        U5      (       a  [        U [	        U5      [
        ) -  5        g[        R                  SU 5        g)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           	      `   [        U 5      (       aM  [        U 5       H=  u  p#n[        R                  " XC45       H  n  [	        [
        [        X 5      US9  M     M?     g [	        [
        XS9  g ! [         a6  nUR                  [        :X  a  [        R                  SU 5         S nAMn  e S nAff = f)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++UM:"=$t2BiX ; ", 	}d@  ww&(		"A4HH	s   A--
B-7*B('B((B-c                    [        U 5      (       a[  [        U 5      R                  n[        R                  [        SU 5        [        U [        U5      [        -  [        -  [        -  5        g [        R                  SU 5        g )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   sV    d||T{""}d+dGDMG+g5?@		4d;r2   c                 |    [        U 5      (       a,  [        (       a  U R                  S5      $ [        U [        5      $ g)N)z.exez.batF)r   r   endswithr
   r	   )r)   s    r-   is_executabler@   U   s.    d||28&t}}-.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   