
    <Qeg                    j   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jJ                  rrd dl&m'Z' ddlm(Z( ejR                  ejT                     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jg                  e!      Z4d(dZ5 G d d      Z6 ed        G d! d"             Z7d)d#Z8d)d$Z9d*d%Z:d+d&Z;d,d'Z<y)-    )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                  J    e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   y)	Argumentsstr	sourcedirintnum_processesT.List[str]subprojectstypeszT.Callable[[], bool]subprojects_funcboolallow_insecureN__name__
__module____qualname____annotations__     9/usr/lib/python3/dist-packages/mesonbuild/msubprojects.pyr   r      s$      
..r*   r   c                  "    e Zd ZU ded<   ded<   y)UpdateArgumentsr"   rebaseresetNr$   r)   r*   r+   r-   r-   %   s    r*   r-   c                  "    e Zd ZU ded<   ded<   y)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<   y)CheckoutArgumentsr"   br   branch_nameNr$   r)   r*   r+   r5   r5   -   s    r*   r5   c                  "    e Zd ZU ded<   ded<   y)ForeachArgumentsr   commandr   argsNr$   r)   r*   r+   r9   r9   1   s    r*   r9   c                  "    e Zd ZU ded<   ded<   y)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<   y)PackagefilesArgumentsr"   applysaveNr$   r)   r*   r+   rA   rA   9   s    
r*   rA   , c                v   | j                   dk(  rKt        j                  | d      5 }|j                         D ch c]  }||j                  z   }}d d d        |S t        j                  |       5 }|D ch c]  }||j                  z   }}d d d        |S c c}w # 1 sw Y   S xY wc c}w # 1 sw Y   S xY w)Nz.zipr)suffixzipfileZipFileinfolistfilenametarfileopenname)path	base_pathzip_archiveiarchive_filestar_archives         r+   read_archive_filesrU   ?   s    {{f__T3' 	U;=H=Q=Q=STY3TMT	U
  \\$ 	F;9DEAY/EME	F	 U	U
  F	Fs:   BBB0B.5B)B.BB&)B..B8c                  4    e Zd ZddZddZddZd	dZd
dZy)Loggerc                ~    t        j                         | _        || _        d| _        t               | _        d| _        y )Nr    )	threadingLocklocktotal_taskscompleted_taskssetrunning_tasksshould_erase_line)selfr]   s     r+   __init__zLogger.__init__I   s2    NN$	& ),!#r*   c                Z    | j                   rt        | j                   d       d| _         y y )NendrY   )ra   printrb   s    r+   flushzLogger.flushP   s(    !!$((d3%'D" "r*   c                P   d| j                    d| j                   }t        j                         j                  t        |      z
  }dj                  | j                        }t        |      dz   |kD  r|d |dz
   dz   }|d| dz   }t        | j                  |d	d
       d| _	        y )Nz
