o
    nc'                     @  s  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rEd dlZd3ddZd4ddZd4ddZd5ddZd4ddZd6d d!Zd4d"d#Zd4d$d%Zd7d(d)Zd4d*d+Z d4d,d-Z!d4d.d/Z"d8d1d2Z#dS )9    )annotationsN)glob   )open_wrapdburlWrapExceptionget_releasesget_releases_dataupdate_wrap_fileparse_patch_url)Path   )mesonlibmsubprojectsparser'argparse.ArgumentParser'returnNonec                 C  sz  | j ddd}d|_|jddd}|jdd	d
dd |jtd |jddd}|jdd	d
dd |d |jtd |jddd}|jdd	d
dd |d |jtd t	|}|jtj
d |jddd}|jdd	d
dd |d |jtd |jddd}|jdd	d
dd |jtd |jddd}|d |jtd |jddd}|jdd	d
dd |jtd d S )NZCommandscommand)titledestTlistzshow all available projects)helpz--allow-insecureF
store_truez"Allow insecure server connections.)defaultactionr   Z	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))Zadd_subparsersrequiredZ
add_parseradd_argumentset_defaultslist_projectsr   r   r   Zadd_wrap_update_parserrunr   r    r!   	update_db)r   Z
subparsersp r*   whome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/wrap/wraptool.pyadd_arguments   sP   










r,   options'argparse.Namespace'c                 C  s$   t | j}| D ]}t| q	d S )N)r   allow_insecurekeysprint)r-   releasesr)   r*   r*   r+   r&   K   s   

r&   c                 C  sr   | j }t| j}| D ]*\}}||dkrt| q|dg D ]}||dkr5td| d|  q"qd S )NZdependency_nameszDependency z found in wrap )r   r   r/   itemsfindr1   get)r-   r   r2   r)   r   depr*   r*   r+   r   P   s   

r   r   strr/   boolT.Tuple[str, str]c                 C  sJ   t |}|| }|std|  d|d d }|dd\}}||fS )NWrap  not found in wrapdbversionsr   -r   )r   r6   r   rsplit)r   r/   r2   r   Zlatest_versionversionrevisionr*   r*   r+   get_latest_version[   s   
rB   c              
   C  s   | j }tjdstdtjtjd|rtdtjd|d }tj|r/tdt|| j\}}t	d| d| d| d	| d	| jd
}t
|d}||  W d    n1 sbw   Y  td| d| d|  d S )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/_r>   /Twbz
Installed 	 version 
 revision )r   ospathisdir
SystemExitjoinexistsrB   r/   r   openwritereadr1   )r-   r   wrapfiler@   rA   urlfr*   r*   r+   r   d   s   (r   rS   ,T.Tuple[str, str, str, str, T.Optional[str]]c                 C  s   t jd d}||  z|d }W n ty   tdw z|d }W n ty7   t|d }d\}}Y nw t|\}}|d }|||d |d |fS )	N)interpolationz	wrap-filez1Not a wrap-file, cannot have come from the wrapdb	patch_urlZsource_filename)1Npatch_filename	directory)configparserConfigParserrR   KeyErrorr   r   Zsearch_versionr
   )rS   cpZ	wrap_datarX   branchrA   rZ   r*   r*   r+   get_current_versions   s    
ra   c           
      C  s6  | j }tjdstdtjd|d }tj|s$td| d t|\}}}}}t|| j	\}}	||krG|	|krGt
d| d  tt||||	| j	 tjtjd|dd zttjd	| W n	 tyq   Y nw |d urzttjd	| W n	 ty   Y nw t
d
| d| d|	  d S )NrC   zJSubprojects dir not found. Run this command in your source root directory.rD   zProject z is not in use.z is already up to date.T)ignore_errorszsubprojects/packagecachezUpdated rH   rI   )r   rJ   rK   rL   rM   rN   rO   ra   rB   r/   r1   r	   shutilrmtreeunlinkFileNotFoundError)
r-   r   rS   r`   rA   ZsubdirZsrc_fileZ
patch_fileZ
new_branchZnew_revisionr*   r*   r+   update   s2   rg   c                 C  sZ   | j }t| j}||}|std| dtd| d |d D ]}td| q#d S )Nr;   r<   zAvailable versions of :r=    )r   r   r/   r6   r   r1   )r-   r   r2   r   vr*   r*   r+   r      s   

r   	from_path
spdir_namec                 C  s   t j| r| dsJ t| | d S t j| rCt j| }t j||}t j	|r6t
d| dtj| |tdd d S d S )NrD   zOutput dir z$ already exists. Will not overwrite.rC   )ignore)rJ   rK   isfileendswithrc   copyrL   basenamerN   rO   rM   copytreeignore_patterns)rk   rl   Z
sproj_nameZ	outputdirr*   r*   r+   do_promotion   s   rt   c                 C  s   | j }d}t|}|dtj}| D ]}||v r#t||  d S q||vr0td| d|| }t	|dkrUt
d| dtjd |D ]	}t
|tjd qGtdt|d	 | d S )
NrC   rF   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   Zdetect_subprojectsreplacerJ   sepvaluesrt   rM   lenr1   sysstderr)r-   Zargumentrl   ZsprojsZsystem_native_path_argumentmatchessr*   r*   r+   r!      s$   

r!   c                 C  s   t d tdD ]p}tj|d d }z
t|| j\}}W n ty0   t d|dtj	d Y qw zt
|\}}}}}W n tyN   t d|dtj	d Y qw ||kre||kret d|d| d	| d
 qt d|d| d| d| d| d	 qd S )NzSubproject statuszsubprojects/*.wrap znot available in wrapdb.ru   zWrap file not from wrapdb.zup to date. Branch z, revision .znot up to date. Have ri   z, but z is available.)r1   r   rJ   rK   rq   rB   r/   	Exceptionr{   r|   ra   )r-   wr   Zlatest_branchZlatest_revisionZcurrent_branchZcurrent_revisionrE   r*   r*   r+   r       s&   (r    c                 C  sX   t | j}tdjdd tdd}|| W d    d S 1 s%w   Y  d S )NrC   T)exist_okzsubprojects/wrapdb.jsonrG   )r   r/   r   mkdirrP   rQ   )r-   datarU   r*   r*   r+   r(      s
   
"r(   intc                 C  s   |  |  dS )Nr   r   )r-   r*   r*   r+   r'      s   
r'   )r   r   r   r   )r-   r.   r   r   )r   r8   r/   r9   r   r:   )rS   r8   r   rV   )rk   r8   rl   r8   r   r   )r-   r.   r   r   )$
__future__r   r{   rJ   r\   rc   typingTr   wrapr   r   r   r   r	   r
   pathlibr   r   r   r   TYPE_CHECKINGargparser,   r&   r   rB   r   ra   rg   r   rt   r!   r    r(   r'   r*   r*   r*   r+   <module>   s0    

,


	







