
    eҘ                    n   d dl mZ ddlmZ d dlZd dlmZ d dlZd dl	Zd dl
Zd dlZd dlZd dlZd dlZd dlZd dlZd dlZ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 d dlmZmZ d	d
lmZ ddlmZ ddl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& ddl'm(Z( ddl'm)Z) ddlm Z  ejT                  rd dl+Z,d dl-m.Z. e.d   Z/	 d dl0Z0dZ1dZ3dZ4g dZ5 ejl                  d      Z7d)dZ8d*d+dZ9d,dZ:d-dZ;d.dZ<d/dZ= G d de$      Z> G d  d!e>      Z? G d" d#      Z@d0d$ZAd1d2d%ZB ed&       G d' d(             ZCy# e2$ r dZ1Y |w xY w)3    )annotations   )mlogN)	dataclass)	b64encode)netrc)PathPurePath   )WrapMode)coredata)	quiet_gitGITProgressBarMesonExceptionwindows_proof_rmtree
Popen_safe)
FeatureNew)
SubProject)mesonlib)LiteralmesoncmakecargoTFg      >@wrapdb.mesonbuild.com)filegithgsvnpatchc                   t         j                  j                  |       }|j                  st	        |  d      |j                  j                  t              st	        |  d      t        r|j                  dk(  st	        d|        |S )z3 raises WrapException if not whitelisted subdomain z is not a valid URLz  is not a whitelisted WrapDB URLhttpsz8WrapDB did not have expected SSL https url, instead got )	urllibparseurlparsehostnameWrapExceptionendswithWHITELIST_SUBDOMAINhas_sslscheme)urlstrurls     6/usr/lib/python3/dist-packages/mesonbuild/wrap/wrap.pywhitelist_wrapdbr0   C   s~    
,,


