
    ;e@8                        d 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Zddlm	Z	 ddl
mZmZmZmZmZ ddlmZmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ 	 ddlZddlZdZn# e$ r dZY nw xY w	 ddl Z dZ!n# e$ r  ed          Z!Y nw xY w	 ddl"Z"dZ#n# e$ r dZ#Y nw xY w	 ddl$Z$n# e$ r dZ$Y nw xY w	 ddl%Z%n# e$ r dZ%Y nw xY wd Z& G d dej'        ej(        ej)                  Z*d Z+e,dk    r e e+                       dS dS )z!Tests for distutils.archive_util.    N)
splitdrive)archive_util)check_archive_formatsmake_tarballmake_zipfilemake_archiveARCHIVE_FORMATS)find_executablespawn)support)run_unittestpatch)
change_cwd)check_warningsTFzipc                     t           j        j        rdS 	 |                     t	          j                               n# t          $ r Y dS w xY wdS )zF
    Return True if the filename can be saved in the file system.
    TF)ospathsupports_unicode_filenamesencodesysgetfilesystemencodingUnicodeEncodeError)filenames    8/usr/lib/python3.11/distutils/tests/test_archive_util.pycan_fs_encoder   1   s`     
w) t1334444   uu4s   &< 
A
	A
c                      e Zd Z ej        ed          d+d            Z ej        ed          d             Z ej        ed          d             Z	 ej        e
d          d             Z ej         ed	          d
          d             Z ej         ed          d
          d             Zd Zd Zg dZd eD             Zd Z ej         ed          o ed          oed          d             Z ej         ed          d          d             Z ej        eoed          d             Z ej        ed          d             Zd Zd Zd  Zd! Z ej        ed          d"             Z ej        ed          d#             Z ej        e
d$          d%             Z d& Z! ej        ed'           ej        e"d(          d)                         Z#d*S ),ArchiveUtilTestCasezNeed zlib support to runarchivec                     |                                  }|                     ||d           |                     ||dd            d S )N.tar.gz.tarcompress_create_files_make_tarball)selfnametmpdirs      r   test_make_tarballz%ArchiveUtilTestCase.test_make_tarballB   sP     ##%%6433364$?????    c                 `    |                                  }|                     |ddd           d S )Nr   r!   gzipr#   r%   r(   r*   s     r   test_make_tarball_gzipz*ArchiveUtilTestCase.test_make_tarball_gzipJ   s6    ##%%69i&IIIIIr,   zNeed bz2 support to runc                 `    |                                  }|                     |ddd           d S )Nr   z.tar.bz2bzip2r#   r%   r/   s     r   test_make_tarball_bzip2z+ArchiveUtilTestCase.test_make_tarball_bzip2O   s6    ##%%69j7KKKKKr,   zNeed lzma support to runc                 `    |                                  }|                     |ddd           d S )Nr   z.tar.xzxzr#   r%   r/   s     r   test_make_tarball_xzz(ArchiveUtilTestCase.test_make_tarball_xzT   s6    ##%%69i$GGGGGr,      årchivz'File system cannot handle this filenamec                 0    |                      d           dS )zV
        Mirror test_make_tarball, except filename contains latin characters.
        r7   Nr+   r(   s    r   test_make_tarball_latin1z,ArchiveUtilTestCase.test_make_tarball_latin1Y   s     	y)))))r,      のアーカイブc                 0    |                      d           dS )z{
        Mirror test_make_tarball, except filename contains extended
        characters outside the latin charset.
        r<   Nr9   r:   s    r   test_make_tarball_extendedz.ArchiveUtilTestCase.test_make_tarball_extendeda   s     	344444r,   c                 F   |                                  }t          j        t          |          d         t          |          d         k    d           t          j                            ||          }t          |          5  t          t          |          d         dfi | d d d            n# 1 swxY w Y   ||z   }| 	                    t          j        
                    |                     |                     |                     |          | j                   d S )Nr   z)source and target should be on same drive   dist)mkdtempunittest
