o
    NZŽh.  ã                   @   sæ   d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
mZmZmZmZ ddlmZ ddlmZ ddlmZ ddlZddlZddlmZ d	d
lmZmZmZmZmZ dd„ Zdd„ Z dd„ Z!G dd„ dej"ƒZ#dS )z!Tests for distutils.archive_util.é    N)Úarchive_util)ÚARCHIVE_FORMATSÚcheck_archive_formatsÚmake_archiveÚmake_tarballÚmake_zipfile)Úspawn)Úsupport)Ú
splitdrive)Úpatché   )ÚUID_0_SUPPORTÚgrpÚpwdÚrequire_uid_0Úrequire_unix_idc                 C   s6   t jjrdS z
|  t ¡ ¡ W dS  ty   Y dS w )zF
    Return True if the filename can be saved in the file system.
    TF)ÚosÚpathÚsupports_unicode_filenamesÚencodeÚsysÚgetfilesystemencodingÚUnicodeEncodeError)Úfilename© r   ú\/var/www/auris/lib/python3.10/site-packages/setuptools/_distutils/tests/test_archive_util.pyÚcan_fs_encode   s   þÿr   c                 C   s   t  tj| ¡S ©N)Ú	functoolsÚreduceÚoperatorÚeq)Úvaluesr   r   r   Ú	all_equal)   s   r#   c                  G   s   t dd„ | D ƒƒS )Nc                 s   s    | ]	}t  |¡jV  qd S r   )ÚpathlibÚPathÚdrive)Ú.0r   r   r   r   Ú	<genexpr>.   s   € zsame_drive.<locals>.<genexpr>)r#   )Úpathsr   r   r   Ú
same_drive-   s   r*   c                   @   s@  e Zd Zej d¡d4dd„ƒZej d¡dd„ ƒZdd„ Zd	d
„ Z	ej 
d¡dd„ ƒZej 
d¡dd„ ƒZdd„ Zdd„ Zg d¢Zdd„ eD ƒZdd„ Zej d¡ej 
d¡dd„ ƒƒZej d¡dd„ ƒZdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zej d¡d)d*„ ƒZd+d,„ Zd-d.„ Zd/d0„ Zej d¡eed1d2„ ƒƒƒZd3S )5ÚArchiveUtilTestCaseZ
needs_zlibÚarchivec                 C   s,   |   ¡ }|  ||d¡ | j||dd d d S )Nú.tar.gzú.tar©Úcompress©Ú_create_filesÚ_make_tarball)ÚselfÚnameÚtmpdirr   r   r   Útest_make_tarball2   s   z%ArchiveUtilTestCase.test_make_tarballc                 C   s   |   ¡ }| j|dddd d S )Nr,   r-   Úgzipr/   r1   ©r4   r6   r   r   r   Útest_make_tarball_gzip:   s   z*ArchiveUtilTestCase.test_make_tarball_gzipc                 C   ó(   t  d¡ |  ¡ }| j|dddd d S )NÚbz2r,   z.tar.bz2Úbzip2r/   ©ÚpytestÚimportorskipr2   r3   r9   r   r   r   Útest_make_tarball_bzip2?   ó   
z+ArchiveUtilTestCase.test_make_tarball_bzip2c                 C   r;   )NÚlzmar,   z.tar.xzÚxzr/   r>   r9   r   r   r   Útest_make_tarball_xzD   rB   z(ArchiveUtilTestCase.test_make_tarball_xzu   not can_fs_encode('Ã¥rchiv')c                 C   ó   |   d¡ dS )zV
        Mirror test_make_tarball, except filename contains latin characters.
        u   Ã¥rchivN©r7   ©r4   r   r   r   Útest_make_tarball_latin1I   s   z,ArchiveUtilTestCase.test_make_tarball_latin1u'   not can_fs_encode('ã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–')c                 C   rF   )z{
        Mirror test_make_tarball, except filename contains extended
        characters outside the latin charset.
        u   ã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–NrG   rH   r   r   r   Útest_make_tarball_extendedP   s   z.ArchiveUtilTestCase.test_make_tarball_extendedc                 K   sž   |   ¡ }t||ƒrt d¡ tj ||¡}t |¡ tt	|ƒd dfi |¤Ž W d   ƒ n1 s2w   Y  || }tj 
|¡sCJ ‚|  |¡| jksMJ ‚d S )Nz)source and target should be on same driver   Údist)Úmkdtempr*   r?   Úskipr   r   Újoinr%   r   r
   ÚexistsÚ_tarinfoÚ_created_files)r4   r6   Útarget_nameÚsuffixÚkwargsÚtmpdir2Ú	base_nameÚtarballr   r   r   r3   X   s   

