
    wg.                         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 Zd Z d Z! G d dejD                        Z#y)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                     t         j                  j                  ry	 | j                  t	        j
                                y# t        $ r Y yw xY w)zF
    Return True if the filename can be saved in the file system.
    TF)ospathsupports_unicode_filenamesencodesysgetfilesystemencodingUnicodeEncodeError)filenames    r/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/setuptools/_distutils/tests/test_archive_util.pycan_fs_encoder      sG     
ww))1134   s   #A 	AAc                 J    t        j                  t        j                  |       S N)	functoolsreduceoperatoreq)valuess    r   	all_equalr%   )   s    HKK00    c                  &    t        d | D              S )Nc              3   Z   K   | ]#  }t        j                  |      j                   % y wr   )pathlibPathdrive).0r   s     r   	<genexpr>zsame_drive.<locals>.<genexpr>.   s     @$W\\$'--@s   )+)r%   )pathss    r   
same_driver/   -   s    @%@@@r&   c                      e Zd Zej                  j                  d      dd       Zej                  j                  d      d        Zd Zd Z	ej                  j                  d      d        Zej                  j                  d      d	        Zd
 Zd Zg dZeD  cg c]  }|j!                  d       c}} Zd Zej                  j                  d      ej                  j                  d      d               Zej                  j                  d      d        Zd Zd Zd Zd Zd Zej                  j                  d      d        Zd Zd Zd Zej                  j                  d      eed                      Z yc c}} w )ArchiveUtilTestCase
needs_zlibc                 t    | j                         }| j                  ||d       | j                  ||dd        y )N.tar.gz.tarcompress_create_files_make_tarball)selfnametmpdirs      r   test_make_tarballz%ArchiveUtilTestCase.test_make_tarball2   s;     ##%64364$?r&   c                 N    | j                         }| j                  |ddd       y )Narchiver4   gzipr6   r8   r;   r=   s     r   test_make_tarball_gzipz*ArchiveUtilTestCase.test_make_tarball_gzip:   s'    ##%69i&Ir&   c                 x    t        j                  d       | j                         }| j                  |ddd       y )Nbz2r@   z.tar.bz2bzip2r6   pytestimportorskipr9   r:   rB   s     r   test_make_tarball_bzip2z+ArchiveUtilTestCase.test_make_tarball_bzip2?   s5    E"##%69j7Kr&   c                 x    t        j                  d       | j                         }| j                  |ddd       y )Nlzmar@   z.tar.xzxzr6   rG   rB   s     r   test_make_tarball_xzz(ArchiveUtilTestCase.test_make_tarball_xzD   s5    F###%69i$Gr&   u   not can_fs_encode('årchiv')c                 &    | j                  d       y)zV
        Mirror test_make_tarball, except filename contains latin characters.
        u   årchivNr>   r;   s    r   test_make_tarball_latin1z,ArchiveUtilTestCase.test_make_tarball_latin1I   s    
 	y)r&   u'   not can_fs_encode('のアーカイブ')c                 &    | j                  d       y)z{
        Mirror test_make_tarball, except filename contains extended
        characters outside the latin charset.
        u   のアーカイブNrP   rQ   s    r   test_make_tarball_extendedz.ArchiveUtilTestCase.test_make_tarball_extendedP   s     	34r&   c                    | j                         }t        ||      rt        j                  d       t        j
                  j                  ||      }t        j                  |      5  t        t        |      d   dfi | d d d        ||z   }t        j
                  j                  |      sJ | j                  |      | j                  k(  sJ y # 1 sw Y   PxY w)Nz)source and target should be on same driver   dist)mkdtempr/   rH   skipr   r   joinr*   r   r   exists_tarinfo_created_files)r;   r=   target_namesuffixkwargstmpdir2	base_nametarballs           r   r:   z!ArchiveUtilTestCase._make_tarballX   s    ,,.fg&KKCDGGLL+6	 YYv 	EI.q16DVD	E f$ww~~g&&&}}W%)<)<<<<	E 	Es   'CCc                     t        j                  |      }	 |j                         }|j                          ||j	                          S # |j	                          w xY wr   )tarfileopengetnamessortclose)r;   r   tarnamess       r   r[   zArchiveUtilTestCase._tarinfoh   s?    ll4 	LLNEJJLIIKCIIKs   !A	 	A)zdist/z
dist/file1z
dist/file2z	dist/sub/zdist/sub/file3z
dist/sub2//c                    | j                         }t        j                  j                  |d      }t        j                  |       | j                  |dgd       | j                  |dgd       t        j                  t        j                  j                  |d             | j                  |ddgd       t        j                  t        j                  j                  |d             |S )NrV   file1xxxfile2subfile3sub2)rW   r   r   rY   mkdir
write_file)r;   r=   rV   s      r   r9   z!ArchiveUtilTestCase._create_files{   s    ww||FF+
w/w/
dE*+ug.6
dF+,r&   z2not (shutil.which('tar') and shutil.which('gzip'))c                 @   | j                         }| j                         }t        j                  j	                  |d      }t        j
                         }t        j                  |       	 t        |d       t        j                  |       |dz   }t        j                  j                  |      sJ t        j                  j	                  |d      }g d}g d}t        j
                         }t        j                  |       	 t        |       t        |       t        j                  |       t        j                  j                  |      sJ | j                  |      | j                  k(  sJ | j                  |      | j                  k(  sJ t        j                  j	                  |d      }t        j
                         }t        j                  |       	 t        |dd        t        j                  |       |dz   }t        j                  j                  |      sJ t        j                  j	                  |d      }t        j
                         }t        j                  |       	 t        |dd d	
       t        j                  |       |dz   }t        j                  j                  |      sJ y # t        j                  |       w xY w# t        j                  |       w xY w# t        j                  |       w xY w# t        j                  |       w xY w)Nr@   rV   r4   zarchive2.tar.gz)ri   z-cfarchive2.tarrV   )rA   z-fz-9rv   r6   r5   T)r7   dry_run)r9   rW   r   r   rY   getcwdchdirr   rZ   r	   r[   r\   )	r;   r=   r`   ra   old_dirrb   tarball2tar_cmdgzip_cmds	            r   test_tarfile_vs_tarz'ArchiveUtilTestCase.test_tarfile_vs_tar   s@    ##%,,.GGLL)4	))+
	F+HHW i'ww~~g&&& 77<<(9:87))+
	'N(OHHWww~~h'''}}W%)<)<<<<}}X&$*=*==== GGLL)4	))+
	FT:HHWf$ww~~g&&& GGLL)4	))+
	FT4HHHWf$ww~~g&&&W HHW  HHW HHW HHWs0   +J8 K K, -L 8KK),LLc                     t        j                  d      }| j                         }t        j                  j                  | j                         d      }t	        j                  |      5  t        |d       d d d        |dz   }t        j                  j                  |      sJ |j                  |      5 }t        |j                               | j                  k(  sJ 	 d d d        y # 1 sw Y   sxY w# 1 sw Y   y xY w)Nzipfiler@   rV   .zip)rH   rI   r9   r   r   rY   rW   r*   r   rZ   ZipFilesortednamelist_zip_created_files)r;   r   r=   ra   rb   zfs         r   test_make_zipfilez%ArchiveUtilTestCase.test_make_zipfile   s    %%i0##%GGLL;	YYv 	,F+	, f$ww~~g&&&__W% 	D"++-(D,C,CCCC	D 	D	, 	,	D 	Ds   )C(5)C4(C14C=c                    t        j                  d      t        | t        j                  dd        g j
                  fd}t        | t        j                  d|       | j                         }t        j                  j                  | j                         d      }t        j                  |      5  t        |d       d d d        |dz   }|dfd	j                  ifgk(  sJ t        j                  j                  |      sJ j                  |      5 }t        |j!                               | j"                  k(  sJ 	 d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)
