
    -Ph/                       d dl mZ d dlmZ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mZ d dlm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mZmZmZ dd
lmZm Z m!Z!m"Z"m#Z#m$Z$ ej%        rd dl&m'Z' ddlm(Z( ej)        ej*                 Z+ G d de'          Z, G d de,          Z- G d de,          Z. G d de,          Z/ G d de,          Z0 G d de,          Z1 G d de,          Z2d3                    e!          Z4d6d!Z5 G d" d#          Z6 ed$%           G d& d'                      Z7d7d+Z8d7d,Z9d8d/Z:d9d1Z;d:d5Z<dS );    )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                  L    e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   dS )	Argumentsstr	sourcedirintnum_processesT.List[str]subprojectstypeszT.Callable[[], bool]subprojects_funcboolallow_insecureN__name__
__module____qualname____annotations__     W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/msubprojects.pyr   r      sT             


....r*   r   c                  $    e Zd ZU ded<   ded<   dS )UpdateArgumentsr"   rebaseresetNr$   r)   r*   r+   r-   r-   %   s"         r*   r-   c                  $    e Zd ZU ded<   ded<   dS )UpdateWrapDBArgumentsr"   forcezT.Dict[str, T.Any]releasesNr$   r)   r*   r+   r1   r1   )   s'         $$$$$$r*   r1   c                  $    e Zd ZU ded<   ded<   dS )CheckoutArgumentsr"   br   branch_nameNr$   r)   r*   r+   r5   r5   -   s'         r*   r5   c                  $    e Zd ZU ded<   ded<   dS )ForeachArgumentsr   commandr   argsNr$   r)   r*   r+   r9   r9   1   s'         r*   r9   c                  $    e Zd ZU ded<   ded<   dS )PurgeArgumentsr"   confirminclude_cacheNr$   r)   r*   r+   r=   r=   5   s'         r*   r=   c                  $    e Zd ZU ded<   ded<   dS )PackagefilesArgumentsr"   applysaveNr$   r)   r*   r+   rA   rA   9   s"         




r*   rA   , pathr   	base_pathreturnT.Set[Path]c                .   | j         dk    rNt          j        | d          5 }fd|                                D             }d d d            n# 1 swxY w Y   n:t	          j        |           5 }fd|D             }d d d            n# 1 swxY w Y   |S )Nz.ziprc                $    h | ]}|j         z  S r)   )filename.0irF   s     r+   	<setcomp>z%read_archive_files.<locals>.<setcomp>B   s     TTTY3TTTr*   c                $    h | ]}|j         z  S r)   )namerM   s     r+   rP   z%read_archive_files.<locals>.<setcomp>E   s     EEEAY/EEEr*   )suffixzipfileZipFileinfolisttarfileopen)rE   rF   zip_archivearchive_filestar_archives    `   r+   read_archive_filesr\   ?   s=   {f_T3'' 	U;TTTT[=Q=Q=S=STTTM	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U \$ 	F;EEEEEEEM	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	Fs#   !AAA/B

BBc                  6    e Zd ZddZddZddZdd
ZddZdS )Loggertotal_tasksr   rG   Nonec                    t          j                    | _        || _        d| _        t                      | _        d| _        d S )Nr    )	threadingLocklockr_   completed_taskssetrunning_tasksshould_erase_line)selfr_   s     r+   __init__zLogger.__init__I   s;    N$$	& ),!#r*   c                R    | j         rt          | j         d           d| _         d S d S )Nendrb   )ri   printrj   s    r+   flushzLogger.flushP   s;    ! 	($(d3333%'D"""	( 	(r*   c                J   d| j          d| j         }t          j                    j        t          |          z
  }d                    | j                  }t          |          dz   |k    r|d |dz
           dz   }|d| dz   }t          | j	        |d	d
           d| _	        d S )Nz
