
    <h                       S SK Jr  S SKJrJr  S SKrS SKrS SKr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  S SKrS SKrS SKrSSKJr  SSKJr  SS	KJrJrJrJrJr  SS
KJ r J!r!J"r"J#r#J$r$J%r%  \RL                  (       ar  S SK'J(r(  SSKJ)r)  \RT                  \RV                     r, " S S\(5      r- " S S\-5      r. " S S\-5      r/ " S S\-5      r0 " S S\-5      r1 " S S\-5      r2 " S S\-5      r3SRi                  \"5      r5S(S jr6 " S S5      r7\" SS 9 " S! S"5      5       r8S)S# jr9S*S+S$ jjr:S,S% jr;S-S& jr<S.S' jr=g)/    )annotations)	dataclassInitVarN)ThreadPoolExecutor)Path   )mlog)IntrospectionInterpreter)	quiet_gitGitException
Popen_safeMesonExceptionwindows_proof_rmtree)ResolverWrapException	ALL_TYPESparse_patch_urlupdate_wrap_fileget_releases)Protocol)PackageDefinitionc                  R    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	\S
'   S\S'   Srg)	Arguments   str	sourcedirintnum_processesT.List[str]subprojectstypeszT.Callable[[], bool]subprojects_funcboolallow_insecure N__name__
__module____qualname____firstlineno____annotations____static_attributes__r%       x/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/msubprojects.pyr   r      s$      
..r-   r   c                  *    \ rS rSr% S\S'   S\S'   Srg)UpdateArguments&   r#   rebaseresetr%   Nr&   r%   r-   r.   r0   r0   &   s    r-   r0   c                  *    \ rS rSr% S\S'   S\S'   Srg)UpdateWrapDBArguments*   r#   forcezT.Dict[str, T.Any]releasesr%   Nr&   r%   r-   r.   r5   r5   *   s    $$r-   r5   c                  *    \ rS rSr% S\S'   S\S'   Srg)CheckoutArguments.   r#   br   branch_namer%   Nr&   r%   r-   r.   r:   r:   .   s    r-   r:   c                  *    \ rS rSr% S\S'   S\S'   Srg)ForeachArguments2   r   commandr   argsr%   Nr&   r%   r-   r.   r?   r?   2   s    r-   r?   c                  *    \ rS rSr% S\S'   S\S'   Srg)PurgeArguments6   r#   confirminclude_cacher%   Nr&   r%   r-   r.   rD   rD   6   s    r-   rD   c                  *    \ rS rSr% S\S'   S\S'   Srg)PackagefilesArguments:   r#   applysaver%   Nr&   r%   r-   r.   rI   rI   :   s    
r-   rI   , c                   U R                   S:X  aN  [        R                  " U S5       nUR                  5        Vs1 s H  o1UR                  -  iM     nnS S S 5        U$ [
        R                  " U 5       nU Vs1 s H  o1UR                  -  iM     nnS S S 5        U$ s  snf ! , (       d  f       W$ = fs  snf ! , (       d  f       W$ = f)Nz.zipr)suffixzipfileZipFileinfolistfilenametarfileopenname)path	base_pathzip_archiveiarchive_filestar_archives         r.   read_archive_filesr^   @   s    {{f__T3';=H=Q=Q=ST=S3=SMT (
  \\$;9DEA/ME  	 U ('
  F  s:   B#BB#5B::B5B:B##
B25B::
C	c                  F    \ rS rSrS	S jrS
S jrS
S jrSS jrSS jrSr	g)LoggerI   c                ~    [         R                  " 5       U l        Xl        SU l        [        5       U l        SU l        g )Nr    )	threadingLocklocktotal_taskscompleted_taskssetrunning_tasksshould_erase_line)selfrg   s     r.   __init__Logger.__init__J   s0    NN$	& ),!#r-   c                ^    U R                   (       a  [        U R                   SS9  SU l         g g )Nendrc   )rk   printrl   s    r.   flushLogger.flushQ   s(    !!$((d3%'D" "r-   c                N   SU R                    SU R                   3n[        R                  " 5       R                  [        U5      -
  nSR                  U R                  5      n[        U5      S-   U:  a  US US-
   S-   nUSU S3-   n[        U R                  US	S
S9  SU l	        g )Nz
Progress: z / rM         ...z ()rc   rp   )seprr   z[K)
rh   rg   shutilget_terminal_sizecolumnslenjoinrj   rs   rk   )rl   linemax_lenrunnings       r.   print_progressLogger.print_progressV   s    D001T5E5E4FG**,44s4y@))D../w<!g%lw{+e3G7)1o%d$$d=!)r-   c                    U R                      U R                  R                  U5        U R                  5         S S S 5        g ! , (       d  f       g = fN)rf   rj   addr   )rl   	wrap_names     r.   startLogger.start`   s3    YY""9-! YYs   ,A
Ac                2   U R                      U R                  5         U H  u  p4[        R                  " U0 UD6  M     U R                  R                  U5        U =R                  S-  sl        U R                  5         S S S 5        g ! , (       d  f       g = f)Nr   )rf   ru   r	   logrj   removerh   r   )rl   r   	log_queuerB   kwargss        r.   doneLogger.donee   sj    YYJJL )$)&) !*%%i0  A% ! YYs   A2B
B)rh   rf   rj   rk   rg   N)rg   r   returnNoner   r   )r   r   r   r   )r   r   r   z,T.List[T.Tuple[mlog.TV_LoggableList, T.Any]]r   r   )
r'   r(   r)   r*   rm   ru   r   r   r   r,   r%   r-   r.   r`   r`   I   s    $(
*"
"r-   r`   F)eqc                  n   \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
\S'   S)S jrS*S jrS+S jr\S,S j5       r	S+S jr
S+S jrS-S jrS.S jrS/S jrS/S jrS0S jrS0S jrS1S2S jjrS0S jrS0S jrS3S jrS+S jrS/S jrS+S jrS+S jrS+S  jrS+S! jrS+S" jrS+S# jrS+S$ jr\S4S% j5       rS+S& jr S'r!g()5Runnero   r`   loggerzInitVar[Resolver]rO   r   wrapr   repo_dir'Arguments'optionsc                l   [         R                   " U5      U l        [        R                  R	                  UR
                  U R                  R                  5      U R                  l        U R                  U R                  l        U R                  R                  R                  U 5      U l        / U l        g r   )copywrap_resolverosrX   r   subdir_rootr   	directorydirnamer   r"   __get__
