3 e@sZdZddlZddlmZddlmZddddZdd d ZdddZdddZ ddZ dS)zFdistutils.file_util Utility functions for operating on single files. N)DistutilsFileError)logcopyingz hard linkingzsymbolically linking)NhardsymicNCsd}d}zvyt|d}Wn4tk rN}ztd||jfWYdd}~XnXtjj|rytj|Wn4tk r}ztd||jfWYdd}~XnXyt|d}Wn4tk r}ztd||jfWYdd}~XnXxy|j|}Wn6tk r*}ztd||jfWYdd}~XnX|s4Py|j |Wqtk rx}ztd||jfWYdd}~XqXqWWd|r|j |r|j XdS) a5Copy the file 'src' to 'dst'; both must be filenames. Any error opening either file, reading from 'src', or writing to 'dst', raises DistutilsFileError. Data is read/written in chunks of 'buffer_size' bytes (default 16k). No attempt is made to handle anything apart from regular files. Nrbzcould not open '%s': %szcould not delete '%s': %swbzcould not create '%s': %szcould not read from '%s': %szcould not write to '%s': %s) openOSErrorrstrerrorospathexistsunlinkreadwriteclose)srcdst buffer_sizefsrcfdstebufrE/tmp/pip-build-vlmub77e/setuptools/setuptools/_distutils/file_util.py_copy_file_contentssF $ """*rcCsddlm}ddlm} m} m} m} tjj |s %srr)distutils.dep_utilrstatr r!r"r#r risfilerisdirjoinbasenamedirnamerdebug _copy_actionKeyError ValueErrorinforsamefilelinkr symlinkrutimechmod)rr preserve_modepreserve_timesupdater1verbosedry_runrr r!r"r#diractionstrrr copy_fileCsT!               r=c(Csddlm}m}m}m}m}ddl} |dkr:tjd|||rB|S||sVt d|||rrt j j |||}n||rt d||f|||st d||fd } yt j ||WnPtk r } z2| j\} } | | jkrd } nt d ||| fWYdd} ~ XnX| rt|||d yt j|Wnhtk r} zJ| j\} } yt j|Wntk rpYnXt d |||| fWYdd} ~ XnX|S)a%Move a file 'src' to 'dst'. If 'dst' is a directory, the file will be moved into it with the same name; otherwise, 'src' is just renamed to 'dst'. Return the new full name of the file. Handles cross-device moves on Unix using 'copy_file()'. What about other systems??? r)rr&r'r)r*Nrzmoving %s -> %sz#can't move '%s': not a regular filez0can't move '%s': destination '%s' already existsz2can't move '%s': destination '%s' not a valid pathFTzcouldn't move '%s' to '%s': %s)r8zAcouldn't move '%s' to '%s' by copy/delete: delete '%s' failed: %s)os.pathrr&r'r)r*errnorr/rr rr(renamer argsEXDEVr=r)rrr8r9rr&r'r)r*r?copy_itrnummsgrrr move_filesR       " "rFc Cs:t|d}z x|D]}|j|dqWWd|jXdS)z{Create a file with the specified name and write 'contents' (a sequence of strings without line terminators) to it. w N)r rr)filenamecontentsflinerrr write_files   rM@)rN)rrrNrr)rr) __doc__r Zdistutils.errorsr distutilsrr,rr=rFrMrrrrs   3 c =