
    דiD                        S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKJ	r	  SSK
Jr   SS jrS	 r1 S
krSS.   SS jjrg)    )annotationsN)chain)Path)package_streaming   )TemporaryDirectoryc                4   SSK Jn  [        5        nUc   e[        R                  R                  U 5      (       a  U nOGU" X-   [        R                  R                  US5      S9  [        R                  R                  US5      n[        R                  R                  US5      nU" XS9  [        5       n[        5       n[        R                  " U5       GH"  u  pnU GH  n[        R                  R                  X5      n[        R                  R                  X5      n[        R                  R                  Xn5      n[        R                  R                  U5      (       a  M  [        R                  R                  U5      (       d  UR                  U5        M  [        R                  " U5      R                  [        R                  " U5      R                  :w  d  GM  UR                  U5        GM     GM%     S S S 5        U WW4$ ! , (       d  f       N= f)Nr   )extractsrc)dest_dir	converted)apir
   r   ospathisdirjoinsetwalkrelpathislinkisfileaddstatst_size)src_file_or_foldersubjectreference_extr
   tmpdir
src_folderconverted_foldermissing_filesmismatch_sizerootdirsfilesfabsfilerpdestpaths                   ?lib/python3.13/site-packages/conda_package_handling/validate.pyvalidate_converted_files_matchr+      so    		!!!77==+,,+J&6fV[A\]fe4J77<<<3!#!4D'',,t/WW__W977<<(8=ww~~h//77>>(33%))"-)11RWWX5F5N5NN%))"-  "5 
. }m;;/ 
	s   EH	%A7H	!H		
Hc                 ,    [         R                  " 5       $ )N)hashlibblake2b     r*   hash_fnr1   -   s    ??r0   >   giduidgnamemtimeunamechksumT)strictc                 ^	 0 n0 nU(       a  S1O[         m	SU	4S jjnU" U 5      nU" U5      n/ n/ nX4:w  aL  [        X45       H=  nX;   a  X;   d  UR                  U5        M   X8   XH   :w  d  M,  UR                  U5        M?     XU4$ )ad  
Check that two .tar.bz2 or .conda files (either of src_file and
reference_file can be either format) match exactly, down to the timestamps
etc.

Does not check outside of the info- and pkg- components of a .conda.
(conda's metadata.json, which gives the version "2" of the format)

If strict = True, also check for matching uid, gid, mtime, uname, gname.
r7   c           	     ~  >^ 0 n[         R                  " U 5      R                  S5      (       a  SS/OS/n[        U S5       nU H  n[        R
                  " XU5       H  u  pVUR                  5       R                  5        VVs0 s H  u  pxUT;  d  M  Xx_M     n	nnUR                  5       (       a[  [        5       n
UR                  U5      mTc   e[        U4S jS5       H  nU
R                  U5        M     U
R                  5       U	S'   XU	S   '   M     M     S S S 5        U$ s  snnf ! , (       d  f       U$ = f)	Nz.condainfopkgrbc                 &   > T R                  S5      $ )Ni   )read)fds   r*   <lambda>Ovalidate_converted_files_match_streaming.<locals>.get_fileset.<locals>.<lambda>Z   s    "'''2Br0   r0   digestname)r   fspathendswithopenr   stream_conda_componentget_infoitemsr   r1   extractfileiterupdate	hexdigest)filenamefileset
components
conda_file	componenttarmemberkvr;   hasherblockr@   ignore_fieldss               @r*   get_fileset=validate_converted_files_match_streaming.<locals>.get_filesetL   s#   (*		((;(D(DX(N(Nfe_UZT[
(D!Z'	#4#K#K)$KC .4__->-D-D-Fa-FTQ!S`J`DAD-FDa}}!( __V4!~-~%)*BC%HE"MM%0 &I *0)9)9);X,0DL)$ ( "$  b "!$ s&   AD-D'D'BD-'D--
D<)rO   
str | Path)IGNORE_FIELDSr   append)
r   	referencer8   
source_setreference_setr[   missing
mismatchedfilerZ   s
            @r*   (validate_converted_files_match_streamingrf   ;   s     JM"(XJmM. S!J	*MGJ"*4D&4+@t$!]%88!!$'	 5 ##r0   ) )r   r]   r`   r]   )
__future__r   r-   r   	itertoolsr   pathlibr   conda_package_streamingr   utilsr   r+   r1   r^   rf   r/   r0   r*   <module>rm      sK    "  	   5 % 02<@ 7;5$	5$ *5$r0   