
    e<(                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ ddl	m
Z
mZmZmZmZmZ d dlmZ ddlmZmZ ej*                  rd dl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ddZ ddZ!ddZ"ddZ#y)    )annotationsN)glob   )open_wrapdburlWrapExceptionget_releasesget_releases_dataupdate_wrap_fileparse_patch_url)Path   )mesonlibmsubprojectsc                d   | j                  dd      }d|_        |j                  dd      }|j                  dd	d
d       |j	                  t
               |j                  dd      }|j                  dd	d
d       |j                  d       |j	                  t               |j                  dd      }|j                  dd	d
d       |j                  d       |j	                  t               t        j                  |      }|j	                  t        j                         |j                  dd      }|j                  dd	d
d       |j                  d       |j	                  t               |j                  dd      }|j                  dd	d
d       |j	                  t               |j                  dd      }|j                  d       |j	                  t               |j                  dd      }|j                  dd	d
d       |j	                  t               y )NCommandscommand)titledestTlistzshow all available projects)helpz--allow-insecureF
store_truez"Allow insecure server connections.)defaultactionr   	wrap_funcsearchzsearch the db by namenameinstallzinstall the specified projectinfoz$show available versions of a projectstatusz6show installed and available versions of your projectspromotez.bring a subsubproject up to the master projectproject_pathz	update-dbz:Update list of projects available in WrapDB (Since 0.61.0))add_subparsersrequired
add_parseradd_argumentset_defaultslist_projectsr   r   r   add_wrap_update_parserrunr   r    r!   	update_db)parser
subparsersps      :/usr/lib/python3/dist-packages/mesonbuild/wrap/wraptool.pyadd_argumentsr0   !   s   &&Zi&HJJf+HIANN%u\<  >NN]N+h-DEANN%u\<  >NN6NNVN$i.MNANN%u\<  >NN6NNWN%++J7ANN\--N.f+QRANN%u\<  >NN6NNTN"h-efANN%u\<  >NNVN$i.^_ANN>"NNWN%k0lmANN%u\<  >NNYN'    c                n    t        | j                        }|j                         D ]  }t        |        y )N)r   allow_insecurekeysprint)optionsreleasesr.   s      r/   r(   r(   M   s.    G223H]]_ ar1   c                0   | j                   }t        | j                        }|j                         D ]b  \  }}|j	                  |      dk7  rt        |       &|j                  dg       D ](  }|j	                  |      dk7  st        d| d|        * d y )Ndependency_nameszDependency z found in wrap )r   r   r3   itemsfindr5   get)r6   r   r7   r.   r   deps         r/   r   r   R   s    <<DG223H>># A466$<2!Hxx 2B7 A88D>R'KuOA3?@A	Ar1   c                    t        |      }|j                  |       }|st        d|  d      |d   d   }|j                  dd      \  }}||fS )NWrap  not found in wrapdbversionsr   -r   )r   r=   r   rsplit)r   r3   r7   r   latest_versionversionrevisions          r/   get_latest_versionrH   ]   sc    N+H<<DeD6)=>??*%a(N&--c15GXHr1   c                   | j                   }t        j                  j                  d      st	        d      t        j                  j                  t        j                  j                  d|            rt	        d      t        j                  j                  d|dz         }t        j                  j                  |      rt	        d      t        || j                        \  }}t        d| d| d| d	| d	| j                  d
      }t        |d      5 }|j                  |j                                d d d        t        d| d| d|        y # 1 sw Y   xY w)NsubprojectszISubprojects dir not found. Run this script in your source root directory.z5Subproject directory for this project already exists..wrapzWrap file already exists.z!https://wrapdb.mesonbuild.com/v2/_rC   /Twbz
Installed 	 version 
 revision )r   ospathisdir
SystemExitjoinexistsrH   r3   r   openwritereadr5   )r6   r   wrapfilerF   rG   urlfs          r/   r   r   f   s(   <<D77=='dee	ww}}RWW\\-67PQQww||M4'>:H	ww~~h455,T73I3IJWh
<TF!G9AhZWXY]X^^cdfmf|f|  C  DC	h	 	
	JtfIgYj

CD s    EEc                0   t        j                  d       }|j                  |        	 |d   }	 |d   }t        |      \  }}|d   }|||d   |d   |fS # t        $ r t	        d      w xY w# t        $ r  t        j                  |d         }d\  }}Y Mw xY w)	N)interpolationz	wrap-filez1Not a wrap-file, cannot have come from the wrapdb	patch_urlpatch_filenamesource_filename)1N	directory)configparserConfigParserrY   KeyErrorr   r   r   search_version)rZ   cp	wrap_datar_   branchrG   r`   s          r/   get_current_versionrk   u   s    		"	"	6BGGHQ{O	
5k*	 +95"#348Y{3Y?P5QSaaa  QOPPQ  - ((3D)EF#, .-s   A A, A),&BBc                   | j                   }t        j                  j                  d      st	        d      t        j                  j                  d|dz         }t        j                  j                  |      st	        d|z   dz         t        |      \  }}}}}t        || j                        \  }}	||k(  r|	|k(  rt        d|z   dz          t        t        ||||	| j                         t        j                  t        j                  j                  d|      d       	 t        j                  t        j                  j                  d	|             |4	 t        j                  t        j                  j                  d	|             t        d
| d| d|	        y # t        $ r Y Vw xY w# t        $ r Y /w xY w)NrJ   zJSubprojects dir not found. Run this command in your source root directory.rK   zProject z is not in use.z is already up to date.T)ignore_errorszsubprojects/packagecachezUpdated rO   rP   )r   rQ   rR   rS   rT   rU   rV   rk   rH   r3   r5   r
   shutilrmtreeunlinkFileNotFoundError)
