o
     JAfb                     @   sr   	 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   st  	 t | tstd| f tj| } g }tj| s| dkr!|S ttj	| r,|S tj
| \}}|g}|rY|rYtj|sYtj
|\}}|d| |rY|rYtj|rA|D ]\}tj||}tj	|}	t|	rpq[|dkrztd| |szt|| W n) ty }
 z|
jtjkrtj|std||
jd f W Y d }
~
nd }
~
ww || 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.10/distutils/dir_util.pymkpath   sL   



r&   c              	   C   sP   	 t  }|D ]}|tj| tj| qt|D ]
}t||||d qd 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   s\  	 ddl m} |stj| std|  zt| }	W n  ty< }
 z|r)g }	n	td| |
jf W Y d }
~
nd }
~
ww |sEt	||d g }|	D ]b}tj
| |}tj
||}|dr_qI|rtj|rt|}|dkrwtd|| |st|| || qItj|r|t||||||||d	 qI||||||||d	 || qI|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   sZ   

r9   c                 C   sh   	 t | D ]#}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 ]4}z|d |d  tj|d }|tv r2t|= W q tyL } zt d| | W Y d }~qd }~ww 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   s8   	 t j| \}} | dd t jkr|| 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   Zdistutils.errorsr   r   Z	distutilsr   r   r&   r0   r9   r@   rG   rK   r$   r$   r$   r%   <module>   s    

?
E

