
    CjJ                      <   S SK r S SKrS SKrS SKrS SKrSSKJr  SSKJr  \(       a  \R                  " S5      O\R                  " S5      r	\R                  " S5      r
S	\S
\4S jrSS jrSS jrS r  SS jrS rS rS rSS jr " S S5      r " S S5      rg)    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                 >    [        [        R                  U 5      5      $ N)bool_TAGmatch)r   s    d/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/docker/utils/build.py	match_tagr      s    

3      c           
      
   [         R                  R                  U 5      nU=(       d    / nU=(       d    Sn/ nUS   b(  SR                  U=(       d    S/US   /-   5      nSU4U/n[	        [        [        XQUS   S95      XSXFS9$ )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    77??4 DmG+|JK!}  $		))jm_<!
 34
 ]4Z]KL r   c                 ~    Uc  SnUR                  SU 35        [        U5      n[        UR                  U 5      5      $ )z
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?     !
OOa
|$%		!Brwwt}r   c           	          / n[         R                  " U 5       Ha  u  p#nXC-    HS  n[         R                  R                  X%5      nUR	                  UR                  U SS5      R                  S5      5        MU     Mc     U$ )N r   r   )r   r*   r   r   r'   replacelstrip)r   r   dirnamedirnamesfnamesfilenamelongpaths          r   build_file_listr6   :   sm    E%'WWT]!6)Hww||G6HLL  r1-44S9 * &3 Lr   c                 6   U=(       d    / nU(       d  [         R                  " 5       n[        R                  " U(       a  SOSUS9nUc  [	        U 5      nU Vs1 s H  ofS   iM	     nnU H  nX;   a  M
  [
        R                  R                  X5      n	UR                  XS9n
U
c  M=  U
R                  S:  d  U
R                  S:  a  [        U
R                  5      U
l	        [        (       a  U
R                  S-  S-  U
l        U
R                  5       (       a)   [        U	S	5       nUR                  X5        S S S 5        M  UR                  U
S 5        M     U Hb  u  p[        R                   " U5      nUR#                  S5      n[%        U5      Ul        UR                  U[(        R*                  " U5      5        Md     UR-                  5         UR/                  S5        U$ s  snf ! , (       d  f       GM  = f! [         a  n[        S
U	 35      UeS nAff = f)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&c7CA}%!,-AQ4K-GGLL,	LLL19  77Q;!''I-!''lAG VVe^e+AF88::)T*aIIaO +* IIa? B &t$#??73()				$

#345	 & GGILLONU .0 +* 4YK@s<   G"G:%G'7G:'
G7	1G:7G::
HHHc                 (   [         R                  " 5       n[        R                  " SUS9n[	        U [
        R                  5      (       a!  [        R                  " S5      n[        S5      e[	        U [
        R                  5      (       aF  [        R                  " S5      n[        U R                  5       5      Ul        U R                  S5        OUR                  U SS9nUR                  X05        UR!                  5         UR                  S5        U$ )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*bkk**. 4 5 	5	J

	+	+.*--/0j,GIIf!GGIFF1IHr   c                     [         R                  " [        U 5       Vs/ s H  o(       d  M  US:w  d  M  UPM     sn$ s  snf )N.)resplit_SEP)ppts     r   
split_pathri      s1    $*?*2bBR3YB*???s   
===c                 P    [         (       a  SR                  [        U 5      5      $ U $ )Nr   )r   r   ri   rg   s    r   normalize_slashesrl      s     xx
1&&Hr   c                 :    [        U5      nUR                  U 5      $ r   )r(   r*   )r   r+   defaultr,   s       r   r*   r*      s    		!B774=r   c                   &    \ rS rSrS rS rS rSrg)r(      c                     [        [        S U Vs/ s H  n[        U5      PM     sn5      5      U l        U R                  R	                  [        S5      5        g s  snf )Nc                     U R                   $ r   )dirsrk   s    r   <lambda>)PatternMatcher.__init__.<locals>.<lambda>   s    affr   z!.dockerignore)listfilterPatternr+   r'   )selfr+   rg   s      r   __init__PatternMatcher.__init__   sL    V8<8awqz8<
  	W%567 =s   Ac           
         Sn[         R                  R                  U5      n[        U5      nU R                   H  nUR
                  nUR                  U5      nU(       dv  US:w  ap  [        UR                  5      [        U5      ::  aN  UR                  [         R                  R                  R                  US [        UR                  5       5      5      nU(       d  M  U(       + nM     U$ )NFr.   )r   r   r1   ri   r+   	exclusionr   rJ   rs   sepr   )ry   filepathmatchedparent_pathparent_path_dirspatternnegativer   s           r   matchesPatternMatcher.matches   s    ggooh/%k2}}G((HMM(+E[B.w||$,<(==#MM(()9:L3w||;L)MNE u&, % r   c                 (   ^ ^^ UUU 4S jmT" T5      $ )Nc              3   0  >#    [         R                  " U 5       GHt  n[         R                  R                  [         R                  R	                  U T5      U5      nUR                  S[         R                  R                   35      (       a  USS  nT	R                  U5      nU(       d  Uv   [         R                  R                  TU5      n[         R                  R                  U5      (       a$  [         R                  R                  U5      (       a  M  U(       a_  SnT	R                   HC  nUR                  (       d  M  UR                  R                  [        U5      5      (       d  MA  Sn  O   U(       a  GMd  T" U5       S h  vN   GMw     g  N
7f)Nrc   r   TF)r   listdirr   r   relpath
startswithr~   r   isdirislinkr+   r}   cleaned_patternrl   )
current_dirrU   fpathr   curskippatrec_walkr   ry   s
          r   r   %PatternMatcher.walk.<locals>.rec_walk   s#    ZZ,GGOOK6 ##a}$566!!"IEU+Kggll4/ww}}S))RWW^^C-@-@
  D#}}"}}$..99 1% 8: :#(D!  -  #C=((= -< )s   E'F.F	F
F )ry   r   r   s   ``@r   r*   PatternMatcher.walk   s    	)B ~r   )r+   N)__name__
__module____qualname____firstlineno__rz   r   r*   __static_attributes__r   r   r   r(   r(      s    8&"r   r(   c                   0    \ rS rSrS r\S 5       rS rSrg)rx      c                     SU l         UR                  S5      (       a  SU l         USS  nU R                  U5      U l        SR	                  U R                  5      U l        g )NFr&   Tr   r   )r}   r   	normalizers   r   r   )ry   pattern_strs     r   rz   Pattern.__init__   sQ    !!#&&!DN%ab/KNN;/	"xx		2r   c                     UR                  5       nSn[        U5      nU[        U5      :  a1  X2   S:X  a  X2	 US:  a
  X2S-
  	 US-  nOUS-  nU[        U5      :  a  M1  U$ )Nr   z..r   )stripri   rJ   )clsrg   rT   re   s       r   r   Pattern.normalize   sp     GGI 1#e*nx4Hq5!eFAQ #e*n r   c                 @    [        [        U5      U R                  5      $ r   )r   rl   r   )ry   r   s     r   r   Pattern.match  s    (2D4H4HIIr   )r   rs   r}   N)	r   r   r   r   rz   classmethodr   r   r   r   r   r   rx   rx      s!    3  4Jr   rx   )NNNFr   )NNFN)T)rL   r   rd   r@   r>   	constantsr   r   compilerf   r   strr   r   r#   r    r6   r   ra   ri   rl   r*   r(   rx   r   r   r   <module>r      s    	 	 	   + 2rzz(

3	zz.!3 !4 !&"	 9>#2j&@< <~&J &Jr   