U iÛfbã@slddlZddlZddlmZmZddlmZiaddd„Zddd „Z dd d „Z d d „Z ddd„Z dd„Z dS)éN)ÚDistutilsFileErrorÚDistutilsInternalError)Úlogéÿéc Csft|tƒstd|fƒ‚tj |¡}g}tj |¡s<|dkr@|St tj  |¡¡rV|Stj  |¡\}}|g}|rž|ržtj |¡sžtj  |¡\}}|  d|¡ql|D]¾}tj  ||¡}tj  |¡} t | ¡rÌq¢|dkràt  d|¡|sXzt ||¡WnVtk rL} z6| jtjkr&tj |¡stk rt} z |rRg} ntd|| jfƒ‚W5d} ~ XYnX|s†t ||dg} | D]Ê} tj  || ¡} tj  || ¡}|   d¡rºqŽ|r tj  | ¡r t  | ¡}|dkrît d||¡|sþt ||¡|  |¡qŽtj | ¡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 rrÚlistdirrÚstrerrorr%rÚ startswithÚislinkÚreadlinkrrÚsymlinkrÚextendÚ copy_tree)ÚsrcZdstZ preserve_modeZpreserve_timesZpreserve_symlinksÚupdaterrr/ÚnamesÚeZoutputsÚnZsrc_nameZdst_nameZ link_destr#r#r$r7cs\ ÿ ÿ     þÿþ r7cCsft |¡D]F}tj ||¡}tj |¡r@tj |¡s@t||ƒq | tj|f¡q | tj |f¡dS)N) r r0r rrr3Ú_build_cmdtuplerÚremoveÚrmdir)r Ú cmdtuplesÚfZreal_fr#r#r$r=¨s  r=c Csœ|dkrt d|¡|rdSg}t||ƒ|D]h}z2|d|dƒtj |d¡}|tkrbt|=Wq.tk r”}zt d||¡W5d}~XYq.Xq.dS)Nrz'removing '%s' (and everything under it)rzerror removing %s: %s) rrr=r r rrrÚwarn)Z directoryrrr@Úcmdrr"r#r#r$Ú remove_tree²s   rDcCs6tj |¡\}}|dd…tjkr2||dd…}|S)Nrr)r r Ú splitdriveÚsep)r Zdriver#r#r$Úensure_relativeÊsrG)rrr)rrr)rrrrrr)rr)r rZdistutils.errorsrrZ distutilsrrr%r.r7r=rDrGr#r#r#r$Ús  ? ÿ E