U
    b                     @   s  d dl mZmZ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 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"m#Z# dd
l$m%Z%m&Z& ddl'm(Z( ee)Z*dd Z+dd Z,e"fddZ-dd Z.dd Z/dS )    )absolute_importdivisionprint_functionunicode_literals)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   )	MAX_TRIESexp_backoff_fn)islinklchmod   )on_winc              
   C   s   ztt | j}t|r,t| t|tB tB  nDt| rHt| t|tB  n(t	|rdt| t|tB  nt
d|  W dS  tk
r } z`t|dd }|tfkrt
d|   n6|tttfkrt
d| | W Y dS t
d| |  W 5 d }~X Y nX d S )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eZeno r-   >lib/python3.8/site-packages/conda/gateways/disk/permissions.pymake_writable   s(    


r/   c                 C   st   t | j}t|r(t| t|t @  nHt| rFt| t|t @  n*t|rdt| t|t @  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+   r-   r-   r.   make_read_only-   s    
r1   c                 C   s   t | rt| D ]x\}}}t||fD ]^} zttt|| |d W q( ttfk
r } z|j	t
krrtd|  n W 5 d }~X Y q(X q(qntt| |d d S )N)	max_trieszno such file or directory: %s)r   r   r
   from_iterabler   r/   r   IOErrorOSErrorr#   r   r%   r&   )r*   r2   rootdirsfilesr,   r-   r-   r.   recursive_make_writable:   s    
r9   c                 C   sJ   t | r:t| j}td|  t| t|tB tB t	B  nt
d|  d S )Nzchmod +x %sz Cannot make path '%s' executable)r   r   r$   r%   Ztracer   r   r   r   r   errorr0   r-   r-   r.   make_executableL   s
    
r;   c                 C   s$   t | r tr| dS t| tS dS )N)z.exez.batF)r   r"   endswithr   r   )r*   r-   r-   r.   is_executableU   s    r=   N)0Z
__future__r   r   r   r   r#   r   r   r   r	   	itertoolsr
   Zloggingr   osr   r   r   r   r   os.pathr   r   r   statr   r   r   r   r   r   r   r    r   r   linkr   r    Zcommon.compatr"   __name__r%   r/   r1   r9   r;   r=   r-   r-   r-   r.   <module>   s   (	