a �DOg��@sZdZddlZddlmZddlmZdddd�Zdd d �Zdd d�Zddd�Z dd�Z dS)zFdistutils.file_util Utility functions for operating on single files. �N)�DistutilsFileError)�logZcopyingz hard linkingzsymbolically linking)N�hard�sym�@c Cs�d}d}�z�zt|d�}Wn6tyP}ztd||jf��WYd}~n d}~00tj�|�r�zt�|�Wn6ty�}ztd||jf��WYd}~n d}~00zt|d�}Wn6ty�}ztd||jf��WYd}~n d}~00z|�|�}Wn8t�y0}ztd||jf��WYd}~n d}~00|�s<�q�z|� |�Wq�t�y�}ztd||jf��WYd}~q�d}~00q�W|�r�|� �|�r�|� �n|�r�|� �|�r�|� �0dS) 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. N�rbzcould not open '%s': %szcould not delete '%s': %s�wbzcould not create '%s': %szcould not read from '%s': %szcould not write to '%s': %s) �open�OSErrorr�strerror�os�path�exists�unlink�read�write�close)�src�dstZ buffer_size�fsrc�fdst�e�buf�r�+/usr/lib64/python3.9/distutils/file_util.py�_copy_file_contentssT (  � � � � �r�cCs ddlm}ddlm} m} m} m} tj� |�s %srr)Zdistutils.dep_utilr�statrrr r!r r �isfiler�isdir�join�basename�dirnamer�debug� _copy_action�KeyError� ValueError�infor�samefile�linkr �symlinkr�utime�chmod)rrZ preserve_modeZpreserve_times�updater.�verbose�dry_runrrrr r!�dir�action�strrr� copy_fileCsV!  �              r8c Cs�ddlm}m}m}m}m}ddl} |dkr:t�d||�|rB|S||�sVt d|��||�rrt j � |||��}n||�r�t d||f��|||��s�t d||f��d } zt � ||�WnRt�y } z8| j\} } | | jkr�d } nt d ||| f��WYd} ~ n d} ~ 00| �r�t|||d �zt �|�Wnht�y�} zN| j\} } zt �|�Wnt�ynYn0t d |||| f��WYd} ~ n d} ~ 00|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)r3zAcouldn't move '%s' to '%s' by copy/delete: delete '%s' failed: %s)Zos.pathrr#r$r&r'�errnorr,rr r r%�renamer �argsZEXDEVr8r)rrr3r4rr#r$r&r'r9Zcopy_itr�num�msgrrr� move_file�s`  �� ��   �  ��r>cCs>t|d�}z$|D]}|�|d�qW|��n |��0dS)z{Create a file with the specified name and write 'contents' (a sequence of strings without line terminators) to it. �w� N)r rr)�filename�contents�f�linerrr� write_file�s  rE)r)rrrNrr)rr) �__doc__r Zdistutils.errorsrZ distutilsrr)rr8r>rErrrr�s  � 3� d� ?