Progress: z / rD         ...z ()rY   re   )seprg   z[K)
r^   r]   shutilget_terminal_sizecolumnslenjoinr`   rh   ra   )rb   linemax_lenrunnings       r+   print_progresszLogger.print_progressU   s    D001T5E5E4FG**,44s4y@))D../w<!g%lw{+e3G7)1o%d$$d=!)r*   c                    | j                   5  | j                  j                  |       | j                          d d d        y # 1 sw Y   y xY wN)r\   r`   addry   )rb   	wrap_names     r+   startzLogger.start_   s>    YY 	"""9-!	" 	" 	"s   ,AAc                $   | j                   5  | j                          |D ]  \  }}t        j                  |i |  | j                  j                  |       | xj                  dz  c_        | j                          d d d        y # 1 sw Y   y xY w)Nr   )r\   rj   r	   logr`   remover^   ry   )rb   r}   	log_queuer;   kwargss        r+   donezLogger.doned   s|    YY 	"JJL ) *f$)&)*%%i0  A% !	" 	" 	"s   A0BBN)r]   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'   rc   rj   ry   r~   r   r)   r*   r+   rW   rW   H   s    $(
*"
"r*   rW   F)eqc                  .   e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   d'dZd(d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/d0dZd.dZd.dZd1d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)d#Zed2d$       Zd)d%Zy&)3RunnerrW   loggerzInitVar[Resolver]rF   r   wrapr   repo_dir'Arguments'optionsc                j   t        j                   |      | _        t        j                  j	                  |j
                  | j                  j                        | j                  _        | j                  | j                  _        | j                  j                  j                  |       | _        g | _        y r{   )copywrap_resolverosrO   ru   subdir_rootr   	directorydirnamer   r!   __get__
run_methodr   )rb   rF   s     r+   __post_init__zRunner.__post_init__v   su     "YYq\%'WW\\!--ATAT%U""&))040M0M0U0UVZ0[GIr*   c                P    | j                   j                  t        |      |f       y r{   )r   appendlist)rb   r;   r   s      r+   r   z
Runner.log   s    tDz623r*   c                   | j                   j                  | j                  j                         	 | j	                         }| j                   j                  | j                  j                  | j                         |S # t
        $ r:}| j                  t        j                  d      t        |             d}Y d }~zd }~ww xY w)NzError:F)r   r~   r   rN   r   r   r   r	   redr   r   r   )rb   resultes      r+   runz
Runner.run   s    $))..)	__&F 	8	  	HHTXXh'Q0F	s   A= =	C 0B;;C c                8    t        | j                        | _        y r{   )r   r#   r3   r   s    r+   pre_update_wrapdbzRunner.pre_update_wrapdb   s    '(>(>?r*   c                   | j                  d| j                  j                   d       t        j                  d| j
                        }|j                  j                  | j                  j                        }|s| j                  d       y	 | j                  j                  d      }|j                  dd      \  }}|d   d   }|j                  dd      \  }}	||k7  s|	|k7  r| j                  j                   r| j                  j"                  n| j                  j"                   d}
t%        |
| j                  j                  ||	|j&                         | j                  dt        j(                  |             y| j                  dt        j(                  |             y# t        $ r; |j                  s'| j                  d	t        j                  d
             Y yd x}}Y (t        $ rv 	 | j                  j                  d      }t        |      \  }}nG# t        $ r; |j                  s(| j                  d	t        j                  d             Y Y yd x}}Y nw xY wY w xY w)Nz#Checking latest WrapDB version for rn   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   rN   Tcastr   r3   getsplit
ValueErrorr2   r	   r   r   r   rsplithas_wraprK   r   r#   blue)rb   r   infor   branchrevisionr   latest_version
new_branchnew_revisionrK   s              r+   update_wrapdbzRunner.update_wrapdb   s   6tyy~~6FcJK&&0$,,? ##DIINN3HH45	)!YY]]+;<N-33C;FH& j)!,#1#8#8a#@ 
L<8#;-1YY-?-?tyy))		HZHZG[[`EaHXtyy~~'$335 HH3TYY~5NO  HH6		.8QR;  	%==*h!ij $$FX 
	)) IIMM+6	#29#=   )}}HHVTXX.q%rs $((	)
	)sN   0F# #:I$I$&I$/)HI$:II$II$II$#I$c           	        t        j                  d| j                        }|j                  rWt	        | j
                         	 | j                  j                  | j                  j                         | j                  d       y| j                  d       | j                  d       y# t        $ r8}| j                  dt        j                  t        |                   Y d }~yd }~ww xY w)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   rN   r   r   r	   r   r   )rb   r   r   s      r+   update_filezRunner.update_file   s    &&*DLL9== !/""**499>>:56 HH{|HHST ! #a&!12s   A B' '	C(0.C##C(c                8    t        || j                  d      d   S )NT)checkr   )r   r   rb   cmds     r+   
git_outputzRunner.git_output   s    dmm48;;r*   c                D    | j                  | j                  |             y r{   )r   r   r   s     r+   git_verbosezRunner.git_verbose   s    %&r*   c                ~    t        g d| j                        d   j                         r| j                  g d       y y )N)statusz--porcelain":!/.meson-subproject-wrap-hash.txtr   )stashpushz--allr   .)r   r   stripr   ri   s    r+   	git_stashzRunner.git_stash   s<     TVZVcVcdefgmmo bc pr*   c           
     @   | j                  g d      }|j                  d      D cg c]  }|j                          }}| j                  dt	        j
                  |d         t	        j                  |d         |d   t	        j                  |d                y c c}w )N)showz--quietz!--pretty=format:%h%n%d%n%s%n[%an]
r   r   r      rl   )r   r   r   r   r	   yellowr   r   )rb   commit_messagespartss       r+   git_showzRunner.git_show   s}    )ab$2$8$8$>?q??U1X.q0BE!HdiiX]^_X`Nab @s   Bc           	        	 | j                  g d       y# t        $ r}| j                  g d       | j                  dt        j                  | j
                        dt        j                  |      d       | j                  t        j                  |j                               | j                  t        j                  t        |                   Y d }~yd }~ww xY w)N)-crebase.autoStash=truer.   
FETCH_HEAD)r   r   r.   z--abortz  -> Could not rebaseontoz
-- abortedFT)	r   r   r   r	   boldr   r   outputr   rb   r   r   s      r+   
git_rebasezRunner.git_rebase   s    	OOST   	OOPQHH,dii.FPTPYPYZbPc!#HHTXXahh'(HHTXXc!f%&	s    	CB3CCc           	        	 | j                          | j                  g d       | j                  j                          | j                  j	                          y# t
        $ r}| j                  dt        j                  | j                        dt        j                  |             | j                  t        j                  |j                               | j                  t        j                  t        |                   Y d }~yd }~ww xY w)N)r/   z--hardr   z  -> Could not resettoFT)r   r   r   apply_patchapply_diff_filesr   r   r	   r   r   r   r   r   r   s      r+   	git_resetzRunner.git_reset   s    	 NNOO=>**,//1   	HH+TYYt}}-EtTYYW_M`aHHTXXahh'(HHTXXc!f%&		s   AA 	D#BDDc           	        ddg}|r|j                  d       ||dgz  }	 | j                          | j                  |       y# t        $ r}| j	                  dt        j                  |      dt        j                  | j                               | j	                  t        j                  |j                               | j	                  t        j                  t        |                   Y d }~yd }~ww xY w)	Ncheckoutz--ignore-other-worktrees-bz--z  -> Could not checkoutinFT)r   r   r   r   r   r	   r   r   r   r   r   )rb   r   creater   r   s        r+   git_checkoutzRunner.git_checkout  s    56JJt$		 NNOOC    	HH.		(0CT499UYUbUbKcdHHTXXahh'(HHTXXc!f%&		s   !A 	C4BC//C4c                N    | j                  |      }|r| j                  |      }|S r{   )r   r   rb   r   successs      r+   git_checkout_and_resetzRunner.git_checkout_and_reset  s*     ##H-nnX.Gr*   c                N    | j                  |      }|r| j                  |      }|S r{   )r   r   r   s      r+   git_checkout_and_rebasezRunner.git_checkout_and_rebase  s*     ##H-ooh/Gr*   c                    g d}t        || j                        \  }}|sy	 |j                  dd      d   }dd|g}t        || j                        \  }}|j	                         |v S # t        $ r Y yw xY w)	N)	rev-parse--abbrev-refz--symbolic-full-namez@{upstream}F/r   )maxsplitr   remoteget-url)r   r   r   
IndexErrorr   )rb   urlsr   retupstreamr   
remote_urls          r+   git_branch_has_upstreamzRunner.git_branch_has_upstream'  s    R!#t}}5X	^^C!^4Q7F F+#C7Z!T))	  		s   A( (	A43A4c           	     \   t        j                  d| j                        }t        j                  j                  t        j                  j                  | j                  d            s|j                  rVt        | j                         	 | j                  j                  | j                  j                         | j                          y| j!                  d       | j!                  d       y| j                  j(                  j+                  d      }| j                  j(                  j+                  d	      }| j                  j(                  j+                  d
      }|r|s| j!                  d       y	 | j-                  g d      j/                         }|j                  r/	 | j-                  ddd|g       |r| j-                  dddd|g       n||k7  r| j!                  d|d|       y	 | j-                  g d      j/                         }|dk7  r|nd}| j                  j7                  |      r4t9        dd|dz   g| j                        d   r| j-                  dd|g       n	 d}d }	| j-                  dd!|d!|	d|g       |dk(  r0|j                  r| j;                  |      }
n| j=                  |      }
n||k(  r0|j                  r| j?                  |      }
nf| jA                  |      }
nT|j                  r| j;                  |      }
n6| jC                  ||h      r| j=                  |      }
n| jA                  |      }
|
r| j                          |
S # t        $ r8}| j!                  dt#        j$                  t'        |                   Y d }~yd }~ww xY w# t0        $ r}| j!                  dt#        j2                  | j                               | j!                  t#        j$                  |j4                               | j!                  t#        j$                  t'        |                   Y d }~yd }~ww xY w# t0        $ r}| j!                  dt#        j2                  | j                               | j!                  t#        j$                  |j4                               | j!                  t#        j$                  t'        |                   Y d }~yd }~ww xY w# t0        $ r}| j!                  dt#        j2                  | j                               | j!                  t#        j$                  |j4                               | j!                  t#        j$                  t'        |                   Y d }~yd }~ww xY w# t0        $ r}| j!                  d"t#        j2                  |      d#t#        j2                  | j                               | j!                  t#        j$                  |j4                               | j!                  t#        j$                  t'        |                   Y d }~yd }~ww xY w)$Nr-   z.gitTr   Fz  -> Not a git repository.z7Pass --reset option to delete directory and redownload.r   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   HEADr   rY   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   rO   existsru   r   r/   r   r   r   r   rN   update_git_doner   r   r	   r   r   valuesr   r   r   r   r   r   is_git_full_commit_idr   r   r   r   r   r   )rb   r   r   r   r   push_url
origin_urlr   heads_refmaptags_refmapr   s              r+   
update_gitzRunner.update_git4  s   &&*DLL9ww~~bggll4==&AB}}$T]]3!&&..tyy~~>((*
 56RS99##''
3ii""5)99##''
3sHH9:	)HIOOQJ ==9h DEOOXy(Hh$WX J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@x }}..2//(3 }}55h?//h@"::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|   
?M 3!N !-P9 -*S 'U9 	N.NN	P6"B
P11P69	SB
SS	U6"B
U11U69	X+BX&&X+c                J    | j                  g d       | j                          y )N)	submoduleupdatez
--checkoutz--recursive)r   r   ri   s    r+   r  zRunner.update_git_done  s    LMr*   c                   | j                   j                  d      }|j                         dk(  r$t        j                  ddg| j
                         yt        j                  dd|g| j
                        dk7  rGt        j                  ddg| j
                         t        j                  dd|g| j
                         y)	Nr   tiphgpullcwdr   r   T)r   r   lower
subprocesscallr   
check_call)rb   revnos     r+   	update_hgzRunner.update_hg  s    		j);;=E! OOT6N>
  j%8dmmLPQQ%%tVn$--H%%tZ&?T]]Sr*   c                >   | j                   j                  d      }t        dddd| j                  g      \  }}}|}||k(  ry|j	                         dk(  r$t        j                  ddg| j                         yt        j                  ddd	|g| j                         y)
Nr   svnr   z--show-itemTheadr  r  z-r)r   r   r   r   r  r  r  r  )rb   r  _outcurrent_revnos        r+   
update_svnzRunner.update_svn  s    		j)v}j$--XY	3E!;;=F" OOUH-4==A  !!5(D%"@dmmTr*   c                   | j                  d| j                  j                   d       d}t        j                  j                  | j                        s*| j                  d       | j                  j                   }n| j                  j                  dk(  r| j                         }n| j                  j                  dk(  r| j                         }n| j                  j                  dk(  r| j                         }n| j                  j                  dk(  r| j                         }nf| j                  j                  )| j                  d	       | j                  j                   }n'| j                  d
| j                  j                  d       |rNt        j                  j                  | j                        r%| j                  j                  | j                         |S )Nz	Updating rn   Fz  -> Not used.filegitr  r  z/  -> Cannot update subproject with no wrap filez  -> Cannot update
subproject)r   r   rN   r   rO   isdirr   r   r   typer   r
  r  r   update_hash_cache)rb   r   s     r+   r  zRunner.update  sA   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II''6r*   c                   t        j                  d| j                        }| j                  j                  dk7  s)t
        j                  j                  | j                        sy|j                  r|j                  n| j                  j                  d      }|sy| j                  d| d| j                  j                   d       | j                  ||j                        r| j                          yy	)
Nr5   r#  Tr   z	Checkout z in rn   )r   F)r   r   r   r   r&  r   rO   r%  r   r7   r   r   rN   r   r6   r   )rb   r   r7   s      r+   r   zRunner.checkout  s    &&,dll;99>>U""''--*F-4-@-@g))diimmT^F_9[Mdiinn-=SAB[;MMOr*   c           	        | j                  d| j                  j                   d       t        j                  j                  | j                        r| j                  d       y	 | j                  j                  | j                  j                         | j                  d       y# t        $ r8}| j                  dt        j                  t        |                   Y d }~yd }~ww xY w)Nz	Download rn   z  -> Already downloadedTz	  -> doner   F)r   r   rN   r   rO   r%  r   r   r   r   r	   r   r   )rb   r   s     r+   downloadzRunner.download  s    9TYY^^,C0177=='HH./	&&tyy~~6HH[!   	HHVTXXc!f-.	s   &A B' '	C(0.C##C(c                   t        j                  d| j                        }| j                  d| j                          t
        j                  j                  | j                        s| j                  d       y|j                  g|j                  z   }t        |t        j                  | j                        \  }}}|j                  dk7  rddj                  dj                  |      |j                        }| j                  d	t!        j"                  |             | j                  |d
       y| j                  |d
       y)Nr9   zExecuting command in   -> Not downloaded yetT)stderrr  r   z.Command '{}' returned non-zero exit status {}. z  -> rY   rf   F)r   r   r   r   r   r   rO   r%  r:   r;   r   r  STDOUT
returncodeformatru   r	   r   )rb   r   r   pr  r  err_messages          r+   foreachzRunner.foreach  s    &&+T\\:(89ww}}T]]+HH./',,.s:+<+<$--P	3<<1JQQRURZRZ[^R_abamamnKHHWdhh{34HHSbH!"r*   c                   t        j                  d| j                        }| j                  j                  sy| j                  j
                  rat        | j                  j                        j                         }|j                  r|j                          t        j                  d|        | j                  j                  dk(  r]t        | j                  j                        j                         }|j                  r|j                          | j                  d|        |j                  rt        | j                  j                         j                         }	 || j                  j#                  d      z  }|j%                         r0|j                  r|j                          | j                  d|        	 || j                  j#                  d      z  }|j%                         r0|j                  r|j                          | j                  d|        	 t)        |j+                               st-        t/        |             t        | j2                        }|j4                  j                         |j6                  z  }|j9                         r1|j                  r|j                          | j                  d|        y|j;                         sy	 |j                  rt-        t/        |             | j                  d|        y# t&        $ r Y ]w xY w# t&        $ r Y w xY w# t0        $ r Y w xY w# t<        $ r%}t        j>                  d| d|        Y d }~y	d }~ww xY w)
Nr=   Tz	Deleting redirectsource_filenamepatch_filenamezUnable to remove: z: F) r   r   r   r   r&  
redirectedr   original_filenamer   r>   unlinkr	   r   rK   r?   r   cachedirr   is_filer   anyiterdirr   r   FileNotFoundErrorr   parentrN   
is_symlinkis_dirOSErrorerror)rb   r   redirect_filepackagecachesubproject_cache_filesubproject_patch_filesubproject_source_dirr   s           r+   purgezRunner.purge  s   &&)4<<8 yy~~99 !<!<=EEGM$$&HHy0199>>Z' !3!34<<>M$$&HHy01   2 2 ; ;<DDFL(4tyy}}EV7W(W%(002-446HHy)>(?@A(4tyy}}EU7V(V%(002-446HHy)>(?@A<//1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L ?AL -L/ 4L> 	LL	L,+L,/	L;:L;>	M,M''M,c                r    | j                   s+t        j                  d       t        j                  d       y y )NrY   z<Nothing has been deleted, run again with --confirm to apply.)r>   r	   r   r   s    r+   
post_purgezRunner.post_purgeL  s&    HHRLHHST r*   c                   t        j                  d| j                        }|j                  r|j                  rt        d       y|j                  r| j                  d| j                  j                   d       t        j                  j                  | j                        s| j                  d       y| j                  j                          y|j                  rd| j                  j                  vrt!        j"                  d	       yd
| j                  j                  vrt!        j"                  d       yt%        | j                  j&                  | j                  j                  d
         }t)        | j                  j                  j+                  dd            }t%        | j                        }t%        | j                  j,                  | j                  j                  d         }|r|n|j.                  }t1        ||      }t3        |j5                  d            }| j                  d| j                  j                   d| d       t7        j8                  |       ||z
  D ]\  }	|	j;                         s|	j=                  |      }
||
z  }|j.                  j?                  dd       t7        j@                  |	|       ^ y)NrA   z0error: --apply and --save are mutually exclusiveFz#Re-applying patchfiles overlay for rn   r,  Tpatch_directoryz-can only save packagefiles to patch_directoryr7  z-can only save packagefiles from a [wrap-file]lead_directory_missingz**/*zSaving r   )parentsexist_ok)!r   r   r   rB   rC   rh   r   r   rN   r   rO   r%  r   r   r   r  r	   rE  r   r<  r"   r   filesdirrA  rU   r_   globrq   rmtreer=  relative_tomkdircopyfile)rb   r   archive_pathrP  r   packagefilesrP   rS   directory_filessrc_pathrel_pathdst_paths               r+   rZ  zRunner.packagefilesR  s   &&0$,,?==W\\DE==HH:499>>:J#NO77==/23**,<< 		(8(88

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

JK 2 2 ; ;TYY=M=MN_=`aL%)$))*:*:*>*>?WY^*_%`"T]]+I		 2 2DII4D4DEV4WXL%;	AQAQI.|YGM!).."89OHHwtyy~~.d<.DEMM,'+m; 4'')#//	:'(2%%dT%B(34 r*   N)rF   r   r   r   )r;   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   r_   r   r"   )r   z'PurgeArguments'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  r   r  r   r*  r4  rK  rM  rZ  r)   r*   r+   r   r   n   s    N
MJ4 @ @+Z,<'dc

"*gR2$FP U U
'r*   r   c                    | j                  ddd       | j                  dddt         d       | j                  d	d
d t        d       | j                  dddd       y )Nz--sourcedirr   zPath to source directory)defaulthelpz--typesrY   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).)ra  r&  rb  z--allow-insecureF
store_truez"Allow insecure server connections.ra  actionrb  )add_argumentALL_TYPES_STRINGr   r2  s    r+   add_common_argumentsri  |  sx    NN=#2  4NN9bYZjYkkz{  }NN4*DsL  NNN%u\<  >r*   c                ,    | j                  ddd       y )Nr   *z"List of subprojects (default: all)nargsrb  )rf  rh  s    r+   add_subprojects_argumentrn    s    NN=<  >r*   c                   | j                  dd      }|j                  dddd       t        |       t        |       |j	                  t
        j                  	       |j	                  t
        j                  
       |S )Nr  z,Update wrap files from WrapDB (Since 0.63.0)rb  z--forceFrc  z4Update wraps that does not seems to come from WrapDBrd  r!   )pre_func)
add_parserrf  ri  rn  set_defaultsr   r   r   )
subparsersr2  s     r+   add_wrap_update_parserrv    sp    h-[\ANN9eLN  PQNNF$8$8N9NNF44N5Hr*   c                   | j                  dd      }d|_        |j                  dd      }|j                  ddd	d
       |j                  ddd	d       t	        |       t        |       |j                  t        j                         |j                  dd      }|j                  ddd	d       |j                  ddd       t	        |       t        |       |j                  t        j                         |j                  dd      }t	        |       t        |       |j                  t        j                         |j                  dd      }|j                  ddd       |j                  dt        j                  t        j                         t	        |       |j                  g         |j                  t        j                         |j                  d!d"      }t	        |       t        |       |j                  d#d	dd$%       |j                  d&d	dd'%       |j                  t        j                         |j                  t        j                   (       |j                  d)d*      }t	        |       t        |       |j                  d+d	dd,%       |j                  d-d	dd.%       |j                  t        j"                         y )/NCommandsr:   )titledestTr  z&Update all subprojects from wrap filesrp  z--rebaserc  zeRebase your branch on top of wrap's revision. Deprecated, it is now the default behaviour. (git only)rd  z--resetFzBCheckout wrap's revision and hard reset to that commit. (git only)rq  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)rl  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.r4  z/Execute a command in each subproject directory.zcommand ...z/Command to execute in each subproject directory)metavarrb  r;   )r   rK  z*Remove all wrap-based subproject artifactsz--include-cachez Remove the package cache as well)re  ra  rb  z	--confirmz+Confirm the removal of subproject artifacts)	post_funcrZ  zManage the packagefiles overlayz--applyz$Apply packagefiles to the subprojectz--savez%Save packagefiles from the subproject)add_subparsersrequiredrs  rf  ri  rn  rt  r   r  r   r*  argparse	REMAINDERSUPPRESSr4  rK  rM  rZ  )parserru  r2  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 ))  +NNrN"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                N   t         j                  j                  t         j                  j                  | j                              }t         j                  j                  t         j                  j                  |d            s+t        j                  dt        j                  |      d       yt        j                         5  t        |dd      }|j                          |j                         xs d}d d d        t         j                  j                  t         j                  j                  |            s+t        j                  dt        j                  |      d       y	t!        ||d
| j"                  d
      }| j$                  r<|j&                  j)                         D cg c]  \  }}|| j$                  v s| }}}n#t+        |j&                  j-                               }| j.                  r7| j.                  j1                  d      D cg c]  }|j3                          c}ng }	|	D ]  }|t4        vst7        d|dt8                g }
g }t;        j<                         }t;        j>                  |       tA        | jB                        }|	r|D cg c]  }|jD                  |	v s| }}tG        | dd       }|r ||        tI        tK        |            }|D ]~  }tM        |||jN                        jQ                         }tS        |||||       }|jU                  ||jV                        }|
jY                  |       |jY                  |jZ                          |j]                  t;        j^                  |
       }|ja                          tG        | dd       }|r ||        tc        ||      D cg c]
  \  }}|r	| }}}|r+d}|dj                  |      z  }t        jd                  |       tK        |      S # 1 sw Y   xY wc c}}w c c}w c c}w c c}}w )Nzmeson.build	Directoryz-does not seem to be a Meson source directory.r   rY   noner   z"does not seem to have subprojects.r   T)wrap_frontendr#   silent,zUnknown subproject type z, supported types are: rr  r}  zlPlease check logs above as command failed in some subprojects which could have been left in conflict state: rD   )3r   rO   relpathrealpathr   isfileru   r	   rE  r   
no_loggingr
   load_root_meson_fileextract_subproject_dirr%  r   r   r#   r   wrapsitemsr   r  r    r   r   r   r   rg  asyncionew_event_loopset_event_loopr   r   r&  getattrrW   rt   r   r   as_posixr   run_in_executorr   r   rN   run_until_completegatherrj   zipwarning)r   
source_dirintrsubproject_dirrF   rN   r   r  tr    tasks
task_namesloopexecutorrr  r   r   runnertaskresultsr}  r   failuresms                           r+   r   r     sO   !1!1'2C2C!DEJ77>>"'',,z=AB

;		* 57fg		 H'
B?!!#446G-H 77==j.ABdii
35YZ^4PWPfPfostA()W*$47CVCV;VWWQWW^^%&=D]] 3 3C 891QWWY9PRE lI #;A5@WXhWi!jkkl (*E J!!#D4 !'"7"78H"'>$499+=>>w
D1HCJF %z>4>>BKKM4':##Hfjj9T$))$% %%gnne&<=G
LLNd3I'*-j'*BRw'RHRz	TYYx  Qx=WH H X : ?  Ss6   2P(P?PPP/P:
P!P!P)rO   r   rP   r   r   zT.Set[Path])r2  argparse.ArgumentParserr   r   )ru  z'SubParsers'r   r  )r  r  r   r   )r   r   r   r   )=
__future__r   dataclassesr   r   r   r  r  r  rZ   r   rq   concurrent.futures.threadr   pathlibr   typingr   rL   rH   rY   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   ru   rg  rU   rW   r   ri  rn  rv  r  r   r)   r*   r+   <module>r     s   " *       8      ) _ _I I ??*,++H,C,CDJH ) %	 %I 9  	  99Y' #" #"L eJ J JZ>>49l0r*   