й¼]bã@sºddlZddlZddlmZmZddlmZiaddddd„Zddddd „Z ddddddd d „Z d d „Z dddd„Z dd„Z dS)éN)ÚDistutilsFileErrorÚDistutilsInternalError)Úlogiÿéc Csît|tƒs"td|fƒ‚tjj|ƒ}g}tjj|ƒsX|dkr\|Stjtjj |ƒƒr{|Stjj |ƒ\}}|g}xK|ré|rétjj|ƒ rétjj |ƒ\}}|j d|ƒqŸWxý|D]õ}tjj ||ƒ}tjj |ƒ} tj| ƒr0qñ|dkrLt jd|ƒ|sÜytj||ƒWnftk rÎ} zF| jtjkoœtjj|ƒs¼td|| jdfƒ‚WYdd} ~ XnX|j|ƒdt|  "  $- r%cCsvtƒ}x6|D].}|jtjj|tjj|ƒƒƒqWx-t|ƒD]}t||d|d|ƒqOWdS)Nrr)ÚsetÚaddr r rÚdirnameÚsortedr%)Úbase_dirÚfilesrrrZneed_dirÚfileÚdirr#r#r$Ú create_treePs  ,r.cCsèddlm}| r:tjj|ƒ r:td|ƒ‚ytj|ƒ} WnMtk rœ} z-|rqg} ntd|| jfƒ‚WYdd} ~ XnX|s³t |d|ƒg} x(| D] } tjj || ƒ} tjj || ƒ}| j dƒrqÀ|rntjj | ƒrntj | ƒ}|dkrHtjd||ƒ|s^tj||ƒ| j|ƒqÀtjj| ƒr±| jt| |||||d|d |ƒƒqÀ|| ||||d|d |ƒ| j|ƒqÀW| S) Nr)Ú copy_filez&cannot copy tree '%s': not a directoryzerror listing files in '%s': %srz.nfsrzlinking %s -> %sr)Zdistutils.file_utilr/r r r rÚlistdirrÚstrerrorr%rÚ startswithÚislinkÚreadlinkrrÚsymlinkrÚextendÚ copy_tree)ÚsrcÚdstZ preserve_modeZpreserve_timesZpreserve_symlinksÚupdaterrr/ÚnamesÚeZoutputsÚnZsrc_nameZdst_nameZ link_destr#r#r$r7csH  )     r7cCs”xwtj|ƒD]f}tjj||ƒ}tjj|ƒr`tjj|ƒ r`t||ƒq|jtj|fƒqW|jtj |fƒdS)N) r r0r rr r3Ú_build_cmdtuplerÚremoveÚrmdir)r Ú cmdtuplesÚfZreal_fr#r#r$r>¨s %r>cCsÈ|dkrtjd|ƒ|r&dSg}t||ƒxˆ|D]€}y?|d|dƒtjj|dƒ}|tkr„t|=Wq@tk r¿}ztjd||ƒWYdd}~Xq@Xq@WdS)Nrz'removing '%s' (and everything under it)rzerror removing %s: %s) rrr>r r rrrÚwarn)Z directoryrrrAÚcmdrr"r#r#r$Ú remove_tree²s     rEcCsItjj|ƒ\}}|dd…tjkrE||dd…}|S)Nrr)r r Ú splitdriveÚsep)r Zdriver#r#r$Úensure_relativeÊsrH)r rZdistutils.errorsrrZ distutilsrrr%r.r7r>rErHr#r#r#r$Ús  ?D