Progress: z / rD         ...z ()rb   rm   )sepro   z[K)
rf   r_   shutilget_terminal_sizecolumnslenjoinrh   rp   ri   )rj   linemax_lenrunnings       r+   print_progresszLogger.print_progressU   s    GD0GGT5EGG*,,4s4yy@))D.//w<<!g%%lw{l+e3Go7ooo%d$d====!)r*   	wrap_namer   c                    | j         5  | j                            |           |                                  d d d            d S # 1 swxY w Y   d S N)re   rh   addr   )rj   r   s     r+   startzLogger.start_   s    Y 	" 	"""9---!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   /AAA	log_queue,T.List[T.Tuple[mlog.TV_LoggableList, T.Any]]c                   | j         5  |                                  |D ]\  }}t          j        |i | | j                            |           | xj        dz  c_        |                                  d d d            d S # 1 swxY w Y   d S )Nr   )re   rr   r	   logrh   removerf   r   )rj   r   r   r;   kwargss        r+   donezLogger.doned   s    Y 	" 	"JJLLL ) * *f$)&))))%%i000  A%  !!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   A,BBBN)r_   r   rG   r`   rG   r`   )r   r   rG   r`   )r   r   r   r   rG   r`   )r%   r&   r'   rk   rr   r   r   r   r)   r*   r+   r^   r^   H   sx        $ $ $ $( ( ( (
* * * *" " " "
" " " " " "r*   r^   F)eqc                  <   e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   d8dZd9dZd:dZe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d@dAd%Zd?d&Zd?d'ZdBd*Zd:d+Zd>d,Zd:d-Zd:d.Zd:d/Zd:d0Zd:d1Zd:d2Zd:d3ZedCd5            Zd:d6Zd7S )DRunnerr^   loggerzInitVar[Resolver]rJ   r   wrapr   repo_dir'Arguments'optionsr   rG   r`   c                "   t          j         |          | _        t          j                            |j        | j        j                  | j        _        | j        | j        _        | j	        j
                            |           | _        g | _        d S r   )copywrap_resolverosrE   r}   subdir_rootr   	directorydirnamer   r!   __get__
run_methodr   )rj   rJ   s     r+   __post_init__zRunner.__post_init__v   si     "Yq\\%'W\\!-AT%U%U""&)040M0U0UVZ0[0[GIr*   r;   mlog.TV_Loggabler   T.Anyc                X    | j                             t          |          |f           d S r   )r   appendlist)rj   r;   r   s      r+   r   z
Runner.log   s)    tDzz6233333r*   r"   c                j   | j                             | j        j                   	 |                                 }nN# t
          $ rA}|                     t          j        d          t          |                     d}Y d }~nd }~ww xY w| j         
                    | j        j        | j                   |S )NzError:F)r   r   r   rR   r   r   r   r	   redr   r   r   )rj   resultes      r+   runz
Runner.run   s    $).)))	__&&FF 	 	 	HHTXh''Q000FFFFFF	 	888s   ; 
B7BB'UpdateWrapDBArguments'c                8    t          | j                  | _        d S r   )r   r#   r3   r   s    r+   pre_update_wrapdbzRunner.pre_update_wrapdb   s    '(>??r*   c                   |                      d| j        j         d           t          j        d| j                  }|j                            | j        j                  }|s|                      d           dS 	 | j                            d          }|                    dd          \  }}n# t          $ r9 |j
        s+|                      d	t          j        d
                     Y dS d x}}Y nt          $ rx 	 | j                            d          }t          |          \  }}nG# t          $ r: |j
        s,|                      d	t          j        d                     Y Y dS d x}}Y nw xY wY nw xY w|d         d         }|                    dd          \  }}	||k    s|	|k    r| j        j        }
|
s7t"          j                            | j        j        | j        j         d          }
t+          |
| j        j        ||	|j                   |                      dt          j        |                     n(|                      dt          j        |                     dS )Nz#Checking latest WrapDB version for rv   r1   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   rR   Tcastr   r3   getsplit
ValueErrorr2   r	   r   r   r   rsplitoriginal_filenamer   rE   r}   subprojects_dirr   r#   blue)rj   r   infor   branchrevisionr   latest_version
new_branchnew_revisionrL   s              r+   update_wrapdbzRunner.update_wrapdb   s   Jty~JJJKKK&0$,?? ##DIN33 	HH45554	)!Y]]+;<<N-33C;;FHH 	% 	% 	%= *h!i!ijjjuu $$FXXX 
	) 
	) 
	)) IMM+66	#29#=#=   ) ) )} !HHVTX.q%r%rsss 555$((	)
	) j)!,#1#8#8a#@#@ 