r6   r   rZ   rj   rG   subdirsrc_file
patch_file
new_branchnew_revisions
             r/   updaterw      sz   <<D77=='effww||M4'>:H77>>(#d*->>??7J87T4VXvx!3D':P:P!QZV 8j4";;<XtZw?U?UV
MM"'',,}f5TJ
		"'',,98DE 	IIbggll#=zJK 
HTF)J<z,
HI  
 ! 		s$   $3F" 3F1 "	F.-F.1	F=<F=c                    | j                   }t        | j                        }|j                  |      }|st	        d| d      t        d| d       |d   D ]  }t        d|        y )Nr@   rA   zAvailable versions of :rB    )r   r   r3   r=   r   r5   )r6   r   r7   r   vs        r/   r   r      sp    <<DG223H<<DeD6)=>??	"4&
*+* c1r1   c                   t         j                  j                  |       r*| j                  d      sJ t	        j
                  | |       y t         j                  j                  |       rt         j                  j                  |       }t         j                  j                  ||      }t         j                  j                  |      rt        d| d      t	        j                  | |t	        j                  d             y y )NrK   zOutput dir z$ already exists. Will not overwrite.rJ   )ignore)rQ   rR   isfileendswithrn   copyrS   basenamerU   rV   rT   copytreeignore_patterns)	from_path
spdir_name
sproj_name	outputdirs       r/   do_promotionr      s    	ww~~i !!'***Iz*	y	!WW%%i0
GGLLZ8	77>>)${9+5YZ[[	9V5K5KM5Z[ 
"r1   c                   | j                   }d}t        j                  |      }|j                  dt        j
                        }|j                         D ]  }||v st        ||        y  ||vrt        d| d      ||   }t        |      dkD  rLt        d| dt        j                         |D ]  }t        |t        j                          t        d      t        |d	   |       y )
NrJ   rM   zSubproject z not found in directory tree.r   z"There is more than one version of z/ in tree. Please specify which one to promote:
filer   )r"   r   detect_subprojectsreplacerQ   sepvaluesr   rT   lenr5   sysstderr)r6   argumentr   sprojssystem_native_path_argumentmatchesss          r/   r!   r!      s    ##HJ((4F #+"2"23"?==? &'14jA v;xj0MNOOXG
7|a28*<lmtwt~t~ 	&A!#**%	&mZ(r1   c                   t        d       t        d      D ]  }t        j                  j	                  |      d d }	 t        || j                        \  }}	 t        |      \  }}}}}||k(  r||k(  rt        d|d| d	| d
       pt        d|d| d| d| d| d	        y # t        $ r  t        d|dt        j                         Y w xY w# t        $ r  t        d|dt        j                         Y w xY w)NzSubproject statuszsubprojects/*.wrap znot available in wrapdb.r   zWrap file not from wrapdb.zup to date. Branch z, revision .znot up to date. Have rz   z, but z is available.)r5   r   rQ   rR   r   rH   r3   	Exceptionr   r   rk   )r6   wr   latest_branchlatest_revisioncurrent_branchcurrent_revisionrL   s           r/   r    r       s/   	
&' Nww"3B'	/A$H^H^/_,]O	:Ma:P7^-q!Q ]*/??/R"d1.1AM]L^^_`a"d3N3C1EUDVV\]j\kklm|l}  ~L  M  NN  	"d6SZZH	
  	"d8szzJ	s#   B$C$&CC&C98C9c                    t        | j                        }t        d      j                  d       t        d      j	                  d      5 }|j                  |       d d d        y # 1 sw Y   y xY w)NrJ   T)exist_okzsubprojects/wrapdb.jsonrN   )r	   r3   r   mkdirrW   rX   )r6   datar\   s      r/   r+   r+      s^    W334Dt,	'	(	-	-d	3 q	  s   A&&A/c                &    | j                  |        y)Nr   r   )r6   s    r/   r*   r*      s    gr1   )r,   z'argparse.ArgumentParser'returnNone)r6   'argparse.Namespace'r   r   )r   strr3   boolr   zT.Tuple[str, str])rZ   r   r   z,T.Tuple[str, str, str, str, T.Optional[str]])r   r   r   r   r   r   )r6   r   r   int)$
__future__r   r   rQ   rd   rn   typingTr   wrapr   r   r   r	   r
   r   pathlibr   r   r   r   TYPE_CHECKINGargparser0   r(   r   rH   r   rk   rw   r   r   r!   r    r+   r*    r1   r/   <module>r      s{    #     6 6  %??*(X
	AEb(J2	\).N&r1   