U
    b                     @   s   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 d dl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 dd
lmZmZ ddlmZ ddlmZ ddlm Z  ee!Z"dd Z#edddd Z$edddd Z%dd Z&dS )    )absolute_importdivisionprint_functionunicode_literals)	lru_cache)	getLogger)W_OKaccess)basenamedirnameisdirisfilejoin)uuid4   )create_link)rm_rf)islinklexists   )PREFIX_MAGIC_FILE)expand)LinkTypec              
   C   s   t | } td|  tt| rt| }zt| d}W n6 ttfk
rl } zt	| W Y dS d }~X Y qX |
  |st|  dS n
t| tS d S )Nzchecking path is writable %sza+FT)r   logtracer   r   r   openIOErrorOSErrordebugcloser   r	   r   )pathZpath_existedZfhe r"   7lib/python3.8/site-packages/conda/gateways/disk/test.pyfile_path_is_writable   s    
r$   N)maxsizec              	   C   s   t |dt| tt d d f }t| s4t| t|sDt|t|rTt| t|rdt|zzzHt	| |t
jdd t| }|rtd| | ntd| | |W W 2S  ttfk
r   td| | Y W 
dS X W 5 t| X d S )Nz
.tmp.%s.%s   TZforcez hard link supported for %s => %sz'hard link IS NOT supported for %s => %sF)r   r
   strr   r   AssertionErrorr   r   r   r   r   Zhardlinkr   r   r   r   r   )source_filedest_dirZ	test_fileZis_supportedr"   r"   r#   hardlink_supported*   s"    $

r,   c              	   C   s   t d| | t|dt|  }t| s0t| t|s@t|t|rPt|zDz t	| |t
jdd t|W W $S  ttfk
r   Y W 
dS X W 5 t| X d S )Nz*checking soft link capability for %s => %sz.tmp.Tr'   F)r   r   r   r
   r   r)   r   r   r   r   r   Zsoftlinkr   r   r   )r*   r+   Z	test_pathr"   r"   r#   softlink_supportedC   s    r-   c                 C   s   t t| tS )N)r   r   r   )prefixr"   r"   r#   is_conda_environmentU   s    r/   )'Z
__future__r   r   r   r   	functoolsr   Zloggingr   osr   r	   os.pathr
   r   r   r   r   Zuuidr   Zcreater   deleter   linkr   r   Zbase.constantsr   Zcommon.pathr   Zmodels.enumsr   __name__r   r$   r,   r-   r/   r"   r"   r"   r#   <module>   s$   