Nr   zlibc                  x    |j                  dd       j                  k(  rj                  | |f        | i |S )Ncompression)get
ZIP_STOREDappend)akwcalledr   zipfile_classs     r   fake_zipfilezCArchiveUtilTestCase.test_make_zipfile_no_zlib.<locals>.fake_zipfile   s<    vvmT*g.@.@@q"g& !*r**r&   r   r@   rV   r   wr   )rH   rI   r   r   r   r   r9   r   r   rY   rW   r*   r   r   rZ   r   r   r   )	r;   r   r=   ra   rb   r   r   r   r   s	         @@@r   test_make_zipfile_no_zlibz-ArchiveUtilTestCase.test_make_zipfile_no_zlib   s8   %%i0dL((&$7	+
 	dL(()\B ##%GGLL;	YYv 	,F+	, f$GS>M7;M;M+NOPPPPww~~g&&&__W% 	D"++-(D,C,CCCC	D 	D	, 	,	D 	Ds   9E)EEE%c                 H    t        g d      dk(  sJ t        g d      	 J y )N)gztarrn   ziprn   )r   bztarxztarztarri   r   )r   rQ   s    r   test_check_archive_formatsz.ArchiveUtilTestCase.test_check_archive_formats   s1    $%<=FFF!"ST	
r&   c                     | j                         }t        j                  j                  |d      }t	        j
                  t              5  t        |d       d d d        y # 1 sw Y   y xY w)Nr@   rn   )rW   r   r   rY   rH   raises
ValueErrorr   )r;   r=   ra   s      r   test_make_archivez%ArchiveUtilTestCase.test_make_archive   sL    GGLL3	]]:& 	+E*	+ 	+ 	+s   
A  A)c                 6   t        j                         }d }|g dft        d<   	 	 t        dd| j	                                t        j                         |k(  sJ 	 t        j                  d       y # t
        $ r Y ;w xY w# t        j                  d       w xY w)Nc                      t               r   )RuntimeError)argsr   s     r   _breaksz:ArchiveUtilTestCase.test_make_archive_cwd.<locals>._breaks   s
    . r&   zxxx filern   )root_dir)r   rx   r   r   rW   	Exceptionpop)r;   current_dirr   s      r   test_make_archive_cwdz)ArchiveUtilTestCase.test_make_archive_cwd   s    iik	! #*2z!:	'UEDLLNC 99;+---&	   &s)   A2 B 2	A>;B =A>>B Bc                 f   | j                         }t        j                  j                  | j	                         d      }t        |d|d      }t        j                  j                  |      sJ t        j                  j                  |      dk(  sJ | j                  |      | j                  k(  sJ y )Nr@   ri   rV   zarchive.tar