'C<<vh&9:;;<<  !45vh&FGHHszzW,VW]V^_``J    c                   |rd}nd}t        |       }t        rW	 t        j                  dt        j
                  j                  t        j                  j                  |      t                    S |st%        d	t&        j(                   d
|       t!        j"                  d	t&        j(                   dd       |j+                  d      }	 t        j                  dt        j
                  j                  t        j                  j                  |      t                    S # t        j                  j                  $ rl}d|  d| d}t        |j                  t        j                        r*|rt!        j"                  | d       nt%        | |       t%        |      Y d }~d }~ww xY w# t        j                  j                  $ r}t%        d|  d|       d }~ww xY w)Nz:

    To allow connecting anyway, pass `--allow-insecure`. zhttp.client.HTTPResponsetimeoutzWrapDB connection failed to z with error .z(

    Proceeding without authentication.zSSL module not available in z: Cannot contact the WrapDB.z#: WrapDB traffic not authenticated.T)oncehttp)r,   )r0   r+   Tcastr$   requesturlopenr%   
urlunparseREQ_TIMEOUTerrorURLError
isinstancereasonsslSSLCertVerificationErrorr   warningr(   sys
executable_replace)	urlstringallow_insecurehave_optinsecure_msgr.   excpmsg	nossl_urls           r/   open_wrapdburlrP   N   s   U
9
%C
	)664fnn6L6LV\\MdMdehMis~6L6  A  A :3>>:JJfgsftuvv 	3CNN3CCfgnrs F+IZvv0&..2H2HI`I`ajIk  vA2H  3B  C  	C% ||$$ 	)0<vQOC$++s'C'CD!LLC5(R!ST'3%~(>??#C((	 U		)& <<   Z:9+\RVQWXYYZs2   AD# AF/ #F, A"F''F,/G"GG"c                <    t        d| d      }|j                         S )Nz.https://wrapdb.mesonbuild.com/v2/releases.jsonT)rP   read)rJ   r.   s     r/   get_releases_datarS   n   s    
I>[_
`C88:r1   c                    t        |       }t        j                  dt        j                  |j                                     S )NT.Dict[str, T.Any])rS   r9   r:   jsonloadsdecode)rJ   datas     r/   get_releasesrZ   r   s-    ^,D66&

4;;=(ABBr1   c                    t        d| d| d| d| d	|d      }t        | d      5 }|j                  |j                                d d d        y # 1 sw Y   y xY w)N!https://wrapdb.mesonbuild.com/v2/_-/.wrapTwb)rP   openwriterR   )wrapfilenamenew_versionnew_revisionrJ   r.   fs          r/   update_wrap_fileri   v   si    
<TF!K=PQR^Q__`ae`ffkl'/C	h	 	
  s    AAc                   t         j                  j                  |       }|j                  dk7  rt	        d|  d      |j
                  j                  d      j                  d      }|d   dk(  r
|d   |d   fS |d   d	k(  r3|d   }|j                  d
d      \  }}|j                  dd      \  }}||fS t	        d|        )Nr   zURL z$ does not seems to be a wrapdb patchr_   r   v1v2r]   r   r^   zInvalid wrapdb URL )	r$   r%   r&   netlocr(   pathstripsplitrsplit)	patch_urluarrtagr]   versionrevisions          r/   parse_patch_urlrz   |   s    i(Axx**d9+-QRSS
&&,,s

!
!#
&C
1v~2wB	Q4"gZZQ'
7#NN32  1)=>>r1   c                      e Zd Zy)r(   N__name__
__module____qualname__ r1   r/   r(   r(          r1   r(   c                      e Zd Zy)WrapNotFoundExceptionNr|   r   r1   r/   r   r      r   r1   r   c                  F    e Zd Zd	d
dZddZddZddZddZddZddZ	y)PackageDefinitionc                   || _         t        |      | _        d | _        i | _        i | _        g | _        g | _        t        j                  j                  |      | _
        | j                  j                  d      | _        | j                  r| j                  d d n| j                  | _        d | j
                  | j                  j                         <   || _        d| _        | j                  rl| j#                          t%        |dd      5 }t'        j(                  |j+                         j-                  d            j/                         | _        d d d        | j                  j3                  d| j                        | _        t        j                  j7                  | j4                        rt9        d      | j                  r*| j                  t:        vrt9        d	| j                        t        j                  j=                  t        j                  j7                  | j                         d
      | _        y # 1 sw Y   xY w)Nr`   Frutf-8encoding	directoryz+Directory key must be a name and not a pathUnknown wrap type packagefiles) filenamer   
subprojecttypevaluesprovided_depsprovided_programs
diff_filesosrp   basenamer)   has_wrapre   loweroriginal_filename
redirected
parse_wraprb   hashlibsha256rR   encode	hexdigestwrapfile_hashgetr   dirnamer(   	ALL_TYPESjoinfilesdir)selffnamer   r   s       r/   __init__zPackageDefinition.__init__   s   $Z0%)	(*;=.0(*((/..w7*.--DMM#2&T]]	04499??,-!&==OOeS73 ]t%,^^DIIK4F4Fw4O%P%Z%Z%\"]dii@77??4>>* MNN99)3"4TYYM BCCRWW__T]]%C^T] ]s   
AH::Ic                   	 t        j                  d       }|j                  | j                  d       | j                  |       | j                  dk(  rt        | j                        j                  }t        | j                  d         }t        |j                        D ].  \  }}|dz  d	k(  r|d
k(  st        d      |dk7  s%t        d       |j                  dk7  rt        d      ||z  }|j                         st        d| d      t!        |      | _        | j#                          d| _        n| j'                  |       d| j                  v r%t)        dd      j+                  | j,                         dD ]O  }| d| j                  v s| d| j                  vs't)        d| dd      j+                  | j,                         Q y # t         j                  $ r }t        d| j                   d|      d }~ww xY w)N)interpolationr   r   zFailed to parse z: redirectr   r   r   ..z*wrap-redirect filename cannot contain ".."subprojectszCwrap-redirect filename must be in the form foo/subprojects/bar.wrapr`   z+wrap-redirect filename must be a .wrap filezwrap-redirect z filename does not existTpatch_directoryzWrap files with patch_directoryz0.55.0)r!   source	_filename_urlzLocal wrap patch files without )configparserConfigParserrR   r   Errorr(   r   parse_wrap_sectionr   r	   parentr   	enumeratepartssuffixis_filestrr   r   parse_provide_sectionr   user   )r   configer   r   ipwhats           r/   r   zPackageDefinition.parse_wrap   s   	K!..TBFKKK8 	'99
" 4==)00GZ01E!%++. s1q5A:Dy+,XYYM)+,qrrs ||w&#$QRReOE==?#nUG;S$TUUJDMOO"DO&&v.+8(CGGX' 	hDy!T[[0vT]$++5U<TF$GRVVW[WfWfg	h9 !! 	K"24==/A5 IJJ	Ks   3G H$G??Hc                   t        |j                               dk  rt        d| j                         |j                         d   | _        | j                  j                  d      s$t        | j                  d| j                         | j                  dd  | _        t        || j                           | _        d| j                  v rt        dd	      j                  | j                         | j                  d   j                  d
      D ]j  }t        |j                               }|j                         rt        d      d|j                   v rt        d      | j"                  j%                  |       l y y )Nr   zMissing sections in r   zwrap-z! is not a valid first section in    r   zWrap files with diff_filesz0.63.0,z#diff_files paths cannot be absoluter   z$diff_files paths cannot contain "..")lensectionsr(   r   wrap_section