ÿz!ArchiveUtilTestCase._make_tarballc                 C   s4   t  |¡}z| ¡ }| ¡  |W | ¡  S | ¡  w r   )ÚtarfileÚopenÚgetnamesÚsortÚclose)r4   r   ÚtarÚnamesr   r   r   rP   h   s   
zArchiveUtilTestCase._tarinfo)zdist/z
dist/file1z
dist/file2z	dist/sub/zdist/sub/file3z
dist/sub2/c                 C   s   g | ]}|  d ¡‘qS )ú/)Úrstrip)r'   Úpr   r   r   Ú
<listcomp>y   s    zArchiveUtilTestCase.<listcomp>c                 C   s~   |   ¡ }tj |d¡}t |¡ |  |dgd¡ |  |dgd¡ t tj |d¡¡ |  |ddgd¡ t tj |d¡¡ |S )NrK   Zfile1ÚxxxZfile2ÚsubZfile3Zsub2)rL   r   r   rN   ÚmkdirÚ
write_file)r4   r6   rK   r   r   r   r2   {   s   
z!ArchiveUtilTestCase._create_filesz2not (shutil.which('tar') and shutil.which('gzip'))c           	   	   C   sÌ  |   ¡ }|  ¡ }tj |d¡}t ¡ }t |¡ zt|dƒ W t |¡ nt |¡ w |d }tj |¡s7J ‚tj |d¡}g d¢}g d¢}t ¡ }t |¡ zt	|ƒ t	|ƒ W t |¡ nt |¡ w tj |¡smJ ‚|  
|¡| jkswJ ‚|  
|¡| jksJ ‚tj |d¡}t ¡ }t |¡ zt|dd d W t |¡ nt |¡ w |d }tj |¡s²J ‚tj |d¡}t ¡ }t |¡ zt|dd d	d
 W t |¡ nt |¡ w |d }tj |¡säJ ‚d S )Nr,   rK   r-   zarchive2.tar.gz)r]   z-cfúarchive2.tarrK   )r8   z-fz-9rg   r/   r.   T)r0   Údry_run)r2   rL   r   r   rN   ÚgetcwdÚchdirr   rO   r   rP   rQ   )	r4   r6   rU   rV   Úold_dirrW   Ztarball2Ztar_cmdZgzip_cmdr   r   r   Útest_tarfile_vs_tar‡   sL   




z'ArchiveUtilTestCase.test_tarfile_vs_tarc                 C   s¶   t  d¡}|  ¡ }tj |  ¡ d¡}t |¡ t|dƒ W d   ƒ n1 s'w   Y  |d }tj 	|¡s8J ‚| 
|¡}t| ¡ ƒ| jksIJ ‚W d   ƒ d S 1 sTw   Y  d S )NÚzipfiler,   rK   ú.zip)r?   r@   r2   r   r   rN   rL   r%   r   rO   ÚZipFileÚsortedÚnamelistÚ_zip_created_files)r4   rm   r6   rV   rW   Úzfr   r   r   Útest_make_zipfile¿   s   
ÿ"ÿz%ArchiveUtilTestCase.test_make_zipfilec                    s  t  d¡‰t| tjdd ƒ g ‰ ˆj‰‡ ‡‡fdd„}t| tjd|ƒ |  ¡ }tj 	|  
¡ d¡}t |¡ t|dƒ W d   ƒ n1 sDw   Y  |d }ˆ |d	fd
ˆjifgks[J ‚tj |¡scJ ‚ˆ |¡}t| ¡ ƒ| jkstJ ‚W d   ƒ d S 1 sw   Y  d S )Nrm   Úzlibc                     s.   |  dd ¡ˆjkrˆ  | |f¡ ˆ| i |¤ŽS )NÚcompression)ÚgetÚ
ZIP_STOREDÚappend)ÚaÚkw©Úcalledrm   Zzipfile_classr   r   Úfake_zipfileÕ   s   zCArchiveUtilTestCase.test_make_zipfile_no_zlib.<locals>.fake_zipfilero   r,   rK   rn   Úwrv   )r?   r@   r   r   rm   ro   r2   r   r   rN   rL   r%   r   rx   rO   rp   rq   rr   )r4   r~   r6   rV   rW   rs   r   r|   r   Útest_make_zipfile_no_zlibÎ   s"   
ÿ"ÿz-ArchiveUtilTestCase.test_make_zipfile_no_zlibc                 C   s,   t g d¢ƒdks
J ‚t g d¢ƒd u sJ ‚d S )N)Úgztarrc   Úziprc   )r   ÚbztarÚxztarZztarr]   r‚   )r   rH   r   r   r   Útest_check_archive_formatsè   s   
ÿz.ArchiveUtilTestCase.test_check_archive_formatsc                 C   sP   |   ¡ }tj |d¡}t t¡ t|dƒ W d   ƒ d S 1 s!w   Y  d S )Nr,   rc   )rL   r   r   rN   r?   ZraisesÚ
ValueErrorr   )r4   r6   rV   r   r   r   Útest_make_archiveï   s
   "ÿz%ArchiveUtilTestCase.test_make_archivec              	   C   sv   t  ¡ }dd„ }|g dftd< z%ztdd|  ¡ d W n	 ty$   Y nw t  ¡ |ks-J ‚W t d¡ d S t d¡ w )Nc                  _   s   t ƒ ‚r   )ÚRuntimeError)Úargsr{   r   r   r   Ú_breaksø   s   z:ArchiveUtilTestCase.test_make_archive_cwd.<locals>._breakszxxx filerc   )Úroot_dir)r   ri   r   r   rL   Ú	ExceptionÚpop)r4   Zcurrent_dirrŠ   r   r   r   Útest_make_archive_cwdõ   s   ÿz)ArchiveUtilTestCase.test_make_archive_cwdc                 C   ód   |   ¡ }tj |  ¡ d¡}t|d|dƒ}tj |¡sJ ‚tj |¡dks&J ‚|  |¡| j	ks0J ‚d S )Nr,   r]   rK   zarchive.tar©
