mò &U²Ic@s¯dZdZdkZdkZdkTdklZlZdkl Z ha dddd„Z dddd „Z d d ddddd „Z d „Zddd „Zd„ZdS(sWdistutils.dir_util Utility functions for manipulating directories and directory trees.s8$Id: dir_util.py 43260 2006-03-23 19:07:46Z tim.peters $N(t*(sDistutilsFileErrorsDistutilsInternalError(slogiÿic CsÀt|tƒptd|f‚ntii|ƒ}g}tii|ƒp |djo|Snt i tii |ƒƒo|Sntii |ƒ\}} | g} xO|oG| o@tii|ƒ o,tii |ƒ\}} | id| ƒq¬Wx¾| D]¶}tii||ƒ}tii |ƒ}t i |ƒoqntid|ƒ|pQyti|ƒ|i|ƒWq®tj o }td||df‚q®Xndt |  "  c Cszh}x3|D]+}d|tii|tii|ƒƒ %sRN(!tdistutils.file_utilt copy_fileRRRR tsrcRtlistdirtnamesterrorterrnoterrstrR!tdsttoutputstnRtsrc_nametdst_nametpreserve_symlinkstislinktreadlinkt link_destRRtsymlinkRtextendt copy_treet preserve_modetpreserve_timestupdate(R.R4R@RAR9RBRRR<R3R0R2R-R7R5R8R6((R R?ps>    cCs—xzti|ƒD]i}tii||ƒ}tii|ƒo%tii|ƒ ot||ƒq|i ti |fƒqW|i ti |fƒdS(N( RR/RtfRtreal_fR R:t_build_cmdtuplet cmdtuplesRtremovetrmdir(RRFRCRD((R RE·s'cCsÙdkl}tid|ƒ|odSng}t||ƒx“|D]‹}yMt |d|dfƒt i i |dƒ}t i|ƒo t |=nWqFttfj o#}ti||d|ƒƒqFXqFWdS(s‰Recursively remove an entire directory tree. Any errors are ignored (apart from being reported to stdout if 'verbose' is true). (sgrok_environment_errors'removing '%s' (and everything under it)Niiserror removing %s: (tdistutils.utiltgrok_environment_errorRRt directoryRRFREtcmdtapplyRRR R thas_keytIOErrorRRtwarn(RKRRRFRLRJRR ((R t remove_treeÁs"  cCshtii|ƒ\}}tidjoti|Sn.|dd!tijo||d}n|SdS(ssTake the full path 'path', and make it a relative path so it can be the second argument to os.path.join(). tmaciiN(RRt splitdrivetdrivetsystplatformtsep(RRT((R tensure_relativeÙs(t__doc__t __revision__RRUttypestdistutils.errorsRRt distutilsRR R!R+R?RERQRX( RZRR!RQRRXRURERR?R+R((R t?s CG