Ë
    ú}àiJ   ã                   ó(  — 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 er ej                  d«      n ej                  d«      Z	 ej                  d«      Z
d	ed
efd„Zdd„Zdd„Zd„ Z	 	 dd„Zd„ Zd„ Zd„ Zdd„Z G d„ d«      Z G d„ d«      Zy)é    Né   )ÚIS_WINDOWS_PLATFORMé   )Úfnmatchz/|\\ú/zy^[a-z0-9]+((\.|_|__|-+)[a-z0-9]+)*(?::[0-9]+)?(/[a-z0-9]+((\.|_|__|-+)[a-z0-9]+)*)*(:[a-zA-Z0-9_][a-zA-Z0-9._-]{0,127})?$ÚtagÚreturnc                 ó>   — t        t        j                  | «      «      S ©N)ÚboolÚ_TAGÚmatch)r   s    úY/home/factor_ks/STREAMA2026/tests/venv/lib/python3.12/site-packages/docker/utils/build.pyÚ	match_tagr      s   € Ü”—
‘
˜3“Ó Ð ó    c           
      óü   — t         j                  j                  | «      }|xs g }|xs d}g }|d   �#dj                  |xs dg|d   gz   «      }d|f|g}t	        t        t        |||d   ¬«      «      ||||¬«      S )N)NNr   ú
z.dockerignorer   )Ú
dockerfile)ÚfilesÚrootÚfileobjÚgzipÚextra_files)ÚosÚpathÚabspathÚjoinÚcreate_archiveÚsortedÚexclude_paths)r   Úexcluder   r   r   r   r   Údockerignore_contentss           r   Útarr#      s�   € Ü�7‰7�?‰?˜4Ó €DØŠm˜€GØÒ+˜|€JØ€KØ�!�}Ð Ø $§	¡	ØÒ)˜Ð)¨j¸©m¨_Ñ<ó!
Ðð Ð3Ð4Øð
ˆô Ü”] 4¨¸ZÈ¹]ÔKÓLØ˜7¨¸;ôð r   c                 ó|   — |€d}|j                  d|› �«       t        |«      }t        |j                  | «      «      S )a	  
    Given a root directory path and a list of .dockerignore patterns, return
    an iterator of all paths (both regular files and directories) in the root
    directory that do *not* match any of the patterns.

    All paths returned are relative to the root.
    Ú
Dockerfileú!)ÚappendÚPatternMatcherÚsetÚwalk)r   Úpatternsr   Úpms       r   r    r    )   s?   € ð ÐØ!ˆ
à‡O�O�a˜
�|Ð$Ô%Ü	˜Ó	!€BÜˆr�w‰w�t‹}ÓÐr   c           	      óü   — g }t        j                  | «      D ]a  \  }}}||z   D ]S  }t         j                  j                  ||«      }|j	                  |j                  | dd«      j                  d«      «       ŒU Œc |S )NÚ r   r   )r   r*   r   r   r'   ÚreplaceÚlstrip)r   r   ÚdirnameÚdirnamesÚfnamesÚfilenameÚlongpaths          r   Úbuild_file_listr6   :   s}   € Ø€EÜ%'§W¡W¨T£]ò Ñ!ˆ�˜6Ø Ñ)ò 	ˆHÜ—w‘w—|‘| G¨XÓ6ˆHØ�L‰LØ× Ñ   r¨1Ó-×4Ñ4°SÓ9õñ	ðð €Lr   c                 óä  — |xs g }|st        j                  «       }t        j                  |rdnd|¬«      }|€t	        | «      }|D �ch c]  }|d   ’Œ	 }}|D ]Ý  }||v rŒt
        j                  j                  | |«      }	|j                  |	|¬«      }