L<8#;#;y2H ]7<<	(AdinC[C[C[\\Xty~'$35 5 5 HH3TY~5N5NOOOOHH6	.8Q8QRRRtsN   <3B0 09E3,E32	E3<,D)(E3)9E-"E3&E-*E3,E--E32E3c           	        t          j        d| j                  }|j        rt	          | j                   	 | j                            | j        j	                   | 
                    d           dS # t          $ r@}| 
                    dt          j        t          |                               Y d }~dS d }~ww xY w| 
                    d           | 
                    d           dS )Nr-   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   r/   r   r   r   resolver   rR   r   r   r	   r   r   )rj   r   r   s      r+   update_filezRunner.update_file   s    &*DL99= 	 !///"**49>:::5666t    #a&&!1!1222uuuuu HH{|||HHSTTT5s   9A2 2
B<<5B77B<cmdr   c                <    t          || j        d          d         S )NT)checkr   )r   r   rj   r   s     r+   
git_outputzRunner.git_output   s    dm4888;;r*   c                V    |                      |                     |                     d S r   )r   r   r   s     r+   git_verbosezRunner.git_verbose   s&    %%&&&&&r*   c                    t          g d| j                  d                                         r|                     g d           d S d S )N)statusz--porcelain":!/.meson-subproject-wrap-hash.txtr   )stashpushz--allr   .)r   r   stripr   rq   s    r+   	git_stashzRunner.git_stash   sc     TTTVZVcddefgmmoo 	d bbbccccc	d 	dr*   c           
     @   |                      g d          }d |                    d          D             }|                     dt          j        |d                   t          j        |d                   |d         t          j        |d                              d S )	N)showz--quietz!--pretty=format:%h%n%d%n%s%n[%an]c                6    g | ]}|                                 S r)   r   )rN   ss     r+   
