o
    LK&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/html/venv/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ÚArchiveUtilTestCaseÚ
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.   Úgzipr0   r2   ©r5   r7   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Úbzip2r0   ©ÚpytestÚimportorskipr3   r4   r:   r   r   r   Útest_make_tarball_bzip2?   ó   
z+ArchiveUtilTestCase.test_make_tarball_bzip2c                 C   r<   )NÚlzmar-   z.tar.xzÚxzr0   r?   r:   r   r   r   Útest_make_tarball_xzD   rC   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©r8   ©r5   r   r   r   Útest_make_tarball_latin1I   s   z,ArchiveUtilTestCase.test_make_tarball_latin1u'   not can_fs_encode('ã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–')c                 C   rG   )z{
        Mirror test_make_tarball, except filename contains extended
        characters outside the latin charset.
        u   ã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–NrH   rI   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)r5   r7   Útarget_nameÚsuffixÚkwargsÚtmpdir2Ú	base_nameÚtarballr   r   r   r4   X   s   

ÿz!ArchiveUtilTestCase._make_tarballc                 C   s4   t  |¡}z| ¡ }| ¡  |W | ¡  S | ¡  w r   )ÚtarfileÚopenÚgetnamesÚsortÚclose)r5   r   ÚtarÚnamesr   r   r   rQ   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 )NrL   Úfile1ÚxxxÚfile2ÚsubÚfile3Úsub2)rM   r   r   rO   ÚmkdirÚ
write_file)r5   r7   rL   r   r   r   r3   {   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-   rL   r.   zarchive2.tar.gz)r^   z-cfúarchive2.tarrL   )r9   z-fz-9rl   r0   r/   T)r1   Údry_run)r3   rM   r   r   rO   ÚgetcwdÚchdirr   rP   r   rQ   rR   )	r5   r7   rV   rW   Úold_dirrX   Útarball2Útar_cmdÚ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-   rL   ú.zip)r@   rA   r3   r   r   rO   rM   r%   r   rP   ÚZipFileÚsortedÚnamelistÚ_zip_created_files)r5   ru   r7   rW   rX   Ú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 )Nru   Úzlibc                     s.   |  dd ¡ˆjkrˆ  | |f¡ ˆ| i |¤ŽS )NÚcompression)ÚgetÚ
ZIP_STOREDÚappend)ÚaÚkw©Úcalledru   Úzipfile_classr   r   Úfake_zipfileÕ   s   zCArchiveUtilTestCase.test_make_zipfile_no_zlib.<locals>.fake_zipfilerw   r-   rL   rv   Úwr~   )r@   rA   r   r   ru   rw   r3   r   r   rO   rM   r%   r   r€   rP   rx   ry   rz   )r5   r‡   r7   rW   rX   r{   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)Úgztarre   Úzipre   )rŠ   ÚbztarÚxztarÚztarr^   r‹   )r   rI   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-   re   )rM   r   r   rO   r@   ÚraisesÚ
ValueErrorr   )r5   r7   rW   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 filere   )Úroot_dir)r   rn   r   r   rM   Ú	ExceptionÚpop)r5   Ú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^   rL   zarchive.tar©
r3   r   r   rO   rM   r   rP   ÚbasenamerQ   rR   ©r5   Úbase_dirrW   Úresr   r   r   Útest_make_archive_tar  s   z)ArchiveUtilTestCase.test_make_archive_tarc                 C   r›   )Nr-   rŠ   rL   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Œ   rL   zarchive.tar.bz2©r@   rA   r3   r   r   rO   rM   r   rP   r   rQ   rR   rž   r   r   r   Útest_make_archive_bztar  ó   
z+ArchiveUtilTestCase.test_make_archive_bztarc                 C   r£   )NrD   r-   r   rL   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^   Ú	kjhkjhkjgÚoihohoh)r   r   Úgetgrgidr   Úgetpwuidr3   rM   r   r   rO   r   rP   )r5   rª   r©   rŸ   r–   rW   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   rL   )r1   r©   rª   )r3   r   r   rO   rM   rn   ro   r   r­   r   r®   r   rP   rY   rZ   Ú
getmembersÚuidÚgidr]   )	r5   r7   rW   rp   rª   r©   Úarchive_namer-   Úmemberr   r   r   Útest_tarfile_root_ownerF  s&   

ÿ
þz+ArchiveUtilTestCase.test_tarfile_root_ownerN)r-   ) Ú__name__Ú
__module__Ú__qualname__r@   ÚmarkÚusefixturesr8   r;   rB   rF   ÚskipifrJ   rK   r4   rQ   rz   rR   r3   rt   r|   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   rY   Ú	distutilsr   Údistutils.archive_utilr   r   r   r   r   Údistutils.spawnr   Údistutils.testsr	   Úos.pathr
   r   r@   Útest.supportr   Úunix_compatr   r   r   r   r   r   r#   r*   ÚTempdirManagerr+   r   r   r   r   Ú<module>   s(    