startswithr   dictr   r   r   r   rr   r	   rq   is_absoluter   r   append)r   r   srp   s       r/   r   z$PackageDefinition.parse_wrap_section   sE   v !A%"6t}}o FGG"OO-a0  ++G44#4#4"77XY]YfYfXg hii%%ab)	6$"3"3454;;&3X>BB4??S[[.44S9 -AGGI##%'(MNN4::%'(NOO&&t,- 'r1   c                N   |j                  d      rt        d      |j                  d      r|d   j                         D ]  \  }}|dk(  rW|j                  d      D ci c]!  }|j	                         j                         d # }}| j                  j                  |       b|dk(  rB|j                  d      D cg c]  }|j	                          }}| xj                  |z  c_        |sd|d| j                   d	}t        |      || j                  |<    y y c c}w c c}w )
Nprovidesz:Unexpected "[provides]" section, did you mean "[provide]"?providedependency_namesr   program_namesz#Empty dependency variable name for  in zk. If the subproject uses meson.override_dependency() it can be added in the "dependency_names" special key.)
has_sectionr(   itemsrr   rq   r   r   updater   r   )r   r   kvn
names_dict
names_listms           r/   r   z'PackageDefinition.parse_provide_section   s*   j) \]]i(y)//1 *1** DE773<!Pa!'')//"3T"9!PJ!P&&--j9'56WWS\!B!'')!BJ!B**j8*>qe4 WR RA (**()""1%%* ) "Q
 "Cs   &D;D"c                r    	 | j                   |   S # t        $ r t        d|d| j                         w xY w)NzMissing key r   )r   KeyErrorr(   r   )r   keys     r/   r   zPackageDefinition.get   sD    	K;;s## 	K,sgT$-- IJJ	Ks    %6c                B    t         j                  j                  |d      S )Nz.meson-subproject-wrap-hash.txt)r   rp   r   )r   subproject_directorys     r/   get_hashfilezPackageDefinition.get_hashfile  s    ww||02STTr1   c                    | j                   rEt        | j                  |      dd      5 }|j                  | j                  dz          d d d        y y # 1 sw Y   y xY w)Nwr   r   
)r   rb   r   rc   r   )r   r   r   s      r/   update_hash_cachez#PackageDefinition.update_hash_cache  sZ    ==d''(<=sWU 6Y]

4--456 6 6 6s   AAN)r3   )r   r   r   r   returnNone)r   zconfigparser.ConfigParserr   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )
r}   r~   r   r   r   r   r   r   r   r   r   r1   r/   r   r      s*    U6"hH-$*0KU6r1   r   c                    t         j                  j                  | |dz         }t         j                  j                  |      rt	        |      }|j
                  S |S )Nr`   )r   rp   r   isfiler   r   )subdir_rootpackagenamer   wraps       r/   get_directoryr     sE    GGLLkG&;<E	ww~~e '~~r1   c                    	 t        j                  | ||      S # t         j                  $ r}t        t	        |            d}~ww xY w)zQ
    Wrapper to convert GitException to WrapException caught in interpreter.
    checkN)r   verbose_gitGitExceptionr(   r   )cmd
workingdirr   r   s       r/   r   r     sA    $##C5AA   $CF##$s    AAA)eqc                  b   e Zd ZU ded<   ded<   dZded<   ej                  Zded<   dZd	ed
<   dZ	d	ed<   dZ
d	ed<   d*dZd*dZd*dZd+dZd*dZd,dZd-dZd.dZd/dZd0dZd1d2dZd*dZd3dZd*dZd*dZd*dZd4dZd*dZd*d Zd5d!Zd6d"Zd7d8d#Z d6d$Z!d9d:d%Z"d;d&Z#d*d'Z$d*d(Z%d<d)Z&y)=Resolverr   
source_dirsubdirr3   r   r   	wrap_modeFboolwrap_frontendrJ   silentc                   t         j                  j                  | j                  | j                        | _        t         j                  j                  d      xs* t         j                  j                  | j
                  d      | _        i | _	        d | _
        i | _        i | _        i | _        i | _        i | _        | j!                          | j#                          | j%                          y )NMESON_PACKAGE_CACHE_DIRpackagecache)r   rp   r   r   r   r   environr   cachedirwrapsr   r   r   wrapdbwrapdb_provided_depswrapdb_provided_programs
load_wraps
load_netrcload_wrapdb)r   s    r/   __post_init__zResolver.__post_init__%  s    77<<E

'@AsRWW\\RVRbRbdrEs57
(,
=?AC*,68!:<%r1   c                    	 t               | _         y # t        $ r Y y t        $ r%}t        j                  d| dd       Y d }~y d }~ww xY w)Nzfailed to process netrc file: r6   Ffatal)r   FileNotFoundError	Exceptionr   rE   )r   r   s     r/   r  zResolver.load_netrc3  sI    	MDJ  	 	MLL9!A>eLL	Ms    	A
A
AA
c                   t         j                  j                  | j                        sy t	        t        j
                  | j                              \  }}}ddh}|D ]  }|j                  d      st         j                  j                  | j                  |      }t        || j                        }|| j                  |j                  <   ||j                  |j                  hz  } |D ]`  }||v rt         j                  j                  | j                  |      }t        || j                        }|| j                  |j                  <   b | j                  j                         D ]  }| j                  |        y )Nr  r   r`   )r   rp   isdirr   nextwalkr)   r   r   r   r  re   r   r   add_wrap)r   rootdirsfilesignore_dirsr   r   r   s           r/   r
  zResolver.load_wraps;  s8   ww}}T--. )9)9!:;dE%~6 	7A::g&GGLL!1!115E$UDOO<D$(DJJtyy!DNNDII66K	7  	)AKGGLL!1!115E$UDOO<D$(DJJtyy!	) JJ%%' 	 DMM$	 r1   c                   |j                   j                         D ]X  }|| j                   v r9| j                   |   }d|d|j                   d|j                   }t        |      || j                   |<   Z |j                  D ]X  }|| j                  v r9| j                  |   }d|d|j                   d|j                   }t        |      || j                  |<   Z y )NzMultiple wrap files provide z dependency: z and z
 program: )r   keysr   r(   r   )r   r   r   	prev_wrapr   s        r/   r  zResolver.add_wrapR  s    ##((* 	)AD&&& ..q1	21%}T]]OSXYbYkYkXlm#A&&$(Dq!	) '' 	-AD*** 2215	21%z$--PUV_VhVhUij#A&&(,D""1%	-r1   c                   	 t        | j                  d      j                  dd      5 }t        j                  |      | _        d d d        | j
                  j                         D ]y  \  }}| j                  j                  |j                  dg       D ci c]  }|| c}       | j                  j                  |j                  dg       D ci c]  }|| c}       { y # 1 sw Y   xY w# t        $ r Y y w xY wc c}w c c}w )Nzwrapdb.jsonr   r   r   r   r   )r	   r   rb   rV   loadr  r  r   r  r   r   r	  )r   rh   re   infor   s        r/   r  zResolver.load_wrapdb`  s    	d&&6;;C';R +VW"iil+ ++++- 	cJD$%%,,txxHZ\^?_-`!ag-`a))00488O]_C`1aa!T'1ab	c	+ +  		 .a1as4   'C/ C#C/ 
