U ,ab@slddlZddlZddlmZmZddlmZiadddZddd Z dd d Z d d Z dddZ ddZ dS)N)DistutilsFileErrorDistutilsInternalError)logc Csft|tstd|ftj|}g}tj|s<|dkr@|Sttj |rV|Stj |\}}|g}|r|rtj|stj |\}}| d|ql|D]}tj ||}tj |} t| rq|dkrt d||sXzt||WnVtk rL} z6| jtjkr&tj|stk rt} z |rRg} ntd|| jfW5d} ~ XYnX|st ||dg} | D]} tj || } tj || }| drq|r tj | r t | }|dkrtd|||st||| |qtj| r8| 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_utilr/r r rrlistdirrstrerrorr%r startswithislinkreadlinkrrsymlinkrextend copy_tree)srcZdstZ preserve_modeZpreserve_timesZpreserve_symlinksupdaterrr/nameseZoutputsnZsrc_nameZdst_nameZ link_destr#r#r$r7cs\        r7cCsft|D]F}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|dkrtd||rdSg}t|||D]h}z2|d|dtj|d}|tkrbt|=Wq.tk r}ztd||W5d}~XYq.Xq.dS)Nrz'removing '%s' (and everything under it)rzerror removing %s: %s) rrr=r r rrrwarn)Z directoryrrr@cmdrr"r#r#r$ remove_trees   rDcCs6tj|\}}|ddtjkr2||dd}|S)Nrr)r r splitdrivesep)r Zdriver#r#r$ensure_relativesrG)rrr)rrr)rrrrrr)rr)r rZdistutils.errorsrrZ distutilsrrr%r.r7r=rDrGr#r#r#r$s  ?  E