a DOgb@slddlZddlZddlmZmZddlmZiadddZddd Z dd d Z d d Z dddZ ddZ dS)N)DistutilsFileErrorDistutilsInternalError)logc Csht|tstd|ftj|}g}tj|s<|dkr@|Sttj |rV|Stj |\}}|g}|r|rtj|stj |\}}| d|ql|D]}tj ||}tj |} t| rq|dkrt d||sZzt||WnXtyN} z>| jtjkr$tj|s:td|| jdfWYd} ~ n d} ~ 00||dt| <q|S)Nz(mkpath: 'name' must be a string (got %r)rrz creating %szcould not create '%s': %s) isinstancestrrospathnormpathisdir _path_createdgetabspathsplitinsertjoinrinfomkdirOSErrorerrnoEEXISTrargsappend) namemodeverbosedry_runZ created_dirsheadtailZtailsdZabs_headexcr$*/usr/lib64/python3.9/distutils/dir_util.pymkpathsB       r&c CsNt}|D] }|tj|tj|q t|D]}t||||dq4dS)Nrr)setaddr r rdirnamesortedr&)base_dirfilesrrrZneed_dirfiledirr$r$r% create_treePs  r0c Csbddlm}|s(tj|s(td|zt|} Wn@tyv} z(|rPg} ntd|| jfWYd} ~ n d} ~ 00|st ||dg} | D]} tj || } tj || }| drq|rtj | rt | }|dkrtd|||st||| |qtj| r<| t| |||||||d q|| ||||||d | |q| S) Nr) copy_filez&cannot copy tree '%s': not a directoryzerror listing files in '%s': %s)rz.nfsrzlinking %s -> %sr')Zdistutils.file_utilr1r r rrlistdirrstrerrorr&r startswithislinkreadlinkrrsymlinkrextend copy_tree)srcdstZ preserve_modeZpreserve_timesZpreserve_symlinksupdaterrr1nameseZoutputsnZsrc_nameZdst_nameZ link_destr$r$r%r9csR        r9cCsft|D]F}tj||}tj|r@tj|s@t||q |tj|fq |tj |fdS)N) r r2r rrr5_build_cmdtuplerremovermdir)r cmdtuplesfZreal_fr$r$r%r@s  r@c Cs|dkrtd||rdSg}t|||D]j}z2|d|dtj|d}|tvrbt|=Wq.ty}ztd||WYd}~q.d}~00q.dS)Nrz'removing '%s' (and everything under it)rzerror removing %s: %s) rrr@r r rrrwarn)Z directoryrrrCcmdrr#r$r$r% remove_trees   rGcCs6tj|\}}|ddtjkr2||dd}|S)Nrr)r r splitdrivesep)r driver$r$r%ensure_relativesrK)rrr)rrr)rrrrrr)rr)r rZdistutils.errorsrrZ distutilsrrr&r0r9r@rGrKr$r$r$r%s  ?  E