C>

D
#C,(C/ /	C;:C;c                h   | j                   j                  |      }|sy | j                          |d   d   }|j                  dd      \  }}t        j
                  j                  d| d| d| d| d	      }t        | j                  | d      }|j                  d	      5 }|j                  |j                                d d d        t        j                  d
| d| d|        t        t        |            }	|	| j                   |	j"                  <   | j%                  |	       |	S # 1 sw Y   gxY w)Nversionsr   r^   r   r\   r]   r_   r`   ra   z
Installed z	 version z
 revision )r  r   check_can_downloadrs   r$   r;   r<   r	   r   rb   rc   rR   r   logr   r   r  re   r  )
r   	subp_namer!  latest_versionrx   ry   r.   r   rh   r   s
             r/   get_from_wrapdbzResolver.get_from_wrapdbj  s$   {{y)!j)!,*11#q9nn$$'HSTU\T]]^_g^hhijsitty%z{T%%)E':;ZZ 	 GGCHHJ	 :i[	'*XJOP U, $

499d	  	 s   " D((D1c                x   |j                   j                         D ]!  \  }}| j                   j                  ||       # |j                  j                         D ]!  \  }}| j                  j                  ||       # |j                  j                         D ]!  \  }}| j                  j                  ||       # y N)r  r   
setdefaultr   r   )r   other_resolverr   r   s       r/   merge_wrapszResolver.merge_wraps{  s    "((..0 	(DAqJJ!!!Q'	("00668 	0DAq))!Q/	0"44::< 	4DAq""--a3	4r1   c                    |j                         }| j                  j                  |      }|r)|j                  j                  |      }|j                  |fS | j                  j                  |      }|d fS r*  )r   r   r   re   r  )r   r   r   dep_var	wrap_names        r/   find_dep_providerzResolver.find_dep_provider  sp     "'')!!%%k2((,,[9G99g%%--11+>	$r1   c                v    | j                   j                  |      }|r|j                  j                  |      S d S r*  )r  r   r   )r   r&  depnamer   s       r/   get_varnamezResolver.get_varname  s2    zz~~i(26t!!%%g.@D@r1   c                    |D ]N  }| j                   j                  |      }|r|j                  c S | j                  j                  |      }|sL|c S  y r*  )r   r   re   r	  )r   namesre   r   r0  s        r/   find_program_providerzResolver.find_program_provider  sX     	!D))--d3Dyy 5599$?I  	! r1   Nc                8    | _         | _         j                  j                  |       _         j                  s j                  |       _         j                  sd j                    d}t        |       j                  j                   _         j                  j                  rt        j                  j                  t        j                  j                   j                  j                         j                  j                         _        t        j                  j                   j                        s9t        j                  j                   j                   j                         _        t        j                  j                   j                   j                  j                        } j                  j                  |k7  rt        j                  j!                   j                  j                   j"                        }t%        j&                  dt%        j(                  |             t+        |dd      5 }|j-                  t/        j0                  dt3        t        j                  j!                   j                  j                   j                              j5                          d             d d d        n j                  j                   _        t        j                  j!                   j                   j"                        }d	d
ddt7        j8                  d j                  j:                  j                  d|            r4vr0dj                  j=                               }t?        dd|       |r|k7  rt?        dd|       xs dd fd}	 |	       r jA                          |fS  jC                          t        j                  j                   j                        r5t        j                  jE                   j                        svt?        d      t        j                  j                   jF                   j                        }
t        j                  jE                  |
      r jI                  |
 j                         nډ j                  jJ                  dk(  r jM                          n jO                           j                  jJ                  dk(  r jQ                          nv j                  jJ                  dk(  r jS                          nL j                  jJ                  dk(  r jU                          n"t?        d j                  jJ                        	  jW                           jY                           |	       st?        d    d       j                  j_                   j                         |fS # 1 sw Y   xY w# tZ        $ r t]         j                          w xY w)Nz%Neither a subproject directory nor a z.wrap file was found.Usingr   r   r   zK                        [wrap-redirect]
                        filename = z
                        zmeson.buildzCMakeLists.txtz
Cargo.tomlr   T.Optional[Method]methodz, zWrap method z# is not supported, must be one of: zWrap method is z( but we are trying to configure it with r   c                     t         j                  j                  t         j                  j                  j                                  S r*  )r   rp   existsr   r   )r;  methods_mapr   s   r/   has_buildfilez'Resolver.resolve.<locals>.has_buildfile  s.    77>>"'',,t||[=P"QRRr1   z*Path already exists but is not a directoryr   r   r   r    r   zSubproject exists but has no z file.r   r   )0r   r   r  r   r   r(  r   r   r   rp   r   r   r   r=  r   r   relpathr   r   r%  boldrb   rc   textwrapdedentr
   as_posixr9   r:   r   r  r(   validateresolve_git_submoduler  r  	copy_treer   get_filer$  get_gitget_hgget_svnapply_patchapply_diff_filesr  r   r   )r   r   force_methodr   
main_fnamerelrh   rel_pathallowed_methodsr?  cached_directoryr;  r>  s   `          @@r/   resolvezResolver.resolve  sq   &$JJNN;/	yy,,[9DIyy78H8H7II^_A'**,,99
 77<<		8J8J(KTYYM`M`aDL77>>$,,/!ww||D,<,<dnnMd&6&6		8J8JKJyy!!Z/ggoodii&8&8$//J$))C.1 *cG< GGHOO 1$$,RWW__TYY=O=OQUQaQa-b$c$l$l$n#o p-     99--DL77??4<<A #%!,
 ,dii.>.>.B.B8\.Z[fK/"ii(8(8(:;O,vj8[\k[l mnnFl2/&;cdpcq rss"7	S ?MMOV## 	""$77>>$,,'77==.#$PQQ  "ww||DMM4>>Jww}}-./>6)'')99>>U*LLNYY^^t+KKMYY^^u,LLN'*<TYY^^<N(OPP  "%%'
 "?F@S?TTZ [\\
 			##DLL1] F  $T\\2s   A<W,
 W9 ,W69 Xc                V    | j                   t        j                  u rd}t        |      y )Nz7Automatic wrap-based subproject downloading is disabled)r   r   
nodownloadr(   )r   r   s     r/   r$  zResolver.check_can_download  s+     >>X000IA"" 1r1   c                   t         syt        j                  j                  | j                        syt        dgt        | j                        j                        \  }}|syt        g d| j                        \  }}|sy|j                  d      rt        j                  d       y|j                  d      rt        d      |j                  d	      r$t        g d
| j                        ryt        d      |j                  d      r1t        g d| j                         t        ddg| j                         y|dk(  ryt        d|      )NFz	rev-parse)	submodulestatusr6   +z"git submodule might be out of dateTUz!git submodule has merge conflictsr^   )rY  r   --initr6   zgit submodule failed to init )rY  r   r6   checkoutr6   r3   zUnknown git submodule output: )r   r   rp   r  r   r   r	   r   r   r   rE   r(   r   )r   retouts      r/   rG  zResolver.resolve_git_submodule  s     ww}}T\\*k]D,>,E,EFS94<<HS>>#LL=>^^C  CDD^^C A4<<P >??^^C 4dllCS)4<<8 BY<SGDEEr1   c                D   | j                  d      }| j                  }d| j                  j                  v r+t	        j
                  | j                         | j                  }	 t        j                  ||       y # t        $ r}t        dt        |             |d }~ww xY w)Nr   lead_directory_missingz%failed to unpack archive with error: )get_file_internalr   r   r   r   mkdirr   shutilunpack_archiveOSErrorr(   r   )r   rp   extract_dirr   s       r/   rI  zResolver.get_file5  s    %%h/&& $tyy'7'77HHT\\",,K	Y!!$4 	Y"GAx PQWXX	Ys   "A9 9	BBBc                   t         st        d| j                   d      | j                  j	                  d      }ddd|dg}d}g }| j                  j
                  j	                  d	d
      d
k7  r)d}d| j                  j
                  j	                  d	      g}|r| j                  |      rt        ddd| j                  g| j                  d       t        ddd| j                  j	                  d      g| j                  d       | j                  j	                  d      }t        dg|d|| j                  d       t        || j                  d       n|st        d| j                  j	                  d      | j                  g| j                  d       |j                         dk7  rt        || j                        st        d| j                  j	                  d      |g| j                  d       t        || j                  d       ncdddg|}|j                         dk7  r|d|gz  }|| j                  j	                  d      | j                  gz  }t        || j                  d       | j                  j
                  j	                  dd
      j                         dk(  rt        dddddg|| j                  d       | j                  j
                  j	                  d      }|rt        dd d!d|g| j                  d       y y )"Nz'Git program not found, cannot download z.wrap via git.ry   z-czadvice.detachedHead=falser_  z--Fdepthr3   Tz--depthz%init.defaultBranch=meson-dummy-branchinitr   remoteaddoriginr.   fetchcloneheadz--branchzclone-recursivetruerY  r   r]  z
--checkoutz--recursivezpush-urlzset-urlz--push)r   r(   r   r   r   r   is_git_full_commit_idr   r   r   r   r   )r   revnocheckout_cmd
is_shallowdepth_optionargspush_urls          r/   rJ  zResolver.get_gitB  s   "I$JZJZI[[i jkk		j)9:udS
$&99,2J%tyy'7'7';';G'DEL$44U; FPTP^P^_aeaqaqy}~5(DIIMM%4HI4<<_cdIIMM*-EA<AA5A4<<W[\dll$?WdiimmE&:DNNKTM]M]eij;;=F*&|T\\B#WdiimmE.BE$JDLL`de#L$,,dK97R\R;;=F*Z//Du-t~~>>D$"2"2$?99 126<<>&Hh,eXdeD299##''
39h(KT\\aef r1   c                   | j                   j                  sy | j                   j                  | j                        }t        j
                  j                  |      r6t        |dd      5 }|j                         j                         }d d d        ny | j                   j                  }|k7  r.t        j                  d| j                   j                   d       y y # 1 sw Y   SxY w)Nr   r   r   zSubproject zW's revision may be out of date; its wrap file has changed since it was first configured)r   r   r   r   r   rp   r   rb   rR   rq   r   r   rE   re   )r   hashfiler   expected_hashactual_hashs        r/   rF  zResolver.validatei  s    yy!! 99))$,,777>>(#hg6 4$ $		 1 1 34 4 ii-- K'LL;tyy~~&6  7O  P  Q (4 4s   *CC&c                H    d}t        |      dv rt        d |D              }|S )NF>   (   @   c              3  $   K   | ]  }|d v  
 yw)0123456789AaBbCcDdEeFfNr   ).0chs     r/   	<genexpr>z1Resolver.is_git_full_commit_id.<locals>.<genexpr>  s     HB77Hs   )r   all)r   ru  results      r/   rt  zResolver.is_git_full_commit_id}  s(    u:!H%HHFr1   c                ~   | j                   j                  d      }t        j                  d      }|st	        d      t        j                  |d| j                   j                  d      | j                  g| j                         |j                         dk7  r%t        j                  |d|g| j                         y y )	Nry   r   zMercurial program not found.rq  r.   cwdtipr_  )r   r   rf  whichr(   
subprocess
check_callr   r   r   r   )r   ru  r   s      r/   rK  zResolver.get_hg  s    		j)\\$ >??r7DIIMM%,@#~~/484D4D	F;;=E!!!2z5"9&*ll4 "r1   c           	        | j                   j                  d      }t        j                  d      }|st	        d      t        j                  |dd|| j                   j                  d      | j                  g| j                         y )Nry   r    zSVN program not found.r_  z-rr.   r  )	r   r   rf  r  r(   r  r  r   r   )r   ru  r    s      r/   rL  zResolver.get_svn  sl    		j)ll5! 899sJeTYY]]5=Q#~~/484D4D	Fr1   c                    | j                   || j                   j                  vry | j                   j                  |      \  }}}||}||fS r*  )r   hostsauthenticators)r   ro   loginaccountpasswords        r/   get_netrc_credentialszResolver.get_netrc_credentials  sP    ::tzz/?/?!?#'::#<#<V#D wEhr1   c           	        d}t        j                         }t        j                  d| j                  d      }t
        j                  j                  |      }|j                  rC|j                  j                  t              r$t        || j                  | j                        }n\t        |v rt        | d      ddt        j                    i}| j#                  |j$                        }|d	|j$                  vr|\  }	}