<listcomp>z#Runner.git_show.<locals>.<listcomp>   s     ???q???r*   
r   r   r      rt   )r   r   r   r	   yellowr   r   )rj   commit_messagepartss      r+   git_showzRunner.git_show   s    )a)a)abb??N$8$8$>$>???U1X..q0B0BE!HdiX]^_X`NaNabbbbbr*   r   c           	        	 |                      g d           n# t          $ r}|                      g d           |                     dt          j        | j                  dt          j        |          d           |                     t          j        |j                             |                     t          j        t          |                               Y d }~dS d }~ww xY wdS )N)-crebase.autoStash=truer.   
FETCH_HEAD)r   r   r.   z--abortz  -> Could not rebaseontoz
-- abortedFT)	r   r   r   r	   boldr   r   outputr   rj   r   r   s      r+   
git_rebasezRunner.git_rebase   s    	OOSSSTTTT 	 	 	OOPPPQQQHH,di.F.FPTPYZbPcPc!# # #HHTXah''(((HHTXc!ff%%&&&55555	 ts    
C(B9C##C(c           	     L   	 |                                   |                     g d           | j                            | j        j                   | j                                         n# t          $ r}|                     dt          j
        | j                  dt          j
        |                     |                     t          j        |j                             |                     t          j        t          |                               Y d }~dS d }~ww xY wdS )N)r/   z--hardr   z  -> Could not resettoFT)r   r   r   apply_patchr   rR   apply_diff_filesr   r   r	   r   r   r   r   r   r   s      r+   	git_resetzRunner.git_reset   s   	 NNOO===>>>**49>::://1111 	 	 	HH+TYt}-E-EtTYW_M`M`aaaHHTXah''(((HHTXc!ff%%&&&55555		
 ts   A(A+ +
D!5B!DD!Fcreatec           	        ddg}|r|                     d           ||dgz  }	 |                                  |                     |           n# t          $ r}|                     dt          j        |          dt          j        | j                             |                     t          j        |j	                             |                     t          j        t          |                               Y d }~dS d }~ww xY wdS )	Ncheckoutz--ignore-other-worktrees-bz--z  -> Could not checkoutinFT)r   r   r   r   r   r	   r   r   r   r   r   )rj   r   r   r   r   s        r+   git_checkoutzRunner.git_checkout  s   56 	JJt$		 NNOOC     	 	 	HH.	(0C0CT49UYUbKcKcdddHHTXah''(((HHTXc!ff%%&&&55555		
 ts   )A 
DB!C??Dc                ^    |                      |          }|r|                     |          }|S r   )r   r   rj   r   successs      r+   git_checkout_and_resetzRunner.git_checkout_and_reset  s5     ##H-- 	/nnX..Gr*   c                ^    |                      |          }|r|                     |          }|S r   )r   r   r   s      r+   git_checkout_and_rebasezRunner.git_checkout_and_rebase!  s5     ##H-- 	0ooh//Gr*   urlsrg   c                   g d}t          || j                  \  }}|sdS 	 |                    dd          d         }n# t          $ r Y dS w xY wdd|g}t          || j                  \  }}|                                |v S )	N)	rev-parse--abbrev-refz--symbolic-full-namez@{upstream}F/r   )maxsplitr   remoteget-url)r   r   r   
IndexErrorr   )rj   r   r   retupstreamr  
remote_urls          r+   git_branch_has_upstreamzRunner.git_branch_has_upstream)  s    RRR!#t}55X 	5	^^C!^44Q7FF 	 	 	55	F+#C77Z!!T))s   A   
AAc           	        t          j        d| j                  }t          j                            t          j                            | j        d                    s|j        rt          | j                   	 | j
                            | j        j                   |                                  dS # t          $ r@}|                     dt#          j        t'          |                               Y d }~dS d }~ww xY w|                     d           |                     d           dS | j        j                            d          }|                                d	k    r|nd	}| j        j                            d
          }| j        j                            d          }|r|s|                     d           dS 	 |                     g d                                          }n# t2          $ r}|                     dt#          j        | j                             |                     t#          j        |j                             |                     t#          j        t'          |                               Y d }~dS d }~ww xY w|j        r	 |                     ddd|g           |r|                     dddd|g           n# t2          $ r}|                     dt#          j        | j                             |                     t#          j        |j                             |                     t#          j        t'          |                               Y d }~dS d }~ww xY w||k    r|                     d|d|           dS 	 |                     g d                                          }|d	k    r|nd}n# t2          $ r}|                     dt#          j        | j                             |                     t#          j        |j                             |                     t#          j        t'          |                               Y d }~dS d }~ww xY w| j
                            |          r:t;          dd|dz   g| j                  d         r|                     dd|g           n	 d}	d }
|                     dd!|	d!|
d|g           n# t2          $ r}|                     d"t#          j        |          d#t#          j        | j                             |                     t#          j        |j                             |                     t#          j        t'          |                               Y d }~dS d }~ww xY w|dk    r3|j        r|                     |          }n|                     |          }n||k    r3|j        r|                      |          }nu| !                    |          }n_|j        r|                     |          }nB| "                    ||h          r|                     |          }n| !                    |          }|r|                                  |S )$Nr-   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  rb   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   rE   existsr}   r   r/   r   r   r   r   rR   update_git_doner   r   r	   r   r   valuesr   upperr   r   r   r   r   is_git_full_commit_idr   r   r   r   r   r	  )rj   r   r   revision_valr   r  push_url
origin_urlr   heads_refmaptags_refmapr   s               r+   
update_gitzRunner.update_git6  sh   &*DL99w~~bgll4=&AABB 	} $T]333!&..ty~>>>((***4$ ! ! !HHVTXc!ff%5%5666 55555! 5666RSSSuy'++J77#/#5#5#7#76#A#A<<vi""5))9#''
33 	s 	HH9:::4	)H)H)HIIOOQQJJ 	 	 	HHEtyQUQ^G_G_```HHTXah''(((HHTXc!ff%%&&&55555		
 = 	9h DEEE YOOXy(Hh$WXXX   =ty?W?WXXX!(++,,,#a&&))***uuuuu	
 JHHGjGGGGHHH5	__%J%J%JKKQQSSF%//VVRFF 	 	 	HHA49T]C[C[\\\HHTXah''(((HHTXc!ff%%&&&55555		
 33H== 	;
H{4JKT][[\]^	
 OOWc845555  E8*lJP[]ego pqqqq   8$)H:M:MtUYU^_c_lUmUmnnn!(++,,,#a&&))***uuuuu	 R<<} A55h??66x@@x } 4..22//(33 } 855h??//h@@ 8"::8DDGG"ooh77G 	#  """s|   98B3 3
C==5C88C=)G+ +
J5BJJ5K 
M0BM++M03O 
Q-BQ((Q- S& &
V0B!VVc                \    |                      g d           |                                  d S )N)	submoduleupdatez
--checkoutz--recursive)r   r   rq   s    r+   r  zRunner.update_git_done  s,    LLLMMMr*   c                `   | j                             d          }|                                dk    rt          j        ddg| j                   n]t          j        dd|g| j                  dk    r;t          j        ddg| j                   t          j        dd|g| j                   dS )	Nr   tiphgpullcwdr   r   T)r   r   lower
subprocesscallr   
check_call)rj   revnos     r+   	update_hgzRunner.update_hg  s    	j));;==E!! OT6N>>>>>j%8dmLLLPQQQ%tVn$-HHHH%tZ&?T]SSSStr*   c                2   | j                             d          }t          dddd| j        g          \  }}}|}||k    rdS |                                dk    rt          j        ddg| j                   nt          j        ddd	|g| j                   dS )
Nr   svnr   z--show-itemTheadr  r"  z-r)r   r   r   r   r$  r%  r&  r'  )rj   r(  _outcurrent_revnos        r+   
update_svnzRunner.update_svn  s    	j))v}j$-XYY	3E!!4;;==F"" OUH-4=AAAAA!5(D%"@dmTTTTtr*   c                0   |                      d| j        j         d           d}t          j                            | j                  s#|                      d           | j        j         }n| j        j	        dk    r| 
                                }n| j        j	        dk    r|                                 }n| j        j	        dk    r|                                 }nu| j        j	        dk    r|                                 }nP| j        j	        #|                      d	           | j        j         }n!|                      d
| j        j	        d           |rCt          j                            | j                  r| j                            | j                   |S )Nz	Updating rv   Fz  -> Not used.filegitr   r+  z/  -> Cannot update subproject with no wrap filez  -> Cannot update
subproject)r   r   rR   r   rE   isdirr   r   r   typer   r  r)  r0  update_hash_cache)rj   r   s     r+   r  zRunner.update  si   0TY^000111w}}T]++ 	IHH%&&&,22GGY^v%%&&((GGY^u$$oo''GGY^t##nn&&GGY^u$$oo''GGY^#HHFGGG,22GGHH)49><HHH 	7rw}}T]33 	7I''666r*   c                   t          j        d| j                  }| j        j        dk    s$t
          j                            | j                  sdS |j	        r|j	        n| j        
                    d          }|sdS |                     d| d| j        j         d           |                     ||j                  r|                                  dS d	S )
Nr5   r3  Tr   z	Checkout z in rv   )r   F)r   r   r   r   r6  r   rE   r5  r   r7   r   r   rR   r   r6   r   )rj   r   r7   s      r+   r   zRunner.checkout  s    &,dl;;9>U"""'--*F*F"4-4-@_g))dimmT^F_F_ 	4A[AAdinAAABBB[;; 	MMOOO4ur*   c           	        |                      d| j        j         d           t          j                            | j                  r|                      d           dS 	 | j                            | j        j                   |                      d           nM# t          $ r@}|                      dt          j        t          |                               Y d }~dS d }~ww xY wdS )Nz	Download rv   z  -> Already downloadedTz	  -> doner   F)r   r   rR   r   rE   r5  r   r   r   r   r	   r   r   )rj   r   s     r+   downloadzRunner.download  s    0TY^0001117=='' 	HH.///4	&&ty~666HH[!!!! 	 	 	HHVTXc!ff--...55555	 ts    9B 
C$$5CC$c                v   t          j        d| j                  }|                     d| j                    t
          j                            | j                  s|                     d           dS |j        g|j	        z   }t          |t          j        | j                  \  }}}|j        dk    rod                    d                    |          |j                  }|                     d	t!          j        |                     |                     |d
           dS |                     |d
           dS )Nr9   zExecuting command in   -> Not downloaded yetT)stderrr#  r   z.Command '{}' returned non-zero exit status {}. z  -> rb   rn   F)r   r   r   r   r   r   rE   r5  r:   r;   r   r%  STDOUT
returncodeformatr}   r	   r   )rj   r   r   pr.  r-  err_messages          r+   foreachzRunner.foreach  s   &+T\::888999w}}T]++ 	HH.///4',.s:+<$-PPP	3<1JQQRURZRZ[^R_R_abamnnKHHWdh{33444HHSbH!!!5"tr*   c                
   t          j        d| j                  }| j        j        sdS | j        j        r]t          | j        j                                                  }|j	        r|
                                 t          j        d|            |j        rft          | j        j                                                  }	 || j                            d          z  }|                                r3|j	        r|
                                 |                     d|            n# t$          $ r Y nw xY w	 || j                            d          z  }|                                r3|j	        r|
                                 |                     d|            n# t$          $ r Y nw xY w	 t'          |                                          st+          t-          |                     n# t.          $ r Y nw xY wt          | j                  }|j                                        |j        z  }|                                r5|j	        r|
                                 |                     d|            dS |                                sdS 	 |j	        rt+          t-          |                     |                     d|            n2# t:          $ r%}t          j        d| d|            Y d }~dS d }~ww xY wdS )	Nr=   Tz	Deleting source_filenamepatch_filenamezUnable to remove: z: F)r   r   r   r   r6  
redirectedr   r   r   r>   unlinkr	   r   r?   r   cachedirr   is_filer   anyiterdirr   r   FileNotFoundErrorr   parentrR   
is_symlinkis_dirOSErrorerror)rj   r   wrapfilepackagecachesubproject_cache_filesubproject_patch_filesubproject_source_dirr   s           r+   purgezRunner.purge  sZ   &)4<88 y~ 	49 	-DI788@@BBH "!!!H+++,,,  	 2 ;<<DDFFL(4ty}}EV7W7W(W%(0022 B 7-44666HH@)>@@AAA    (4ty}}EU7V7V(V%(0022 B 7-44666HH@)>@@AAA    
<//1122 <(\):):;;;$    !%T] 3 3 5 < D D F FI^Ic c !++-- 	 /%,,...HH8!6889994$++-- 	4	 A$S)>%?%?@@@HH8!6889999 	 	 	JH,AHHQHHIII55555	 tsP   A$D+ +
D87D8<A$F! !
F.-F.2=G0 0
G=<G=;K 
L K;;L 'PurgeArguments'c                h    | j         s*t          j        d           t          j        d           d S d S )Nrb   z<Nothing has been deleted, run again with --confirm to apply.)r>   r	   r   r   s    r+   
post_purgezRunner.post_purgeI  s=     	UHRLLLHSTTTTT	U 	Ur*   c                   t          j        d| j                  }|j        r|j        rt          d           dS |j        r|                     d| j        j         d           t          j
                            | j                  s|                     d           dS | j                            | j        j                   dS |j        rd| j        j        vrt!          j        d	           dS d
| j        j        vrt!          j        d           dS t%          | j        j        | j        j        d
                   }t)          | j        j                            dd                    }t%          | j                  }t%          | j        j        | j        j        d                   }|r|n|j        }t1          ||          }t3          |                    d                    }|                     d| j        j         d| d           t7          j        |           ||z
  D ]b}	|	                                s|	                    |          }
||
z  }|j                            dd           t7          j         |	|           cdS )NrA   z0error: --apply and --save are mutually exclusiveFz#Re-applying patchfiles overlay for rv   r<  Tpatch_directoryz-can only save packagefiles to patch_directoryrF  z-can only save packagefiles from a [wrap-file]lead_directory_missingz**/*zSaving r  )parentsexist_ok)!r   r   r   rB   rC   rp   r   r   rR   r   rE   r5  r   r   r   r  r	   rS  r   rJ  r"   r   filesdirrO  r\   rg   globry   rmtreerK  relative_tomkdircopyfile)rj   r   archive_pathr_  r   packagefilesrF   rZ   directory_filessrc_pathrel_pathdst_paths               r+   ri  zRunner.packagefilesO  sr   &0$,??= 	W\ 	DEEE5= 	HHN49>NNNOOO7==// 2333t**49>:::4< 	4 	(888
JKKKu 	(888
JKKKu 2 ;TY=MN_=`aaL%)$)*:*>*>?WY^*_*_%`%`"T]++I	 2DI4DEV4WXXL%;Q		AQI.|YGGM!).."8"899OHHDty~DD<DDDEEEM,'''+m; 4 4'')) #//	::'(2%%dT%BBB(3333tr*   N)rJ   r   rG   r`   )r;   r   r   r   rG   r`   )rG   r"   )r   r   rG   r`   )r   r   rG   r   )r   r   rG   r`   r   )r   r   rG   r"   )F)r   r   r   r"   rG   r"   )r   rg   rG   r"   )r   rZ  rG   r`   ) r%   r&   r'   r(   r   r   r   staticmethodr   r   r   r   r   r   r   r   r   r   r   r   r	  r  r  r)  r0  r  r   r:  rD  rY  r\  ri  r)   r*   r+   r   r   n   s        NNNMMMJ J J J4 4 4 4    @ @ @ \@- - - -^   ,< < < <' ' ' 'd d d dc c c c

 
 
 
       "      * * * *h h h hT            2         $@ @ @ @D U U U \U
' ' ' ' ' 'r*   r   rB  argparse.ArgumentParserr`   c                    |                      ddd           |                      dddt           d           |                      d	d
d t          d           |                      dddd           d S )Nz--sourcedirr   zPath to source directory)defaulthelpz--typesrb   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).)rq  r6  rr  z--allow-insecureF
store_truez"Allow insecure server connections.rq  actionrr  )add_argumentALL_TYPES_STRINGr   rB  s    r+   add_common_argumentsry  y  s    NN=#2  4 4 4NN9b{Zj{{{  } } }NN4*DsL  N N NNN%u\<  > > > > >r*   c                6    |                      ddd           d S )Nr   *z"List of subprojects (default: all)nargsrr  )rv  rx  s    r+   add_subprojects_argumentr~    s.    NN=<  > > > > >r*   
subparsers'SubParsers'c                "   |                      dd          }|                    dddd           t          |           t          |           |                    t
          j        	           |                    t
          j        
           |S )Nr  z,Update wrap files from WrapDB (Since 0.63.0)rr  z--forceFrs  z4Update wraps that does not seems to come from WrapDBrt  r!   )pre_func)
