o ?Ogb@sr ddlZddlZddlmZmZddlmZiadddZddd Z  dd d Z d d Z dddZ ddZ dS)N)DistutilsFileErrorDistutilsInternalError)logc Cst t|ts td|ftj|}g}tj|s|dkr!|Sttj |r,|Stj |\}}|g}|rY|rYtj|sYtj |\}}| d||rY|rYtj|rA|D]\}tj ||}tj |} t| rpq[|dkrzt d||szt||Wn)ty} z| jtjkrtj|std|| jdfWYd} ~ nd} ~ ww||dt| <q[|S)Nz(mkpath: 'name' must be a string (got %r)rrz creating %szcould not create '%s': %s) isinstancestrrospathnormpathisdir _path_createdgetabspathsplitinsertjoinrinfomkdirOSErrorerrnoZEEXISTrargsappend) namemodeverbosedry_runZ created_dirsheadtailZtailsdZabs_headexcr#9/opt/alt/python310/lib64/python3.10/distutils/dir_util.pymkpathsL         r%c CsP t}|D]}|tj|tj|qt|D] }t||||dqdS)Nrr)setaddr r rdirnamesortedr%)Zbase_dirfilesrrrZneed_dirfiledirr#r#r$ create_treePs  r.c Cs\ ddlm}|stj|std|zt|} Wn ty<} z|r)g} n td|| jfWYd} ~ nd} ~ ww|sEt ||dg} | D]b} tj || } tj || }| dr_qI|rtj | rt | }|dkrwtd|||st||| |qItj| r| t| |||||||d qI|| ||||||d | |qI| S) Nr) copy_filez&cannot copy tree '%s': not a directoryzerror listing files in '%s': %s)rz.nfsrzlinking %s -> %sr&)Zdistutils.file_utilr/r r rrlistdirrstrerrorr%r startswithislinkreadlinkrrsymlinkrextend copy_tree)srcZdstZ preserve_modeZpreserve_timesZpreserve_symlinksupdaterrr/nameseZoutputsnZsrc_nameZdst_nameZ link_destr#r#r$r7csZ          r7cCsh t|D]#}tj||}tj|r!tj|s!t||q|tj|fq|tj |fdS)N) r r0r rrr3_build_cmdtuplerremovermdir)r cmdtuplesfZreal_fr#r#r$r=s r=c Cs |dkr td||rdSg}t|||D]4}z|d|dtj|d}|tvr2t|=WqtyL}z td||WYd}~qd}~wwdS)Nrz'removing '%s' (and everything under it)rzerror removing %s: %s) rrr=r r rrrwarn)Z directoryrrr@cmdrr"r#r#r$ remove_trees&  rDcCs8 tj|\}}|ddtjkr||dd}|S)Nrr)r r splitdrivesep)r Zdriver#r#r$ensure_relatives rG)rrr)rrrrrr)rr)r rZdistutils.errorsrrZ distutilsrrr%r.r7r=rDrGr#r#r#r$s   ? E