|j&                  d
k(  rCt)        |	 d|
 j+                               j-                         }|j/                  dd| i       nh|j&                  dk(  rBt
        j                  j1                  |j3                  |	 d|
 d	|j$                               }nt5        j6                  dd       	 t
        j8                  j;                  ||      }t
        j8                  j=                  |t>              }tI        jJ                  |      5 }|5 }	 tM        |jO                         d         }|vtS        d       	 |jU                  |      }|dk(  rn#|j/                  |       |jW                  |       :|jY                         }||jZ                  fcd d d        cd d d        S t\        j^                  ja                          tc        d|d| jd                  xs d       }	 |jU                  |      }|dk(  rn=|j/                  |       |jW                  |       |j/                  tg        |             T|ji                          |jY                         }d d d        d d d        |jZ                  fS # t
        j@                  jB                  $ r2}t5        jD                  tG        |             t        d| d      d }~ww xY w# tP        $ r d }Y w xY w# 1 sw Y   xY w# 1 sw Y   xY w)Ni (  ra   F)modedirdelete)rJ   rK   z" may be a WrapDB-impersonating URLz
User-Agentzmesonbuild/@r#   :AuthorizationzBasic ftp)ro   zNMeson is not going to use netrc credentials for protocols other than https/ftpr  )headersr4   zcould not get z is the internet available?zContent-Lengthz!Downloading file of unknown size.r1   downloadDownloading)bar_typetotaldescdisable)5r   r   tempfileNamedTemporaryFiler  r$   r%   r&   r'   r)   r*   rP   rJ   r   r(   r   rx   r  ro   r,   r   r   rX   r   r=   rH   r   rE   r;   Requestr<   r>   r?   r@   r%  r   
contextlibclosingintr!  	TypeErrorprintrR   rc   r   re   rF   stdoutflushr   r   r   close)r   rI   	blocksizehtmpfiler.   respr  credsr  r  	enc_credsreqr   dlsizeblock	hashvalueprogress_bars                     r/   get_datazResolver.get_data  sy   	NN--4T]]SXYll##I.<<CLL112EF!)D<O<OZ^ZlZlmD I-9+-O PQQ#{83C3C2D%EFG..szz:E S