r2   r   r   rN   rL   r   rO   ÚbasenamerP   rQ   ©r4   Úbase_dirrV   Úresr   r   r   Útest_make_archive_tar  s   z)ArchiveUtilTestCase.test_make_archive_tarc                 C   r   )Nr,   r   rK   zarchive.tar.gzr   r’   r   r   r   Útest_make_archive_gztar  s   z+ArchiveUtilTestCase.test_make_archive_gztarc                 C   ón   t  d¡ |  ¡ }tj |  ¡ d¡}t|d|dƒ}tj |¡s!J ‚tj 	|¡dks+J ‚|  
|¡| jks5J ‚d S )Nr<   r,   rƒ   rK   zarchive.tar.bz2©r?   r@   r2   r   r   rN   rL   r   rO   r‘   rP   rQ   r’   r   r   r   Útest_make_archive_bztar  ó   
z+ArchiveUtilTestCase.test_make_archive_bztarc                 C   r—   )NrC   r,   r„   rK   zarchive.tar.xzr˜   r’   r   r   r   Útest_make_archive_xztar  rš   z+ArchiveUtilTestCase.test_make_archive_xztarc                 C   sÚ   t rt d¡d }t d¡d }nd }}|  ¡ }|  ¡ }tj 	|  ¡ d¡}t
|d||||d}tj |¡s8J ‚t
|d||ƒ}tj |¡sGJ ‚t
|d||||d}tj |¡sYJ ‚t
|d||ddd}tj |¡skJ ‚d S )	Nr   Úrootr,   r‚   )ÚownerÚgroupr]   Z	kjhkjhkjgZoihohoh)r   r   Úgetgrgidr   Úgetpwuidr2   rL   r   r   rN   r   rO   )r4   rž   r   r“   r‹   rV   r”   r   r   r   Útest_make_archive_owner_group(  s*   ÿÿÿz1ArchiveUtilTestCase.test_make_archive_owner_groupc           	   	   C   sÔ   |   ¡ }tj |  ¡ d¡}t ¡ }t |¡ t d¡d }t	 
d¡d }zt|dd ||d}W t |¡ nt |¡ w tj |¡sCJ ‚t |¡}z| ¡ D ]}|jdksVJ ‚|jdks]J ‚qMW | ¡  d S | ¡  w )Nr,   r   rK   )r0   r   rž   )r2   r   r   rN   rL   ri   rj   r   rŸ   r   r    r   rO   rX   rY   Ú
getmembersÚuidÚgidr\   )	r4   r6   rV   rk   rž   r   Úarchive_namer,   Úmemberr   r   r   Útest_tarfile_root_ownerF  s&   

ÿ
þz+ArchiveUtilTestCase.test_tarfile_root_ownerN)r,   ) Ú__name__Ú
__module__Ú__qualname__r?   ÚmarkZusefixturesr7   r:   rA   rE   ZskipifrI   rJ   r3   rP   rr   rQ   r2   rl   rt   r€   r…   r‡   rŽ   r•   r–   r™   r›   r¡   r   r   r§   r   r   r   r   r+   1   sF    






	


6


		
r+   )$Ú__doc__r   r    r   r$   r   rX   Ú	distutilsr   Zdistutils.archive_utilr   r   r   r   r   Zdistutils.spawnr   Zdistutils.testsr	   Zos.pathr
   r   r?   Ztest.supportr   Zunix_compatr   r   r   r   r   r   r#   r*   ZTempdirManagerr+   r   r   r   r   Ú<module>   s(    