run_methodr   )rl   rO   s     r.   __post_init__Runner.__post_init__w   su     "YYq\%'WW\\!--ATAT%U""&))040M0M0U0UVZ0[GIr-   c                P    U R                   R                  [        U5      U45        g r   )r   appendlist)rl   rB   r   s      r.   r   
Runner.log   s    tDz623r-   c                   U R                   R                  U R                  R                  5         U R	                  5       nU R                   R                  U R                  R                  U R                  5        U$ ! [
         a;  nU R                  [        R                  " S5      [        U5      5        Sn S nAN|S nAff = f)NzError:F)r   r   r   rW   r   r   r   r	   redr   r   r   )rl   resultes      r.   run
Runner.run   s    $))..)	__&F 	8	  	HHTXXh'Q0F	s   A= =
C1B==Cc                8    [        U R                  5      U l        g r   )r   r$   r8   r   s    r.   pre_update_wrapdbRunner.pre_update_wrapdb   s    '(>(>?r-   c                6   U R                  SU R                  R                   S35        [        R                  " SU R
                  5      nUR                  R                  U R                  R                  5      nU(       d  U R                  S5        g U R                  R                  S5      nUR                  SS5      u  pEUS   S   nUR                  SS5      u  pX:w  d  X:w  a  U R                  R                   n
U
(       dK  ["        R$                  R'                  U R                  R(                  U R                  R                   S35      n
[+        XR                  R                  XUR,                  5        U R                  S[        R.                  " U5      5        gU R                  S[        R.                  " U5      5        g! [         a@    UR                  (       d(  U R                  S	[        R                  " S
5      5         gS =pE GNP[         a|     U R                  R                  S5      n[        U5      u  pE GN! [         aB    UR                  (       d)  U R                  S	[        R                  " S5      5          gS =pE  GNf = ff = f)Nz#Checking latest WrapDB version for rz   r5   z  -> Wrap not found in wrapdbTwrapdb_version-r     ->z<Malformed wrapdb_version field, use --force to update anywayF	patch_urlzACould not determine current version, use --force to update anywayversionsr   z.wrapz  -> New version downloaded:z  -> Already at latest version:)r   r   rW   Tcastr   r8   getsplit
ValueErrorr7   r	   r   r   r   rsplitoriginal_filenamer   rX   r   subprojects_dirr   r$   blue)rl   r   infor   branchrevisionr   latest_version
new_branchnew_revisionrT   s              r.   update_wrapdbRunner.update_wrapdb   s   6tyy~~6FcJK&&0$,,? ##DIINN3HH45	)!YY]]+;<N-33C;F& j)!,#1#8#8a#@ 
<#;yy22H77<<		(A(AdiinnEUUZC[\Xyy~~'$335 HH3TYY~5NO  HH6		.8QR?  	%==*h!ij $$FX 
	)) IIMM+6	#29#=   )}}HHVTXX.q%rs $((	)
	)sD   /G
 
AJJ	J(IAJ	JJJJJc           	        [         R                  " SU R                  5      nUR                  (       aW  [	        U R
                  5         U R                  R                  U R                  R                  5        U R                  S5        gU R                  S5        U R                  S5        g! [         a9  nU R                  S[        R                  " [        U5      5      5         S nAgS nAff = f)Nr0   z  -> New version extractedTr   Fzd  -> Subproject has not changed, or the new source/patch needs to be extracted on the same location.z<     Pass --reset option to delete directory and redownload.)r   r   r   r3   r   r   r   resolver   rW   r   r   r	   r   r   )rl   r   r   s      r.   update_fileRunner.update_file   s    &&*DLL9== !/""**499>>:56 HH{|HHST ! #a&!12s   	A B- -
C07/C++C0c                0    [        XR                  SS9S   $ )NT)checkr   )r   r   rl   cmds     r.   
git_outputRunner.git_output   s    mm48;;r-   c                D    U R                  U R                  U5      5        g r   )r   r   r   s     r.   git_verboseRunner.git_verbose   s    %&r-   c                    [        / SQU R                  5      S   R                  5       (       a  U R                  / SQ5        g g )N)statusz--porcelain":!/.meson-subproject-wrap-hash.txtr   )stashpushz--allr   .)r   r   stripr   rt   s    r.   	git_stashRunner.git_stash   s?     TVZVcVcdefgmmoo bc pr-   c           
     J   U R                  / SQ5      nUR                  S5       Vs/ s H  o"R                  5       PM     nnU R                  S[        R
                  " US   5      [        R                  " US   5      US   [        R                  " US   5      5        g s  snf )N)showz--quietz!--pretty=format:%h%n%d%n%s%n[%an]
r   r   r      rx   )r   r   r   r   r	   yellowr   r   )rl   commit_messagespartss       r.   git_showRunner.git_show   s~    )ab$2$8$8$>?$>q$>?U1X.q0BE!HdiiX]^_X`Nab @s   B c           	         U R                  / SQ5        g! [         a  nU R                  / SQ5        U R                  S[        R                  " U R
                  5      S[        R                  " U5      S5        U R                  [        R                  " UR                  5      5        U R                  [        R                  " [        U5      5      5         S nAgS nAff = f)N)-crebase.autoStash=truer2   
FETCH_HEAD)r   r   r2   z--abortz  -> Could not rebaseontoz
-- abortedFT)	r   r   r   r	   boldr   r   outputr   rl   r   r   s      r.   
git_rebaseRunner.git_rebase   s    	OOST   	OOPQHH,dii.FPTPYPYZbPc!#HHTXXahh'(HHTXXc!f%&	s    
C!B7CC!c           	     R    U R                  5         U R                  / SQ5        U R                  R                  U R                  R
                  5        U R                  R                  5         g! [         a  nU R                  S[        R                  " U R                  5      S[        R                  " U5      5        U R                  [        R                  " UR                  5      5        U R                  [        R                  " [        U5      5      5         S nAgS nAff = f)N)r3   z--hardr   z  -> Could not resettoFT)r   r   r   apply_patchr   rW   apply_diff_filesr   r   r	   r   r   r   r   r   r   s      r.   	git_resetRunner.git_reset   s    	 NNOO=>**499>>://1   	HH+TYYt}}-EtTYYW_M`aHHTXXahh'(HHTXXc!f%&		s   A,A/ /
D&9B#D!!D&c           	         SS/nU(       a  UR                  S5        X1S/-  n U R                  5         U R                  U5        g! [         a  nU R	                  S[
        R                  " U5      S[
        R                  " U R                  5      5        U R	                  [
        R                  " UR                  5      5        U R	                  [
        R                  " [        U5      5      5         S nAgS nAff = f)	Ncheckoutz--ignore-other-worktrees-bz--z  -> Could not checkoutinFT)r   r   r   r   r   r	   r   r   r   r   r   )rl   r   creater   r   s        r.   git_checkoutRunner.git_checkout	  s    56JJt$		 NNOOC    	HH.		(0CT499UYUbUbKcdHHTXXahh'(HHTXXc!f%&		s   !A 
C=B#C88C=c                X    U R                  U5      nU(       a  U R                  U5      nU$ r   )r  r   rl   r   successs      r.   git_checkout_and_resetRunner.git_checkout_and_reset  s*     ##H-nnX.Gr-   c                X    U R                  U5      nU(       a  U R                  U5      nU$ r   )r  r   r  s      r.   git_checkout_and_rebaseRunner.git_checkout_and_rebase"  s*     ##H-ooh/Gr-   c                    / SQn[        X R                  5      u  p4U(       d  g UR                  SSS9S   nSSU/n[        X R                  5      u  p6UR	                  5       U;   $ ! [         a     gf = f)	N)	rev-parse--abbrev-refz--symbolic-full-namez@{upstream}F/r   )maxsplitr   remoteget-url)r   r   r   
IndexErrorr   )rl   urlsr   retupstreamr  
remote_urls          r.   git_branch_has_upstreamRunner.git_branch_has_upstream*  s    R!#}}5	^^C!^4Q7F F+#C7!T))	  		s   A' '
A43A4c           	     <   [         R                  " SU R                  5      n[        R                  R                  [        R                  R                  U R                  S5      5      (       d  UR                  (       aV  [        U R                  5         U R                  R                  U R                  R                  5        U R                  5         gU R!                  S5        U R!                  S5        gU R                  R(                  R+                  S5      nUR-                  5       S	:w  a  UOS	nU R                  R(                  R+                  S
5      nU R                  R(                  R+                  S5      nU(       a  U(       d  U R!                  S5        g U R/                  / SQ5      R1                  5       nUR                  (       a4   U R/                  SSSU/5        U(       a  U R/                  SSSSU/5        OXW:w  a  U R!                  SU< SU< 35        g U R/                  / SQ5      R1                  5       nUS	:w  a  UOSnU R                  R9                  U5      (       a9  [;        SSUS-   /U R                  5      S   (       a  U R/                  SSU/5        O Sn	S n
U R/                  SS!U	S!U
SU/5        US:X  a5  UR                  (       a  U R=                  U5      nOU R?                  U5      nOX:X  a5  UR                  (       a  U RA                  U5      nOoU RC                  U5      nO]UR                  (       a  U R=                  U5      nO:U RE                  XV15      (       a  U R?                  U5      nOU RC                  U5      nU(       a  U R                  5         U$ ! [         a9  nU R!                  S["        R$                  " ['        U5      5      5         S nAgS nAff = f! [2         a  nU R!                  S["        R4                  " U R                  5      5        U R!                  ["        R$                  " UR6                  5      5        U R!                  ["        R$                  " ['        U5      5      5         S nAgS nAff = f! [2         a  nU R!                  S["        R4                  " U R                  5      5        U R!                  ["        R$                  " UR6                  5      5        U R!                  ["        R$                  " ['        U5      5      5         S nAgS nAff = f! [2         a  nU R!                  S["        R4                  " U R                  5      5        U R!                  ["        R$                  " UR6                  5      5        U R!                  ["        R$                  " ['        U5      5      5         S nAgS nAff = f! [2         a  nU R!                  S"["        R4                  " U5      S#["        R4                  " U R                  5      5        U R!                  ["        R$                  " UR6                  5      5        U R!                  ["        R$                  " ['        U5      5      5         S nAgS nAff = f)$Nr0   z.gitTr   Fz  -> Not a git repository.z7Pass --reset option to delete directory and redownload.r   HEADurlzpush-urlz"  -> No revision or URL specified.)r  r  originz.  -> Failed to determine current origin URL inr  zset-urlr   z--pushz"  -> Failed to reset origin URL inz  -> URL changed from  to )r  r  r  rc   z*  -> Failed to determine current branch inr  z--verifyz	^{commit}r   fetchr   z#+refs/heads/*:refs/remotes/origin/*z+refs/tags/*:refs/tags/*z--refmapz  -> Could not fetch revisionr  )#r   r   r   r   rX   existsr   r   r3   r   r   r   r   rW   update_git_doner   r   r	   r   r   valuesr   upperr   r   r   r   r   is_git_full_commit_idr   r
  r  r   r   r  )rl   r   r   revision_valr   r  push_url
origin_urlr   heads_refmaptags_refmapr	  s               r.   
update_gitRunner.update_git7  s   &&*DLL9ww~~bggll4==&ABB}}$T]]3!&&..tyy~~>((*
 56RSyy''++J7#/#5#5#76#A<vii""5)99##''
3sHH9:	)HIOOQJ ==9h DEOOXy(Hh$WX HH-j^4wGH	__%JKQQSF%/VRF 33H==;
H{4JKT]][\]^ OOWc845  E8*lJP[]ego pq R<}}55h?66x@ }}..2//(3 }}55h?//@@"::8DG"ooh7G  "} % !HHVTXXc!f%56 !"  	HHEtyyQUQ^Q^G_`HHTXXahh'(HHTXXc!f%&		   =tyy?WX!((+,#a&)*	  	HHA499T]]C[\HHTXXahh'(HHTXXc!f%&		,   8$))H:MtUYU^U^_c_l_lUmn!((+,#a&)*	s|   ?N2  !O8 2R &+U  +W$ 2
O5</O00O58
RBRR
T=&BT88T= 
W!
BWW!$
Z.B#ZZc                J    U R                  / SQ5        U R                  5         g )N)	submoduleupdatez
--checkoutz--recursive)r   r   rt   s    r.   r$  Runner.update_git_done  s    LMr-   c                x   U R                   R                  S5      nUR                  5       S:X  a"  [        R                  " SS/U R
                  S9  g[        R                  " SSU/U R
                  S9S:w  aC  [        R                  " SS/U R
                  S9  [        R                  " SSU/U R
                  S9  g)	Nr   tiphgpullcwdr  r   T)r   r   lower
subprocesscallr   
check_call)rl   revnos     r.   	update_hgRunner.update_hg  s    		j);;=E! OOT6N>
  j%8dmmLPQQ%%tVn$--H%%tZ&?T]]Sr-   c                6   U R                   R                  S5      n[        SSSSU R                  /5      u  p#nUnXA:X  a  gUR	                  5       S:X  a"  [
        R                  " SS/U R                  S9  g[
        R                  " SSS	U/U R                  S9  g)
Nr   svnr   z--show-itemTheadr1  r7  z-r)r   r   r   r   r9  r:  r;  r<  )rl   r=  _outcurrent_revnos        r.   
update_svnRunner.update_svn  s    		j)v}j$--XY	!;;=F" OOUH-4==A  !!5(D%"@dmmTr-   c                   U R                  SU R                  R                   S35        Sn[        R                  R                  U R                  5      (       d.  U R                  S5        U R                  R                  (       + nGOU R                  R                  S:X  a  U R                  5       nOU R                  R                  S:X  a  U R                  5       nOU R                  R                  S:X  a  U R                  5       nOU R                  R                  S:X  a  U R                  5       nOkU R                  R                  c-  U R                  S	5        U R                  R                  (       + nO'U R                  S
U R                  R                  S5        U(       aS  [        R                  R                  U R                  5      (       a%  U R                  R                  U R                  5        U$ )Nz	Updating rz   Fz  -> Not used.filegitr5  rA  z/  -> Cannot update subproject with no wrap filez  -> Cannot update
subproject)r   r   rW   r   rX   isdirr   r   r    typer   r-  r>  rF  update_hash_cache)rl   r	  s     r.   r1  Runner.update  sG   9TYY^^,C01ww}}T]]++HH%&,,222GYY^^v%&&(GYY^^u$oo'GYY^^t#nn&GYY^^u$oo'GYY^^#HHFG,,222GHH)499>><Hrww}}T]]33II''6r-   c                   [         R                  " SU R                  5      nU R                  R                  S:w  d.  [
        R                  R                  U R                  5      (       d  gUR                  (       a  UR                  OU R                  R                  S5      nU(       d  gU R                  SU SU R                  R                   S35        U R                  X!R                  S9(       a  U R                  5         gg	)
Nr:   rJ  Tr   z	Checkout z in rz   )r  F)r   r   r   r   rM  r   rX   rL  r   r=   r   r   rW   r  r<   r   )rl   r   r=   s      r.   r  Runner.checkout  s    &&,dll;99>>U""''--*F*F-4-@-@g))diimmT^F_9[Mdiinn-=SAB[;MMOr-   c           	        U R                  SU R                  R                   S35        [        R                  R                  U R                  5      (       a  U R                  S5        g U R                  R                  U R                  R                  5        U R                  S5        g! [         a9  nU R                  S[        R                  " [        U5      5      5         S nAgS nAff = f)Nz	Download rz   z  -> Already downloadedTz	  -> doner   F)r   r   rW   r   rX   rL  r   r   r   r   r	   r   r   )rl   r   s     r.   downloadRunner.download  s    9TYY^^,C0177==''HH./	&&tyy~~6HH[!   	HHVTXXc!f-.	s   +A B, ,
C/6/C**C/c                   [         R                  " SU R                  5      nU R                  SU R                   35        [
        R                  R                  U R                  5      (       d  U R                  S5        gUR                  /UR                  -   n[        U[        R                  U R                  S9u  p4nUR                  S:w  ab  SR                  SR                  U5      UR                  5      nU R                  S	[         R"                  " U5      5        U R                  US
S9  gU R                  US
S9  g)Nr?   zExecuting command in   -> Not downloaded yetT)stderrr8  r   z.Command '{}' returned non-zero exit status {}. z  -> rc   rq   F)r   r   r   r   r   r   rX   rL  rA   rB   r   r:  STDOUT
returncodeformatr   r	   r   )rl   r   r   prD  rC  err_messages          r.   foreachRunner.foreach  s    &&+T\\:(89ww}}T]]++HH./',,.s:+<+<$--P	<<1JQQRURZRZ[^R_abamamnKHHWdhh{34HHSbH!"r-   c                   [         R                  " SU R                  5      nU R                  R                  (       d  gU R                  R
                  (       ag  [        U R                  R                  5      R                  5       nUR                  (       a  UR                  5         [        R                  " SU 35        UR                  (       Ga0  [        U R                  R                  5      R                  5       n X0R                  R!                  S5      -  nUR#                  5       (       a5  UR                  (       a  UR                  5         U R                  SU 35         X0R                  R!                  S5      -  nUR#                  5       (       a5  UR                  (       a  UR                  5         U R                  SU 35         ['        UR)                  5       5      (       d  [+        [-        U5      5        [        U R0                  5      nUR2                  R                  5       UR4                  -  nUR7                  5       (       a6  UR                  (       a  UR                  5         U R                  SU 35        gUR9                  5       (       d  g UR                  (       a  [+        [-        U5      5        U R                  SU 35        g! [$         a     GNf = f! [$         a     GN)f = f! [.         a     GNf = f! [:         a&  n[        R<                  " SU SU 35         S nAgS nAff = f)	NrD   Tz	Deleting source_filenamepatch_filenamezUnable to remove: z: F)r   r   r   r   rM  
redirectedr   r   r   rF   unlinkr	   r   rG   r   cachedirr   is_filer   anyiterdirr   r   FileNotFoundErrorr   parentrW   
is_symlinkis_dirOSErrorerror)rl   r   wrapfilepackagecachesubproject_cache_filesubproject_patch_filesubproject_source_dirr   s           r.   purgeRunner.purge  s   &&)4<<8 yy~~99DII778@@BH!HHy
+,    2 2 ; ;<DDFL(4yy}}EV7W(W%(0022-446HHy)>(?@A(4yy}}EU7V(V%(0022-446HHy)>(?@A<//122(\):;
 !%T]] 3 5 < < D D FI^IcIc c !++--%,,.HHy!6 789$++--	$S)>%?@HHy!6 789
 W !  !  % ,  	JJ+,A+B"QCHI	sP    A'K (A'K+ 2K<  9L 
K('K(+
K98K9<
L
	L

L=L88L=c                    U R                   (       d-  [        R                  " S5        [        R                  " S5        g g )Nrc   z<Nothing has been deleted, run again with --confirm to apply.)rF   r	   r   r   s    r.   
post_purgeRunner.post_purgeJ  s&    HHRLHHST r-   c                   [         R                  " SU R                  5      nUR                  (       a  UR                  (       a  [        S5        gUR                  (       a  U R                  SU R                  R                   S35        [        R                  R                  U R                  5      (       d  U R                  S5        gU R                  R                  U R                  R                  5        gUR                  (       Ga  SU R                  R                  ;  a  [         R"                  " S	5        gS
U R                  R                  ;  a  [         R"                  " S5        g[%        U R                  R&                  U R                  R                  S
   5      n[)        U R                  R                  R+                  SS5      5      n[%        U R                  5      n[%        U R                  R,                  U R                  R                  S   5      nU(       a  UOUR.                  n[1        X&5      n[3        UR5                  S5      5      nU R                  SU R                  R                   SU S35        [6        R8                  " U5        X-
   H_  n	U	R;                  5       (       d  M  U	R=                  U5      n
XZ-  nUR.                  R?                  SSS9  [6        R@                  " X5        Ma     g)NrI   z0error: --apply and --save are mutually exclusiveFz#Re-applying patchfiles overlay for rz   rV  Tpatch_directoryz-can only save packagefiles to patch_directoryra  z-can only save packagefiles from a [wrap-file]lead_directory_missingz**/*zSaving r!  )parentsexist_ok)!r   r   r   rK   rL   rs   r   r   rW   r   rX   rL  r   r   r   r%  r	   rn  r   re  r#   r   filesdirrj  r^   ri   globr}   rmtreerf  relative_tomkdircopyfile)rl   r   archive_pathr{  r   packagefilesrY   r\   directory_filessrc_pathrel_pathdst_paths               r.   r  Runner.packagefilesP  s$   &&0$,,?==W\\DE==HH:499>>:J#NO77==//23**499>>:<<< 		(8(88

JK 		(8(88

JK 2 2 ; ;TYY=M=MN_=`aL%)$))*:*:*>*>?WY^*_%`"T]]+I		 2 2DII4D4DEV4WXL%;	AQAQI.|GM!).."89OHHwtyy~~.d<.DEMM,'+;''))#//	:'2%%dT%B3 < r-   )r   r   r   N)rO   r   r   r   )rB   zmlog.TV_Loggabler   zT.Anyr   r   )r   r#   )r   z'UpdateWrapDBArguments'r   r   )r   r   r   r   )r   r   r   r   r   )r   r   r   r#   )F)r   r   r  r#   r   r#   )r  ri   r   r#   )r   z'PurgeArguments'r   r   )"r'   r(   r)   r*   r+   r   r   r   staticmethodr   r   r   r   r   r   r   r   r   r  r
  r  r  r-  r$  r>  rF  r1  r  rS  r^  rt  rw  r  r,   r%   r-   r.   r   r   o   s    N
MJ4 @ @-^,<'dc

"*hT2$@D U U
'r-   r   c                    U R                  SSSS9  U R                  SSS[         S3S9  U R                  S	S
S [        SS9  U R                  SSSSS9  g )Nz--sourcedirr   zPath to source directory)defaulthelpz--typesrc   z?Comma-separated list of subproject types. Supported types are: z (default: all)z-jz--num-processesz2How many parallel processes to use (Since 0.59.0).)r  rM  r  z--allow-insecureF
store_truez"Allow insecure server connections.r  actionr  )add_argumentALL_TYPES_STRINGr   )r\  s    r.   add_common_argumentsr  z  sx    NN=#2  4NN9bYZjYkkz{  }NN4*DsL  NNN%u\<  >r-   c           
     h    SnU(       a  U R                  USSSS/ US9  g U R                  SSS/ US9  g )	Nz4Patterns of subprojects to operate on (default: all)r    patternr   r   )destmetavarnargsr  r  r  *)r  r  r  r  )r  )r\  rW   helpstrs      r.   add_subprojects_argumentr    sI    DG	t-!T\! 	 	1 	
}isB# 	 	%r-   c                    U R                  SSS9nUR                  SSSSS9  [        U5        [        U5        UR	                  [
        R                  S	9  UR	                  [
        R                  S
9  U$ )Nr1  z,Update wrap files from WrapDB (Since 0.63.0)r  z--forceFr  z4Update wraps that does not seems to come from WrapDBr  r"   )pre_func)
add_parserr  r  r  set_defaultsr   r   r   )
subparsersr\  s     r.   add_wrap_update_parserr    sp    h-[\ANN9eLN  PQNNF$8$8N9NNF44N5Hr-   c                ,   U R                  SSS9nSUl        UR                  SSS9nUR                  SSS	S
S9  UR                  SSS	SS9  [	        U5        [        U5        UR                  [        R                  S9  UR                  SSS9nUR                  SSS	SS9  UR                  SSSS9  [	        U5        [        U5        UR                  [        R                  S9  UR                  SSS9n[	        U5        [        U5        UR                  [        R                  S9  UR                  SSS9nUR                  SSSS9  UR                  S[        R                  [        R                  S9  [	        U5        [        US 5        UR                  [        R                  S9  UR                  S!S"S9n[	        U5        [        U5        UR                  S#S	SS$S%9  UR                  S&S	SS'S%9  UR                  [        R                  S9  UR                  [        R                   S(9  UR                  S)S*S9n[	        U5        [        U5        UR                  S+S	SS,S%9  UR                  S-S	SS.S%9  UR                  [        R"                  S9  g )/NCommandsrA   )titler  Tr1  z&Update all subprojects from wrap filesr  z--rebaser  zeRebase your branch on top of wrap's revision. Deprecated, it is now the default behaviour. (git only)r  z--resetFzBCheckout wrap's revision and hard reset to that commit. (git only)r  r  zCheckout a branch (git only)r  zCreate a new branchr=   ?zMName of the branch to checkout or create (default: revision set in wrap file))r  r  rS  zEnsure subprojects are fetched, even if not in use. Already downloaded subprojects are not modified. This can be used to pre-fetch all subprojects and avoid downloads during configure.r^  z/Execute a command in each subproject directory.zcommand ...z/Command to execute in each subproject directory)r  r  rB   z--filterrt  z*Remove all wrap-based subproject artifactsz--include-cachez Remove the package cache as well)r  r  r  z	--confirmz+Confirm the removal of subproject artifacts)	post_funcr  zManage the packagefiles overlayz--applyz$Apply packagefiles to the subprojectz--savez%Save packagefiles from the subproject)add_subparsersrequiredr  r  r  r  r  r   r1  r  rS  argparse	REMAINDERSUPPRESSr^  rt  rw  r  )parserr  r\  s      r.   add_argumentsr    s   &&Zi&HJJh-UVANN:tLR  S NN9eL]  _QNNFMMN2j/MNANN4|-  /NN=g  iQNNFOON4j 0E 	FA QNNFOON4i._`ANN9mI  KNN6!3!3 ))  +Q
+NNFNNN3g,XYAQNN$\5OqNrNN;|UIvNwNNFLLN1NNV..N/n3TUAQNN9\5GmNnNN8L%FmNnNNF$7$7N8r-   c                	  ^ [         R                  R                  [         R                  R                  U R                  5      5      n[         R                  R                  [         R                  R                  US5      5      (       d-  [        R                  " S[        R                  " U5      S5        g[        R                  " 5          [        USS5      nUR                  5         UR                  5       =(       d    SnS S S 5        [         R                  R                  [         R                  R                  UW5      5      (       d-  [        R                  " S[        R                  " U5      S5        g	[!        XS
U R"                  S
S9nU R$                  (       aW  UR&                  R)                  5        V^Vs/ s H.  u  mn[+        U4S jU R$                   5       5      (       d  M,  UPM0     nnnO#[-        UR&                  R/                  5       5      nU R0                  (       a9  U R0                  R3                  S5       Vs/ s H  oR5                  5       PM     snO/ n	U	 H#  nU[6        ;  d  M  [9        SU< S[:         35      e   / n
/ n[<        R>                  " 5       n[<        R@                  " U5        [C        U RD                  5      nU	(       a#  U Vs/ s H  ofRF                  U	;   d  M  UPM     nn[I        U SS 5      nU(       a  U" U 5        [K        [M        U5      5      nU H}  n[O        XURP                  5      RS                  5       n[U        XUUU 5      nURW                  UURX                  5      nU
R[                  U5        UR[                  UR\                  5        M     UR_                  [<        R`                  " U
6 5      nURc                  5         [I        U SS 5      nU(       a  U" U 5        [e        UU5       VVs/ s H  u  nnU(       a  M  UPM     nnnU(       a,  SnUSR                  U5      -  n[        Rf                  " U5        [M        U5      $ ! , (       d  f       GNk= fs  snnf s  snf s  snf s  snnf )Nzmeson.build	Directoryz-does not seem to be a Meson source directory.r   rc   noner    z"does not seem to have subprojects.r   T)wrap_frontendr$   silentc              3  R   >#    U  H  n[         R                   " TU5      v   M     g 7fr   )fnmatch).0patrW   s     r.   	<genexpr>run.<locals>.<genexpr>  s!     R>Qsc22>Qs   $',zUnknown subproject type z, supported types are: r  r  zlPlease check logs above as command failed in some subprojects which could have been left in conflict state: rM   )4r   rX   relpathrealpathr   isfiler   r	   rn  r   
no_loggingr
   load_root_meson_fileextract_subproject_dirrL  r   r   r$   r    wrapsitemsrg  r   r%  r!   r   r   r   r   r  asyncionew_event_loopset_event_loopr   r   rM  getattrr`   r   r   r   as_posixr   run_in_executorr   r   rW   run_until_completegatherru   zipwarning)r   
source_dirintrsubproject_dirrO   rW   r   r  tr!   tasks
task_namesloopexecutorr  r   r   runnertaskresultsr  r	  failuresms        `                  r.   r   r     sT   !1!1'2C2C!DEJ77>>"'',,z=ABB

;		* 57fg		'
B?!!#446G- 
 77==j.ABBdii
35YZ4PWPfPfostA() T*$Rg>Q>QRR  T QWW^^%&=D]] 3 3C 89 81WWY 89PREI #;A5@WXhWi!jkk  (*E J!!#D4 !'"7"78H"'>%$99+=%>w
D1HCJFz4>>BKKM4':##Hfjj9T$))$  %%gnne&<=G
LLNd3I'*-j'*BR*Bw'*BHRz	TYYx  Qx=Y 
	T : ?  Ss6   7Q'?+Q9.Q9	Q?R6RR	 R	'
Q6)rX   r   rY   r   r   zT.Set[Path])r\  argparse.ArgumentParserr   r   r   )r\  r  rW   r   r   r   )r  z'SubParsers'r   r  )r  r  r   r   )r   r   r   r   )>
__future__r   dataclassesr   r   r   r:  r  r  r  rd   r   r}   concurrent.futures.threadr   pathlibr   typingr   rU   rQ   rc   r	   astr
   mesonlibr   r   r   r   r   	wrap.wrapr   r   r   r   r   r   TYPE_CHECKINGtyping_extensionsr   r   _SubParsersActionArgumentParser
SubParsersr   r0   r5   r:   r?   rD   rI   r   r  r^   r`   r   r  r  r  r  r   r%   r-   r.   <module>r     s   " *        8      ) _ _I I ??*,++H,C,CDJH ) %	 %I 9  	  99Y' #" #"L eG G GT>%49l1r-   