a
    åzeb  ã                   @   sl   d dl Z d dlZd dlmZmZ d dlmZ i addd„Zddd	„Z	dd
d„Z
dd„ Zddd„Zdd„ ZdS )é    N)ÚDistutilsFileErrorÚDistutilsInternalError)Úlogéÿ  é   c                 C   sh  t | tƒstd| f ƒ‚tj | ¡} g }tj | ¡s<| dkr@|S t tj 	| ¡¡rV|S tj 
| ¡\}}|g}|rž|ržtj |¡sžtj 
|¡\}}| d|¡ ql|D ]À}tj ||¡}tj 	|¡}	t |	¡rÌq¢|dkràt d|¡ |sZzt ||¡ W nX tyN }
 z>|
jtjkr$tj |¡s:td||
jd f ƒ‚W Y d }
~
n
d }
~
0 0 | |¡ dt|	< q¢|S )Nz(mkpath: 'name' must be a string (got %r)Ú r   r   zcreating %szcould not create '%s': %séÿÿÿÿ)Ú
isinstanceÚstrr   ÚosÚpathÚnormpathÚisdirÚ_path_createdÚgetÚabspathÚsplitÚinsertÚjoinr   ÚinfoÚmkdirÚOSErrorÚerrnoÚEEXISTr   ÚargsÚappend)ÚnameÚmodeÚverboseÚdry_runZcreated_dirsÚheadÚtailZtailsÚdZabs_headÚexc© r$   ú(/usr/lib/python3.9/distutils/dir_util.pyÚmkpath   sB    
ÿ
ÿ

r&   c              	   C   sN   t ƒ }|D ] }| tj | tj |¡¡¡ q
t|ƒD ]}t||||d q4d S )N©r   r   )ÚsetÚaddr   r   r   ÚdirnameÚsortedr&   )Úbase_dirÚfilesr   r   r   Zneed_dirÚfileÚdirr$   r$   r%   Úcreate_treeP   s
    r0   c                 C   sb  ddl m} |s(tj | ¡s(td|  ƒ‚zt | ¡}	W n@ tyv }
 z(|rPg }	ntd| |
jf ƒ‚W Y d }
~
n
d }
~
0 0 |sˆt	||d g }|	D ]Ì}tj 
| |¡}tj 
||¡}| d¡r¼q|rtj |¡rt |¡}|dkrðt d||¡ |st ||¡ | |¡ qtj |¡r<| t||||||||d	¡ q||||||||d	 | |¡ q|S )
Nr   )Ú	copy_filez&cannot copy tree '%s': not a directoryzerror listing files in '%s': %s)r   z.nfsr   zlinking %s -> %sr'   )Zdistutils.file_utilr1   r   r   r   r   Úlistdirr   Ústrerrorr&   r   Ú
startswithÚislinkÚreadlinkr   r   Úsymlinkr   ÚextendÚ	copy_tree)ÚsrcÚdstZpreserve_modeZpreserve_timesZpreserve_symlinksÚupdater   r   r1   ÚnamesÚeZoutputsÚnZsrc_nameZdst_nameZ	link_destr$   r$   r%   r9   c   sR    ÿÿ

þÿþr9   c                 C   sf   t  | ¡D ]F}t j | |¡}t j |¡r@t j |¡s@t||ƒ q
| t j|f¡ q
| t j	| f¡ d S )N)
r   r2   r   r   r   r5   Ú_build_cmdtupler   ÚremoveÚrmdir)r   Ú	cmdtuplesÚfZreal_fr$   r$   r%   r@   ¨   s    r@   c                 C   sž   |dkrt  d| ¡ |rd S g }t| |ƒ |D ]j}z2|d |d ƒ tj |d ¡}|tv rbt|= W q. ty– } zt  d| |¡ W Y d }~q.d }~0 0 q.d S )Nr   z'removing '%s' (and everything under it)r   zerror removing %s: %s)	r   r   r@   r   r   r   r   r   Úwarn)Z	directoryr   r   rC   Úcmdr   r#   r$   r$   r%   Úremove_tree²   s    

rG   c                 C   s6   t j | ¡\}} | dd… t jkr2|| dd …  } | S )Nr   r   )r   r   Ú
splitdriveÚsep)r   Údriver$   r$   r%   Úensure_relativeÊ   s    rK   )r   r   r   )r   r   r   )r   r   r   r   r   r   )r   r   )r   r   Zdistutils.errorsr   r   Z	distutilsr   r   r&   r0   r9   r@   rG   rK   r$   r$   r$   r%   Ú<module>   s   
?
  ÿ
E