add_parserrv  ry  r~  set_defaultsr   r   r   )r  rB  s     r+   add_wrap_update_parserr    s    h-[\\ANN9eLN  P P PQNNF$8N999NNF4N555Hr*   parserc                   |                      dd          }d|_        |                    dd          }|                    ddd	d
           |                    ddd	d           t	          |           t          |           |                    t          j                   |                    dd          }|                    ddd	d           |                    ddd           t	          |           t          |           |                    t          j	                   |                    dd          }t	          |           t          |           |                    t          j
                   |                    dd          }|                    ddd           |                    dt          j        t          j                   t	          |           |                    g             |                    t          j                   |                    d!d"          }t	          |           t          |           |                    d#d	dd$%           |                    d&d	dd'%           |                    t          j                   |                    t          j        (           |                    d)d*          }t	          |           t          |           |                    d+d	dd,%           |                    d-d	dd.%           |                    t          j                   d S )/NCommandsr:   )titledestTr  z&Update all subprojects from wrap filesr  z--rebasers  zeRebase your branch on top of wrap's revision. Deprecated, it is now the default behaviour. (git only)rt  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 branchr7   ?zMName of the branch to checkout or create (default: revision set in wrap file)r|  r:  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.rD  z/Execute a command in each subproject directory.zcommand ...z/Command to execute in each subproject directory)metavarrr  r;   r   rY  z*Remove all wrap-based subproject artifactsz--include-cachez Remove the package cache as well)ru  rq  rr  z	--confirmz+Confirm the removal of subproject artifacts)	post_funcri  zManage the packagefiles overlayz--applyz$Apply packagefiles to the subprojectz--savez%Save packagefiles from the subproject)add_subparsersrequiredr  rv  ry  r~  r  r   r  r   r:  argparse	REMAINDERSUPPRESSrD  rY  r\  ri  )r  r  rB  s      r+   add_argumentsr    si   &&Zi&HHJJh-UVVANN:tLR  S S S NN9eL]  _ _ _QNNFMN222j/MNNANN4|-  / / /NN=g  i i iQNNFON444j 0E 	F 	FA QNNFON444i._``ANN9mI  K K KNN6!3 )  + + +NNrN"""NNFNN333g,XYYAQNN$\5OqNrrrNN;|UIvNwwwNNFLN111NNV.N///n3TUUAQNN9\5GmNnnnNN8L%FmNnnnNNF$7N88888r*   r   r   r   c                    t           j                            t           j                             j                            }t           j                            t           j                            |d                    s*t          j        dt          j	        |          d           dS t          j
                    5  t          |dd          }|                                 |                                pd}d d d            n# 1 swxY w Y   t           j                            t           j                            ||                    s*t          j        dt          j	        |          d           d	S t!          ||d
 j        d
          } j        r& fd|j                                        D             }n&t+          |j                                                  } j        r$d  j                            d          D             ng D ]%}|t2          vrt5          d|dt6                     &g }g }t9          j                    }	t9          j        |	           t?           j                   }
