
    dD                    x    d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	 ddl
mZ 	 dd	Zd
 Zh dZddddZdS )    )annotationsN)chain)Path)package_streaming   )TemporaryDirectory c                "   ddl m} t                      5 }|J t          j                            |           r| }nN || |z   t          j                            |d                     t          j                            |d          }t          j                            |d          } |||           t                      }t                      }t          j        |          D ]\  }	}
}|D ] }t          j                            |	|          }t          j        	                    ||          }t          j                            ||          }t          j        
                    |          s~t          j                            |          s|                    |           t          j        |          j        t          j        |          j        k    r|                    |           	 d d d            n# 1 swxY w Y   | ||fS )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.11/site-packages/conda_package_handling/validate.pyvalidate_converted_files_matchr,      s"    			 .!!!7==+,, 	5+JJG&6fV[A\A\]]]]fe44J7<<<<"23333!#!4!4 		. 		.D$ . .',,tQ//W__Wj997<<(8"==w~~h// .7>>(33 .%))"----))1RWX5F5F5NNN%))"---.		.. . . . . . . . . . . . . . .. }m;;s   GHHHc                 (    t          j                    S )N)hashlibblake2b     r+   hash_fnr2   -   s    ?r1   >   giduidgnamemtimeunamechksumT)strictr   
str | Path	referencec               *  	 i }i }|rdhnt           	d	fd} ||           } ||          }g }g }||k    rXt          ||          D ]G}||v r||v s|                    |            ||         ||         k    r|                    |           H| ||fS )a  
    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.
    r8   filenamer:   c                r  
 i }t          j        |                               d          rddgndg}t          | d          5 }|D ]}t	          j        | ||          D ]\  }}fd|                                                                D             }|                                rit                      }|
                    |          

J t          
fdd          D ]}	|                    |	           |                                |d<   |||d	         <   	 d d d            n# 1 swxY w Y   |S )
Nz.condainfopkgrbc                $    i | ]\  }}|v	||S r0   r0   ).0kvignore_fieldss      r+   
<dictcomp>zQvalidate_converted_files_match_streaming.<locals>.get_fileset.<locals>.<dictcomp>T   s*    aaaTQ!S`J`J`AqJ`J`J`r1   c                 .                          d          S )Ni   )read)fds   r+   <lambda>zOvalidate_converted_files_match_streaming.<locals>.get_fileset.<locals>.<lambda>Z   s    "'''2B2B r1   r1   digestname)r   fspathendswithopenr   stream_conda_componentget_infoitemsr   r2   extractfileiterupdate	hexdigest)r=   fileset
components
conda_file	componenttarmemberr?   hasherblockrJ   rF   s             @r+   get_filesetz=validate_converted_files_match_streaming.<locals>.get_filesetL   s   (*	((;(;(D(DX(N(N[fe__UZT[
(D!! 	1Z' 1 1	#4#Kj)$ $ 1 1KC baaaV__->->-D-D-F-FaaaD}} <!( __V44!~~~%)*B*B*B*BC%H%H 1 1E"MM%0000)/)9)9););X,0GDL))11	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1$ s   CD,,D03D0)r=   r:   )IGNORE_FIELDSr   append)
r   r;   r9   
source_setreference_setr`   missing
mismatchedfilerF   s
            @r+   (validate_converted_files_match_streamingrh   ;   s     JM"(;XJJmM     . S!!JK	**MGJ]""*m44 	( 	(DJ&&4=+@+@t$$$$D!]4%888!!$'''##r1   )r	   )r   r:   r;   r:   )
__future__r   r.   r   	itertoolsr   pathlibr   conda_package_streamingr   utilsr   r,   r2   ra   rh   r0   r1   r+   <module>rn      s    " " " " " "  				             5 5 5 5 5 5 % % % % % % 02< < < <@     7;5$ 5$ 5$ 5$ 5$ 5$ 5$ 5$r1   