o
    $¼"bX	  ã                   @   s¾   d dl mZmZ d dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZmZ d dlmZ e	r9er9er9dd„ ZneZd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZG dd„ deƒZdZdS )é    )Úabsolute_importÚunicode_literalsN)ÚS_IWUSR)ÚPY2)Ú
IS_CPYTHONÚIS_WIN)Úensure_textc                 C   s   t t| ƒƒS ©N)r   Ústr)Úsrc© r   ú</usr/lib/python3/dist-packages/virtualenv/util/path/_sync.pyÚnorm   s   r   c                 C   s2   |   ¡ st dtt| ƒƒ¡ t t| ƒ¡ d S d S )Nzcreate folder %s)ÚexistsÚloggingÚdebugr   r
   ÚosÚmakedirsr   )Úpathr   r   r   Ú
ensure_dir   s   þr   c                 C   sb   | |krt d | ¡ƒ‚| ¡ sd S | ¡ r%| ¡ s%t d|¡ t|ƒ d S t d|¡ | ¡  d S )Nz%source and destination is the same {}zremove directory %szremove file %s)	Ú
ValueErrorÚformatr   Úis_dirÚ
is_symlinkr   r   Úsafe_deleteÚunlink©r   Údestr   r   r   Úensure_safe_to_do   s   r   c                 C   s2   t | |ƒ t dt| |ƒ¡ |j| |  ¡ d� d S )Nz
symlink %s)Útarget_is_directory)r   r   r   Ú_DebugÚ
symlink_tor   r   r   r   r   Úsymlink)   s   
r"   c                 C   sH   t | |ƒ |  ¡ }|rtntj}t dt| |ƒ¡ |t| ƒt|ƒƒ d S )Nzcopy %s)	r   r   ÚcopytreeÚshutilÚcopyr   r   r    r   )r   r   r   Úmethodr   r   r   r%   /   s
   
r%   c           	      C   sz   t  | ¡D ]5\}}}t j |t j || ¡¡}t j |¡s!t  |¡ |D ]}t j ||¡}t j ||¡}t ||¡ q#qd S r	   )	r   Úwalkr   ÚjoinÚrelpathÚisdirr   r$   r%   )	r   r   ÚrootÚ_ÚfilesÚdest_dirÚnameÚsrc_fÚdest_fr   r   r   r#   7   s   
ýür#   c                 C   s$   dd„ }t jtt| ƒƒd|d� d S )Nc                 S   s(   t  |t j¡st  |t¡ | |ƒ d S ‚ r	   )r   ÚaccessÚW_OKÚchmodr   )Úfuncr   Úexc_infor   r   r   ÚonerrorC   s   zsafe_delete.<locals>.onerrorT)Úignore_errorsr7   )r$   Úrmtreer   r
   )r   r7   r   r   r   r   B   s   r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )r    c                 C   s   || _ || _d S r	   r   )Úselfr   r   r   r   r   Ú__init__N   s   
z_Debug.__init__c                 C   s0   d  | j ¡ r	dndtt| jƒƒtt| jƒƒ¡S )Nz
{}{} to {}z
directory Ú )r   r   r   r   r
   r   )r:   r   r   r   Ú__str__R   s
   ýz_Debug.__str__N)Ú__name__Ú
__module__Ú__qualname__r;   r=   r   r   r   r   r    M   s    r    )r   r"   r%   r"   r#   r   )Ú
__future__r   r   r   r   r$   Ústatr   Úsixr   Úvirtualenv.infor   r   Úvirtualenv.util.sixr   r   r
   r   r   r"   r%   r#   r   Úobjectr    Ú__all__r   r   r   r   Ú<module>   s&    