%:"'x::( )UG1XJ*?*F*F*H I P P RINNOvi[5I#JKZZ5( & 7 7ugUVW_V``abeblblamLn8o pILL!q',.]nn,,Y,H~~--c;-G % 	&w 	&'TYY[)9:; ~9: IIi0E|HHUOMM%(  KKM	 ',,.	& 	& 	& JJ&
&,9040CtFL 		),C<e$##CJ/   I7	& 	&8 ',,&&? <<(( ]Q #nYK?Z$[\\]  	& 	& 	& 	&so   =AM? O/O#O9A%O#	O/1B0O#!O/?O-O		OO O#O  O##O,	(O//O8c           	        |dz   | j                   j                  vr|sy | j                   j                  |dz         j                         }t	        j
                         }t        |d      5 }|j                  |j                                d d d        |j                         }||k7  rt        d| d| d| d      y # 1 sw Y   4xY w)N_hashrbIncorrect hash for :
  expected
  actual.)r   r   r   r   r   r   rb   r   rR   r   r(   )r   r   rp   hash_requiredexpectedr  rh   dhashs           r/   
check_hashzResolver.check_hash  s    '>!1!11-99==0668NN$ 	HHQVVX	H"5dV4zV[U\\d eff 	 	s   + B>>Cc                    g d}|D ]  }	 | j                  |      c S  | j                  |      S # t        $ r:}t        j                  d| dd       t	        j
                  |       Y d }~gd }~ww xY w)N)r   r            zfailed to download with error: z. Trying after a delay...Fr  )r  r  r   rE   timesleep)r   rI   delaysdr   s        r/   get_data_with_backoffzResolver.get_data_with_backoff  st    ! 	A}}Y//	 }}Y''  >qcAZ[chi