skipUnlessr   r   r   joinr   r   
assertTrueexistsassertEqual_tarinfo_created_files)r(   r*   target_namesuffixkwargstmpdir2	base_nametarballs           r   r'   z!ArchiveUtilTestCase._make_tarballj   sT   ,,..Jv..q1Z5H5H5KKG	I 	I 	I GLL+66	  	E 	EI..q16DDVDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E f$w//000w//1DEEEEEs   "B11B58B5c                     t          j        |          }	 |                                }|                                 ||                                 S # |                                 w xY wN)tarfileopengetnamessortclose)r(   r   tarnamess       r   rI   zArchiveUtilTestCase._tarinfoz   sT    l4  	LLNNEJJLLLIIKKKKCIIKKKKs   )A A*)zdist/z
dist/file1z
dist/file2z	dist/sub/zdist/sub/file3z
dist/sub2/c                 8    g | ]}|                     d           S )/)rstrip).0ps     r   
<listcomp>zArchiveUtilTestCase.<listcomp>   s"    @@@ahhsmm@@@r,   c                    |                                  }t          j                            |d          }t          j        |           |                     |dgd           |                     |dgd           t          j        t          j                            |d                     |                     |ddgd           t          j        t          j                            |d                     |S )NrA   file1xxxfile2subfile3sub2)rB   r   r   rE   mkdir
write_file)r(   r*   rA   s      r   r&   z!ArchiveUtilTestCase._create_files   s    w||FF++
w///w///
dE**+++ug.666
dF++,,,r,   rX   r.   z*Need the tar, gzip and zlib command to runc                 "   |                                  }|                                 }t          j                            |d          }t          j                    }t          j        |           	 t          |d           t          j        |           n# t          j        |           w xY w|dz   }|                     t          j        	                    |                     t          j                            |d          }g d}g d}t          j                    }t          j        |           	 t          |           t          |           t          j        |           n# t          j        |           w xY w|                     t          j        	                    |                     |                     |                     |          | j                   |                     |                     |          | j                   t          j                            |d          }t          j                    }t          j        |           	 t          |dd            t          j        |           n# t          j        |           w xY w|dz   }|                     t          j        	                    |                     t          j                            |d          }t          j                    }t          j        |           	 t          |dd d	
           t          j        |           n# t          j        |           w xY w|dz   }|                     t          j        	                    |                     d S )Nr   rA   r!   zarchive2.tar.gz)rX   z-cfarchive2.tarrA   )r.   z-fz-9rj   r#   r"   Tr$   dry_run)r&   rB   r   r   rE   getcwdchdirr   rF   rG   r   rH   rI   rJ   )	r(   r*   rN   rO   old_dirrP   tarball2tar_cmdgzip_cmds	            r   test_tarfile_vs_tarz'ArchiveUtilTestCase.test_tarfile_vs_tar   s    $$&&,,..GLL)44	)++
	F+++HWBHW i'w//000 7<<(9::888777)++
	'NNN(OOOHWBHWx00111w//1DEEEx00$2EFFF GLL)44	)++
	FT::::HWBHWf$w//000 GLL)44	)++
	FT4HHHHHWBHWf$w//00000s0   1B B,6E) )E?I? ?JL? ?Mr$   z The compress program is requiredc                    |                                  }t          j                            |                                 d          }t          j                    }t          j        |           	 t                      5 }t          j	        d           t          |dd           d d d            n# 1 swxY w Y   t          j        |           n# t          j        |           w xY w|dz   }|                     t          j                            |                     |                     t          |j                  d           t          j        |           t          j                    }t          j        |           	 t                      5 }t          j	        d           t          |ddd	           d d d            n# 1 swxY w Y   t          j        |           n# t          j        |           w xY w|                     t          j                            |                     |                     t          |j                  d           d S )
Nr   alwaysrA   r$   r#   z.tar.Zr@   Trk   )r&   r   r   rE   rB   rm   rn   r   warningssimplefilterr   rF   rG   rH   lenremoveassertFalse)r(   r*   rO   ro   wrP   s         r   test_compress_deprecatedz,ArchiveUtilTestCase.test_compress_deprecated   s    $$&&GLL;;	 )++
	!! EQ%h///YDDDDE E E E E E E E E E E E E E E HWBHWh&w//000QZ!,,, 		')++
	!! +Q%h///Y%)+ + + ++ + + + + + + + + + + + + + +
 HWBHW00111QZ!,,,,,s`   /C ='B0$C 0B44C 7B48C C&G& (G:G& G

G& G
G& &G<z Need zip and zlib support to runc                 <   |                                  }t          j                            |                                 d          }t          |          5  t          |d           d d d            n# 1 swxY w Y   |dz   }|                     t          j                            |                     t          j
        |          5 }|                     t          |                                          | j                   d d d            d S # 1 swxY w Y   d S )Nr   rA   .zip)r&   r   r   rE   rB   r   r   rF   rG   zipfileZipFilerH   sortednamelist_zip_created_files)r(   r*   rO   rP   zfs        r   test_make_zipfilez%ArchiveUtilTestCase.test_make_zipfile   s~    ##%%GLL;;	 	, 	,F+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, f$w//000_W%% 	MVBKKMM22D4KLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	Ms$   A33A7:A7	;DDDzNeed zip support to runc                 &   t          | t          j        dd            g t          j        fd}t          | t          j        d|           |                                 }t
          j                            |                                 d          }t          |          5  t          |d           d d d            n# 1 swxY w Y   |dz   }|                     |dfdt          j        ifg           |                     t
          j                            |                     t          j        |          5 }|                     t          |                                          | j                   d d d            d S # 1 swxY w Y   d S )	Nzlibc                      |                     dd           t          j        k    r                    | |f            | i |S )Ncompression)getr   
ZIP_STOREDappend)akwcalledzipfile_classs     r   fake_zipfilezCArchiveUtilTestCase.test_make_zipfile_no_zlib.<locals>.fake_zipfile  sJ    vvmT**g.@@@q"g&&& =!*r***r,   r   r   rA   r~   r{   r   )r   r   r   r   r&   r   r   rE   rB   r   r   rH   r   rF   rG   r   r   r   )r(   r   r*   rO   rP   r   r   r   s         @@r   test_make_zipfile_no_zlibz-ArchiveUtilTestCase.test_make_zipfile_no_zlib   s   dL(&$777	+ 	+ 	+ 	+ 	+ 	+
 	dL()\BBB ##%%GLL;;	 	, 	,F+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, f$#S>M7;M+NOP	R 	R 	Rw//000_W%% 	MVBKKMM22D4KLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	Ms$   $CCC>;FF
F
c                     |                      t          g d          d           |                     t          g d                     d S )N)gztarrb   r   rb   )r   bztarxztarztarrX   r   )rH   r   assertIsNoner:   s    r   test_check_archive_formatsz.ArchiveUtilTestCase.test_check_archive_formats  sw    ./F/F/FGG	  	  	 / 1G 1G 1G H H 	I 	I 	I 	I 	Ir,   c                     |                                  }t          j                            |d          }|                     t
          t          |d           d S )Nr   rb   )rB   r   r   rE   assertRaises
ValueErrorr   )r(   r*   rO   s      r   test_make_archivez%ArchiveUtilTestCase.test_make_archive  sD    GLL33	*lIuEEEEEr,   c                     t          j                    }d }|g dft          d<   	 	 t          dd|                                            n#  Y nxY w|                     t          j                    |           t          d= d S # t          d= w xY w)Nc                      t                      rR   )RuntimeError)argsr   s     r   _breaksz:ArchiveUtilTestCase.test_make_archive_cwd.<locals>._breaks#  s    .. r,   zxxx filerb   )root_dir)r   rm   r	   r   rB   rH   )r(   current_dirr   s      r   test_make_archive_cwdz)ArchiveUtilTestCase.test_make_archive_cwd!  s    ikk	! 	! 	!")2z!:	'UEDLLNNCCCCCRY[[+666&&&&&&&&s   $A 
B A,B 
Bc                    |                                  }t          j                            |                                 d          }t          |d|d          }|                     t          j                            |                     |                     t          j        	                    |          d           |                     | 
                    |          | j                   d S )Nr   rX   rA   zarchive.tarr&   r   r   rE   rB   r   rF   rG   rH   basenamerI   rJ   r(   base_dirrO   ress       r   test_make_archive_tarz)ArchiveUtilTestCase.test_make_archive_tar/  s    &&((GLL)<<	9eXv>>s++,,,))#..>>>s++T-@AAAAAr,   c                    |                                  }t          j                            |                                 d          }t          |d|d          }|                     t          j                            |                     |                     t          j        	                    |          d           |                     | 
                    |          | j                   d S )Nr   r   rA   zarchive.tar.gzr   r   s       r   test_make_archive_gztarz+ArchiveUtilTestCase.test_make_archive_gztar7      &&((GLL)<<	9gx@@s++,,,))#..0@AAAs++T-@AAAAAr,   c                    |                                  }t          j                            |                                 d          }t          |d|d          }|                     t          j                            |                     |                     t          j        	                    |          d           |                     | 
                    |          | j                   d S )Nr   r   rA   zarchive.tar.bz2r   r   s       r   test_make_archive_bztarz+ArchiveUtilTestCase.test_make_archive_bztar@  s    &&((GLL)<<	9gx@@s++,,,))#..0ABBBs++T-@AAAAAr,   zNeed xz support to runc                    |                                  }t          j                            |                                 d          }t          |d|d          }|                     t          j                            |                     |                     t          j        	                    |          d           |                     | 
                    |          | j                   d S )Nr   r   rA   zarchive.tar.xzr   r   s       r   test_make_archive_xztarz+ArchiveUtilTestCase.test_make_archive_xztarI  r   r,   c                 l   t           r5t          j        d          d         }t          j        d          d         }ndx}}|                                 }|                                 }t          j        	                    |                                 d          }t          |d||||          }|                     t          j                            |                     t          |d||          }|                     t          j                            |                     t          |d||||          }|                     t          j                            |                     t          |d||dd          }|                     t          j                            |                     d S )	Nr   rootr   r   )ownergrouprX   	kjhkjhkjgoihohoh)UID_GID_SUPPORTgrpgetgrgidpwdgetpwuidr&   rB   r   r   rE   r   rF   rG   )r(   r   r   r   r   rO   r   s          r   test_make_archive_owner_groupz1ArchiveUtilTestCase.test_make_archive_owner_groupR  ss     	#LOOA&ELOOA&EE""EE&&((<<>>GLL)<<	9eXxu!&( ( (s++,,,9eXx@@s++,,,9eXx!&e5 5 5s++,,,9eXx!,I? ? ?s++,,,,,r,   zRequires zlibzRequires grp and pwd supportc                 R   |                                  }t          j                            |                                 d          }t          j                    }t          j        |           t          j        d          d         }t          j
        d          d         }	 t          |dd ||          }t          j        |           n# t          j        |           w xY w|                     t          j                            |                     t          j        |          }	 |                                D ]8}|                     |j        d           |                     |j        d           9	 |                                 d S # |                                 w xY w)Nr   r   rA   )r$   r   r   )r&   r   r   rE   rB   rm   rn   r   r   r   r   r   rF   rG   rS   rT   
getmembersrH   uidgidrW   )	r(   r*   rO   ro   r   r   archive_namer   members	            r   test_tarfile_root_ownerz+ArchiveUtilTestCase.test_tarfile_root_ownerm  ss    $$&&GLL;;	)++
Q"Q"	'	6D.35B B BL HWBHW 	|44555 ,|,,	!,,.. 0 0  Q///  Q////0 MMOOOOOGMMOOOOs   #C C",AF F&N)r   )$__name__
__module____qualname__rC   rD   ZLIB_SUPPORTr+   r0   bz2r3   lzmar6   r   r;   r>   r'   rI   r   rJ   r&   r
   rs   r|   ZIP_SUPPORTr   r   r   r   r   r   r   r   r   r   r   r    r,   r   r   r   >   s        X'ABB@ @ @ CB@ X'ABBJ J CBJ X788L L 98L X9::H H ;:H Xy1113 3* *3 3* X';<<13 35 53 35F F F   G G G@@-?@@@N
 
 
 X// *OOF4K4K *)EG G41 41G G41l X44;= =- -= =-> X5;= =M M= =M X&?@@M M A@M2I I IF F F
' ' 'B B B X'ABBB B CBB X788B B 98B X788B B 98B- - -6 X77X*HII  JI 87  r,   r   c                  X    t          j                                        t                    S rR   )rC   
TestLoaderloadTestsFromTestCaser   r   r,   r   
test_suiter     s       667JKKKr,   __main__)-__doc__rC   r   r   rS   os.pathr   rv   	distutilsr   distutils.archive_utilr   r   r   r   r	   distutils.spawnr
   r   distutils.testsr   test.supportr   r   test.support.os_helperr   test.support.warnings_helperr   r   r   r   ImportErrorr   r   r   r   r   r   r   TempdirManagerLoggingSilencerTestCaser   r   r   r   r,   r   <module>r      s   ' '  				 



         " " " " " "5 5 5 5 5 5 5 5 5 5 5 5 5 5 3 2 2 2 2 2 2 2 # # # # # # , , , , , , , , - - - - - - 7 7 7 7 7 7JJJJJJOO   OOO)NNNKK ) ) )!/%((KKK)KKKLL   LLLJJJJ   
CCCKKKK   DDD
 
 
H H H H H'0!1"+H H HT
L L L zL sZ   
A A)(A)-A4 4BBB BB B% %B/.B/3B8 8CC