rfd|D             }tC           dd           }|r |            tE          tG          |                    }|D ]}tI          |||j%                  &                                }tO          ||||           }|	(                    |
|j)                  }|*                    |           |*                    |j+                   |	,                    t9          j-        |           }|.                                 tC           dd           }|r |            d t_          ||          D             }|r.d}|d                    |          z  }t          j0        |           tG          |          S )Nzmeson.build	Directoryz-does not seem to be a Meson source directory.r   rb   noner   z"does not seem to have subprojects.r   T)wrap_frontendr#   silentc                ,    g | ]\  }}|j         v |S r)   r  )rN   rR   r   r   s      r+   r   zrun.<locals>.<listcomp>  s*    WWW*$47CV;V;V;V;V;Vr*   c                6    g | ]}|                                 S r)   r   )rN   ts     r+   r   zrun.<locals>.<listcomp>  s     9991QWWYY999r*   ,zUnknown subproject type z, supported types are: c                &    g | ]}|j         v |S r)   )r6  )rN   r   r    s     r+   r   zrun.<locals>.<listcomp>  s%    >>>$49+=+=+=+=+=r*   r  r  c                    g | ]	\  }}||
S r)   r)   )rN   rR   r   s      r+   r   zrun.<locals>.<listcomp>  s!    RRRw'RRRRr*   zlPlease check logs above as command failed in some subprojects which could have been left in conflict state: rD   )1r   rE   relpathrealpathr   isfiler}   r	   rS  r   
no_loggingr
   load_root_meson_fileextract_subproject_dirr5  r   r   r#   r   wrapsitemsr   r  r    r   r   r   rw  asyncionew_event_loopset_event_loopr   r   getattrr^   r|   r   r   as_posixr   run_in_executorr   r   rR   run_until_completegatherrr   zipwarning)r   