1s   0	A30A..A3c           	        | j                          | j                  j                  ||rdndz         }t        j                  dt        j
                  | j                        |dt        j
                  |             	 | j                  |      \  }}| j                  j                  |dz         j                         }||k7  r*t        j                  |       t        d| d| d| d	      	 t        j                  ||       y # t        $ rb |s^|dz   | j                  j                  v r| j                  ||d
      cY S t        j                  dt        j
                  |dz         d        w xY w)N_fallback_urlr   r  fromr  r  r  r  r  T)fallbackz'A fallback URL could be specified usingzkey in the wrap file)r$  r   r   r   r%  rB  r   r  r   r   remover(   r   r  rename)r   r   ofnamer  srcurlr  r  r  s           r/   r  zResolver.download  sB   !t(OP		$*:*: ;T6499U[K\]	!77?NE7yy}}TG^4::<H 		'"#&9$tH:\Z_Y``h$ijj ! 			'6"  	/)TYY-=-====v=EEB4/#9:<RT	s   =A/D :E/ /E/c                   | j                   j                  |dz         }|dz   | j                   j                  v rt        j                  j                  | j                  |      }t        j                  j                  |      rI| j                  ||       t        j                  dt        j                  | j                        |d       |S t        j                  | j                  d       | j                  ||       |S t        | j                   j                         |z  }|j                         st#        d| d      | j                  ||j%                         d	
       |j%                         S )Nr   r   r9  zfrom cache.T)exist_okzFile "" does not existF)r  )r   r   r   r   rp   r   r  r=  r  r   r%  rB  r   makedirsr  r	   r   r(   rE  )r   r   r   