r9   r   r   rY   rW   r   rZ   basenamer[   r\   r;   base_dirra   ress       r   test_make_archive_tarz)ArchiveUtilTestCase.test_make_archive_tar  s    %%'GGLL;	9eXv>ww~~c"""ww$555}}S!T%8%8888r&   c                 f   | j                         }t        j                  j                  | j	                         d      }t        |d|d      }t        j                  j                  |      sJ t        j                  j                  |      dk(  sJ | j                  |      | j                  k(  sJ y )Nr@   r   rV   zarchive.tar.gzr   r   s       r   test_make_archive_gztarz+ArchiveUtilTestCase.test_make_archive_gztar  s    %%'GGLL;	9gx@ww~~c"""ww$(8888}}S!T%8%8888r&   c                    t        j                  d       | j                         }t        j                  j                  | j                         d      }t        |d|d      }t        j                  j                  |      sJ t        j                  j                  |      dk(  sJ | j                  |      | j                  k(  sJ y )NrE   r@   r   rV   zarchive.tar.bz2rH   rI   r9   r   r   rY   rW   r   rZ   r   r[   r\   r   s       r   test_make_archive_bztarz+ArchiveUtilTestCase.test_make_archive_bztar  s    E"%%'GGLL;	9gx@ww~~c"""ww$(9999}}S!T%8%8888r&   c                    t        j                  d       | j                         }t        j                  j                  | j                         d      }t        |d|d      }t        j                  j                  |      sJ t        j                  j                  |      dk(  sJ | j                  |      | j                  k(  sJ y )NrL   r@   r   rV   zarchive.tar.xzr   r   s       r   test_make_archive_xztarz+ArchiveUtilTestCase.test_make_archive_xztar  s    F#%%'GGLL;	9gx@ww~~c"""ww$(8888}}S!T%8%8888r&   c                    t         r1t        j                  d      d   }t        j                  d      d   }ndx}}| j                         }| j                         }t        j                  j                  | j                         d      }t        |d||||      }t        j                  j                  |      sJ t        |d||      }t        j                  j                  |      sJ t        |d||||      }t        j                  j                  |      sJ t        |d||dd      }t        j                  j                  |      sJ y )	Nr   rootr@   r   )ownergroupri   	kjhkjhkjgoihohoh)r   r   getgrgidr   getpwuidr9   rW   r   r   rY   r   rZ   )r;   r   r   r   r   ra   r   s          r   test_make_archive_owner_groupz1ArchiveUtilTestCase.test_make_archive_owner_group(  s    LLOA&ELLOA&E""EE%%'<<>GGLL;	uhU
 ww~~c"""9eXx@ww~~c"""uhU
 ww~~c"""uh9
 ww~~c"""r&   c                    | j                         }t        j                  j                  | j	                         d      }t        j
                         }t        j                  |       t        j                  d      d   }t        j                  d      d   }	 t        |dd ||      }t        j                  |       t        j                  j                  |      sJ t        j                  |      }	 |j                         D ]$  }|j                   dk(  sJ |j"                  dk(  r$J  	 |j%                          y # t        j                  |       w xY w# |j%                          w xY w)Nr@   r   rV   )r7   r   r   )r9   r   r   rY   rW   rx   ry   r   r   r   r   r   rZ   rd   re   
getmembersuidgidrh   )	r;   r=   ra   rz   r   r   archive_namer@   members	            r   test_tarfile_root_ownerz+ArchiveUtilTestCase.test_tarfile_root_ownerF  s    ##%GGLL;	))+
Q"Q"	'6DUL HHW ww~~l+++ ,,|,	!,,. 'zzQ&zzQ&' MMO HHW MMOs   D> 53E )E >EE*N)r@   )!__name__
__module____qualname__rH   markusefixturesr>   rC   rJ   rN   skipifrR   rT   r:   r[   r   rstripr\   r9   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   )r,   ps   00r   r1   r1   1   s   [[\*@ +@ [[\*J +JL
H
 [[67* 8* [[AB5 C5=  .@@ahhsm@N
 [[\*[[LM4' N +4'l [[\*D +DD4
+' 9 [[\*9 +999#< [[\*   +a As   Fr1   )$__doc__r    r"   r   r)   r   rd   	distutilsr   distutils.archive_utilr   r   r   r   r   distutils.spawnr	   distutils.testsr
   os.pathr   r   rH   test.supportr   unix_compatr   r   r   r   r   r   r%   r/   TempdirManagerr1    r&   r   <module>r      se    '   	  
  "  " #     P P
1Ap'00 pr&   