|
€Œ>|
j                  dk  s|
j                  dkD  rt        |
j                  «      |
_	        t        r|
j                  dz  dz  |
_        |
j                  «       r)	 t        |	d	«      5 }|j                  |
|«       d d d «       ŒÌ|j                  |
d «       Œß |D ]`  \  }}t        j                   |«      }|j#                  d«      }t%        |«      |_        |j                  |t)        j*                  |«      «       Œb |j-                  «        |j/                  d«       |S c c}w # 1 sw Y   Œ«xY w# t        $ r}t        d
|	› �«      |‚d }~ww xY w)Nzw:gzÚw©Úmoder   r   )Úarcnamel   ÿÿ ií  éI   ÚrbzCan not read file in context: zutf-8)ÚtempfileÚNamedTemporaryFileÚtarfileÚopenr6   r   r   r   Ú
gettarinfoÚmtimeÚintr   r:   ÚisfileÚaddfileÚOSErrorÚTarInfoÚencodeÚlenÚsizeÚioÚBytesIOÚcloseÚseek)r   r   r   r   r   ÚtÚeÚextra_namesr   Ú	full_pathÚiÚfÚoeÚnameÚcontentsÚinfoÚcontents_encodeds                    r   r   r   F   sÐ  € àÒ# €KÙÜ×-Ñ-Ó/ˆÜ�‰¡D™&¨c¸7ÔC€AØ€}Ü Ó%ˆØ!,Ö-˜A�1�Q“4Ð-€KÐ-Øò ˆØ�;ÑàÜ—G‘G—L‘L  tÓ,ˆ	à�L‰L˜¨DˆLÓ1ˆØˆ9ð ð �7‰7�QŠ;˜!Ÿ'™' IÒ-Ü˜!Ÿ'™'“lˆAŒGåð —V‘V˜e‘^ eÑ+ˆAŒFà�8‰8Œ:ðÜ˜) TÓ*ð $¨aØ—I‘I˜a ”O÷$øð �I‰I�a˜Õð?ðB &ò 6‰ˆˆhÜ�‰˜tÓ$ˆØ#Ÿ?™?¨7Ó3ÐÜÐ(Ó)ˆŒ	Ø	�	‰	�$œŸ
™
Ð#3Ó4Õ5ð	6ð ‡G�G„IØ‡L�L�„OØ€NùòU .÷0$ð $ûäò ÜØ4°Y°KÐ@óàðûðús6   Á	GÃ=GÄ	GÄGÇG	ÇGÇ	G/ÇG*Ç*G/c                 ó  — t        j                  «       }t        j                  d|¬«      }t	        | t
        j                  «      r t        j                  d«      }t        d«      ‚t	        | t
        j                  «      rEt        j                  d«      }t        | j                  «       «      |_        | j                  d«       n|j                  | d¬«      }|j                  || «       |j!                  «        |j                  d«       |S )Nr8   r9   r%   zCPlease use io.BytesIO to create in-memory Dockerfiles with Python 3r   )r   r;   )r>   r?   r@   rA   Ú
isinstancerL   ÚStringIOrH   Ú	TypeErrorrM   rJ   ÚgetvaluerK   rO   rB   rF   rN   )r   rU   rP   Údfinfos       r   Úmkbuildcontextra   {   sÄ   € Ü×#Ñ#Ó%€AÜ�‰˜# qÔ)€AÜ�*œbŸk™kÔ*Ü—‘ Ó.ˆÜð 4ó 5ð 	5ä	�J¤§
¡
Ô	+Ü—‘ Ó.ˆÜ˜*×-Ñ-Ó/Ó0ˆŒØ�‰˜Õà—‘ j¸,�ÓGˆØ‡I�Iˆf�jÔ!Ø‡G�G„IØ‡F�Fˆ1„IØ€Hr   c                 ón   — t        j                  t        | «      D �cg c]  }|sŒ|dk7  sŒ|‘Œ c}S c c}w )Nú.)ÚreÚsplitÚ_SEP)ÚpÚpts     r   Ú
split_pathri   Ž   s)   € ÜŸ™¤$¨Ó*Ö?�2ªb°R¸3³YŠBÒ?Ð?ùÒ?s   �2¥2«2c                 óF   — t         rdj                  t        | «      «      S | S )Nr   )r   r   ri   ©rg   s    r   Únormalize_slashesrl   ’   s   € ÝØ�x‰xœ
 1›Ó&Ð&Ø€Hr   c                 ó:   — t        |«      }|j                  | «      S r   )r(   r*   )r   r+   Údefaultr,   s       r   r*   r*   ˜   s   € Ü	˜Ó	!€BØ�7‰7�4‹=Ðr   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)r(   c                 óº   — t        t        d„ |D �cg c]  }t        |«      ‘Œ c}«      «      | _        | j                  j	                  t        d«      «       y c c}w )Nc                 ó   — | j                   S r   )Údirsrk   s    r   ú<lambda>z)PatternMatcher.__init__.<locals>.<lambda>¢   s
   € �a—f‘f€ r   z!.dockerignore)ÚlistÚfilterÚPatternr+   r'   )Úselfr+   rg   s      r   Ú__init__zPatternMatcher.__init__    sH   € ÜœVÙ°8Ö<¨aœw q�zÒ<ó
ó ˆŒð 	�‰×ÑœWÐ%5Ó6Õ7ùò =s   ‘Ac           
      ó²  — d}t         j                  j                  |«      }t        |«      }| j                  D ]›  }|j
                  }|j                  |«      }|st|dk7  rot        |j                  «      t        |«      k  rN|j                  t         j                  j                  j                  |d t        |j                  «       «      «      }|sŒ™| }Œ� |S )NFr.   )r   r   r1   ri   r+   Ú	exclusionr   rJ   rr   Úsepr   )rw   ÚfilepathÚmatchedÚparent_pathÚparent_path_dirsÚpatternÚnegativer   s           r   ÚmatcheszPatternMatcher.matches¦   sº   € ØˆÜ—g‘g—o‘o hÓ/ˆÜ% kÓ2Ðà—}‘}ò 
	'ˆGØ×(Ñ(ˆHØ—M‘M (Ó+ˆEÙ˜[¨BÒ.Ü�w—|‘|Ó$¬Ð,<Ó(=Ò=Ø#ŸM™MÜŸ™Ÿ™×(Ñ(Ð)9Ð:L¼3¸w¿|¹|Ó;LÐ)MÓNó�Eò Ø&˜,‘ð
	'ð ˆr   c                 ó&   ‡ ‡‡— ˆˆˆ fd„Š ‰‰«      S )Nc              3   óÐ  •K  — t        j                  | «      D �]F  }t         j                  j                  t         j                  j	                  | ‰«      |«      }|j                  dt         j                  j                  › �«      r|dd  }‰	j                  |«      }|s|–— t         j                  j                  ‰|«      }t         j                  j                  |«      rt         j                  j                  |«      rŒé|rLd}‰	j                  D ]7  }|j                  sŒ|j                  j                  t        |«      «      sŒ5d} n |r�Œ7 ‰|«      E d {  –—†  �ŒI y 7 Œ­w)Nrc   r   TF)r   Úlistdirr   r   ÚrelpathÚ
startswithr{   r‚   ÚisdirÚislinkr+   rz   Úcleaned_patternrl   )
Úcurrent_dirrU   Úfpathr   ÚcurÚskipÚpatÚrec_walkr   rw   s
          €€€r   r�   z%PatternMatcher.walk.<locals>.rec_walkº   s   øè ø€ Ü—Z‘Z Ó,ó )�ÜŸ™Ÿ™Ü—G‘G—O‘O K°Ó6¸ó�ð ×#Ñ# a¬¯©¯© }Ð$5Ô6Ø! ! "˜I�EØŸ™ UÓ+�ÙØ’Kä—g‘g—l‘l 4¨Ó/�Ü—w‘w—}‘} SÔ)¬R¯W©W¯^©^¸CÔ-@Øáð
  �Dà#Ÿ}™}ò "˜Ø"Ÿ}š}Ø$Ø×.Ñ.×9Ñ9Ü 1°%Ó 8õ:à#(˜DÙ!ð"ñ Ù Ù# C›=×(Ò(ñ=)ð< )ús   ƒEE&ÅE&ÅE$Å	E&© )rw   r   r�   s   ``@r   r*   zPatternMatcher.walk¹   s   ú€ ö	)ñB ˜‹~Ðr   N)Ú__name__Ú
__module__Ú__qualname__rx   r‚   r*   r‘   r   r   r(   r(   Ÿ   s   „ ò8òó&"r   r(   c                   ó(   — e Zd Zd„ Zed„ «       Zd„ Zy)rv   c                 ó¸   — d| _         |j                  d«      rd| _         |dd  }| j                  |«      | _        dj	                  | j                  «      | _        y )NFr&   Tr   r   )rz   r‡   Ú	normalizerr   r   rŠ   )rw   Úpattern_strs     r   rx   zPattern.__init__ß   sN   € ØˆŒØ×!Ñ! #Ô&Ø!ˆDŒNØ% a b˜/ˆKà—N‘N ;Ó/ˆŒ	Ø"Ÿx™x¨¯	©	Ó2ˆÕr   c                 ó¼   — |j                  «       }d}t        |«      }|t        |«      k  r0||   dk(  r||= |dkD  r||dz
  = |dz  }n|dz  }|t        |«      k  rŒ0|S )Nr   z..r   )Ústripri   rJ   )Úclsrg   rT   re   s       r   r—   zPattern.normalizeè   su   € ð �G‰G‹Iˆð ˆÜ˜1“ˆØ”#�e“*ŠnØ�Q‰x˜4ÒØ˜!�HØ�q’5Ø˜a !™e˜Ø˜‘F‘Aà�Q‘�ð ”#�e“*‹nð ˆr   c                 ó@   — t        t        |«      | j                  «      S r   )r   rl   rŠ   )rw   r|   s     r   r   zPattern.match  s   € ÜÔ(¨Ó2°D×4HÑ4HÓIÐIr   N)r’   r“   r”   rx   Úclassmethodr—   r   r‘   r   r   rv   rv   Þ   s!   „ ò3ð ñó ðó4Jr   rv   )NNNFr   )NNFN)T)rL   r   rd   r@   r>   Ú	constantsr   r   Úcompilerf   r   Ústrr   r   r#   r    r6   r   ra   ri   rl   r*   r(   rv   r‘   r   r   ú<module>r¡      s©   ðÛ 	Û 	Û 	Û Û å +Ý á2€z€r‡z�z�(Ô¸
¸¿
¹
À3»€Ø€r‡z�zð.ó€ð!�3ð !˜4ó !óó&ò"	ð 9>Ø#ó2òjò&@òó÷<ñ <÷~&Jò &Jr   