cache_pathrp   s        r/   rd  zResolver.get_file_internal  s   99==!34&=DII,,,dmmX>Jww~~j)j1$))D,<,<"=t]S!!KK5MM$
+		**+h6D;;=#fTF2B$CDDOOD$--/OG==?"r1   c                |   d| j                   j                  v r=d| j                   j                  v r%d| j                   j                  d}t        |      d| j                   j                  v r3| j	                  d      }	 t        j                  || j                         y d| j                   j                  v r| j                   j                  d   }t        j                  j                  | j                   j                  |      }t        j                  j!                  |      st        d|       | j                  || j"                         y y # t        $ ra t        j                         5 }t        j                  ||       | j                  || j                         d d d        n# 1 sw Y   nxY wY y Y y w xY w)Npatch_filenamer   z
Wrap file z: must not have both "patch_filename" and "patch_directory"r!   z patch directory does not exist: )r   r   r   r(   rd  rf  rg  r   r  r  TemporaryDirectoryrH  r   rp   r   r   r  r   )r   r   rp   workdir	patch_dirsrc_dirs         r/   rM  zResolver.apply_patch  sf   tyy///4EIYIY4YTYY//22lmA""tyy///))'2D>%%dD,<,<=
 $))"2"22		(():;Iggll499#5#5yAG77==)#&Fyk$RSSNN7DLL1 3	  >002 >g))$8NN7D,<,<=> > > >>s*     E F;.3F*!	F;*F3	/F;:F;c                   | j                   j                  D ]M  }t        j                  d| d       t	        | j                   j
                        |z  }|j                         st        d| d      t        j                  j                  t        |      | j                        }t        r-t        ddddt        t	        |      j                               g}nt        rt        d	d
ddd|g}nt        d      t!        || j                  t"        j$                        \  }}}|j&                  dk7  st        j                  |j)                                t        d| d       y )NzApplying diff file ""zDiff file "r  z-lz-fz-p1z-iz--work-treer6   applyz--ignore-whitespacez5Missing "patch" or "git" commands to apply diff files)r  stderrr   zFailed to apply diff file ")r   r   r   r%  r	   r   r=  r(   r   rp   rA  r   r   PATCHrE  r   r   r  STDOUT
returncoderq   )r   r   rp   rA  r   r   ra  r]   s           r/   rN  zResolver.apply_diff_files-  s(   		,, 	OHHH+H:Q78		**+h6D;;=#k$7G$HIIggooc$i>G dD%s4=;Q;Q;S7TU
 M39NPUW^_#$[\\"3DLLARARSIAsA||q %#&A(1$MNN/	Or1   c                   t        j                  |      D ]  \  }}}|j                  ||d      }t         j                  j	                  |      st        j
                  |       |D ]  }t         j                  j                  ||      }t         j                  j                  ||      }	t         j                  j	                  |	      r	 t        j                  |	       t        j                  ||         y# t        $ r< t        j                  |	t        j                         t        j                  |	       Y _w xY w)zG
        Copy directory tree. Overwrites also read only files.
        r   N)r   r  replacerp   r=  r  r   r  PermissionErrorchmodstatS_IWUSRrf  copy2)
r   root_src_dirroot_dst_dirr  r]   r  dst_dirfile_src_filedst_files
             r/   rH  zResolver.copy_treeG  s     "$!6 	0GQoolL!DG77>>'*G$ 	077<<777<<777>>(+,		(+ Xw/	0		0 + ,4<<8		(+,s   	C99AD>=D>r   )r   r   r   r   )r&  r   r   r   )r,  z
'Resolver'r   r   )r   r   r   z)T.Tuple[T.Optional[str], T.Optional[str]])r&  r   r3  r   r   T.Optional[str])r6  T.List[str]r   r  r*  )r   r   rO  r:  r   zT.Tuple[str, Method]r@  )ru  r   r   r   )ro   r   r   zT.Optional[T.Tuple[str, str]])rI   r   r   T.Tuple[str, str])T)r   r   rp   r   r  r   r   r   F)r   r   r  r   r  r   r   r   )r   r   r   r   )r  r   r  r   r   r   )'r}   r~   r   __annotations__r   r   defaultr   r   rJ   r   r  r  r
  r  r  r(  r-  r1  r4  r7  rU  r$  rG  rI  rJ  rF  rt  rK  rL  r  r  r  r  r  rd  rM  rN  rH  r   r1   r/   r   r     s    OKJ"**Ix*M4 ND FDM .-c"4	Ah T#&FPY%gNQ(	4F:'x	g(#&#,2&O40r1   r   )r-   r   r   zurllib.parse.ParseResult)FF)rI   r   rJ   r   rK   r   r   z'http.client.HTTPResponse')rJ   r   r   bytes)rJ   r   r   rU   )rd   r   re   r   rf   r   rg   r   rJ   r   r   r   )rt   r   r   r  )r   r   r   r   r   r   r  )r   r  r   r   r   r   r   r   )D
__future__r   r3   r   r  dataclassesr   urllib.requestr$   urllib.errorurllib.parser   r   rf  r  r  r  rF   r   r  typingr9   rC  rV   base64r   r   pathlibr	   r
   r   r   r   r   r   r   r   r   r   interpreterbaser   r   TYPE_CHECKINGhttp.clientr8   typing_extensionsr   MethodrC   r+   ImportErrorr>   r*   r   r  r  r0   rP   rS   rZ   ri   rz   r(   r   r   r   r   r   r   r1   r/   <module>r     s/   #   !    	      
        "   d d ( ( ??)./F G - (	W	Z@C?"	N 		M 	v6 v6p$ e|0 |0 |0G  Gs   1D* *D43D4