a
    vbT                     @   s   d dl mZmZmZ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Zd dlmZmZmZ d dlmZ d dlZd dlmZ dd	lmZ eeZd
Zdd Zdd Zdd ZdS )    )absolute_importdivisionprint_functionunicode_literals)EACCESEEXISTENOENT	ENOTEMPTYEPERM	errorcode)	getLoggerN)basenameisdirdirname)CalledProcessError)sleep   )on_win   c                    s
  | dtts |i |S ddl fdd}tD ]}z |i |}W n ttfy } z^tt	| |j
ttfv r||| n*|j
ttfv r ntdt|j
 |j
  W Y d}~q>d}~0  ty } z||| W Y d}~q>d}~0 0 |  S q>dS )zNMostly for retrying file operations that fail on Windows due to virus scanners	max_triesr   Nc                    sV   | d kr d|     d }td}tdt|jj|j j	| t
| d S )N      g?zretrying %s/%s %s() in %g sec)randomsys	_getframelogtracer   f_codeco_filenamef_lineno__name__r   )nexcZ
sleep_timeZcaller_framefnr   r    ;lib/python3.9/site-packages/conda/gateways/disk/__init__.py
sleep_some   s    

z"exp_backoff_fn.<locals>.sleep_somez!Uncaught backoff with errno %s %d)pop	MAX_TRIESr   r   rangeOSErrorIOErrorr   r   reprerrnor
   r   r   r	   warnr   r   )r$   argskwargsr'   r!   resulter%   r#   r&   exp_backoff_fn   s&     r4   c              
   C   sz   z,t d|  | r*t|  t| o&| W S W nH tyt } z0|jtkr^t| r^| W  Y d }~S  W Y d }~n
d }~0 0 d S )Nmaking directory %s)r   r   osmakedirsr   EnvironmentErrorr.   r   )pathr3   r%   r%   r&   mkdir_p?   s    
r:   c              
   C   s   t | rd S t| }t |s$t| td|  t|  tszt| d W n@ t	t
fy } z$td| |jt|j  W Y d }~n
d }~0 0 d S )Nr5   i  z/Failed to set permissions to 2775 on %s (%d %d))r   r   mkdir_p_sudo_safer   r   r6   mkdirr   chmodr+   r,   r.   r   )r9   Zbase_dirr3   r%   r%   r&   r;   M   s    

r;   ) Z
__future__r   r   r   r   r.   r   r   r   r	   r
   r   Zloggingr   r6   os.pathr   r   r   
subprocessr   r   timer   Zcommon.compatr   r    r   r)   r4   r:   r;   r%   r%   r%   r&   <module>   s    *