source_dirintrsubproject_dirrJ   r  r  tasks
task_namesloopexecutorr  r   r   r   runnertaskresultsr  failuresmr    s   `                    @r+   r   r     s	   !1!1'2C!D!DEEJ7>>"',,z=AABB 
;	* 5 57fgggq			 H H'
B??!!###4466G-H H H H H H H H H H H H H H H 7==j.AABB di
335YZZZq^4PWPfostttA 'WWWWWWWQW^^%%&&=D]R99 3 3C 8 89999PRE l lI !jA!j!jXh!j!jkkk ')E J!##D4   !'"788H ?>>>>%>>>w
D11H CJJF % %z>4>BBKKMM4'::##Hfj99T$)$$$$%%gne&<==G
LLNNNd33I 	'RR#j'*B*BRRRH z	TYYx   Qx==s   ><DD
D
)rE   r   rF   r   rG   rH   )rB  ro  rG   r`   )r  r  rG   ro  )r  ro  rG   r`   )r   r   rG   r   )=
__future__r   dataclassesr   r   r   r%  r  r  rc   r   ry   concurrent.futures.threadr   pathlibr   typingr   rW   rT   rb   r	   astr
   mesonlibr   r   r   r   r   	wrap.wrapr   r   r   r   r   r   TYPE_CHECKINGtyping_extensionsr   r   _SubParsersActionArgumentParser
SubParsersr   r-   r1   r5   r9   r=   rA   r}   rw  r\   r^   r   ry  r~  r  r  r   r)   r*   r+   <module>r     s   " " " " " " * * * * * * * *                 8 8 8 8 8 8                   ) ) ) ) ) ) _ _ _ _ _ _ _ _ _ _ _ _ _ _I I I I I I I I I I I I I I I I ? %******,,,,,,+H,CDJ    H       )   % % % % %	 % % %    I       9              	    99Y''    #" #" #" #" #" #" #" #"L eG G G G G G G GT> > > >> > > >   49 49 49 49l0 0 0 0 0 0r*   