
	Y}                 @   s+  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 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 e d k r'e j e e j d d    n  d S)    N)glob   )API_ROOTopen_wrapdburla  This program allows you to manage your Wrap dependencies
using the online wrap database http://wrapdb.mesonbuild.com.

Run this command in your top level source directory.

Usage:

%s <command> [options]

Commands:

 list - show all available projects
 search - search the db by name
 install - install the specified project
 update - update the project to its newest available release
 info - show available versions of a project
 status - show installed and available versions of your projects

c               C   s   t  t t j d  d  S)Nr   )print
help_templsysargv r
   r
   T/mnt/raid6/a/bak/reczko/tools/protein/utils/meson-0.42.1/mesonbuild/wrap/wraptool.py
print_help-   s    r   c             C   sh   t  |   } | j   j d  } t j |  } | d d k rd t d  t |  t j d  n  | S)Nzutf-8outputokzGot bad output from server.r   )r   readdecodejsonloadsr   r   exit)	urlstringudatajdr
   r
   r   
get_result0   s    

r   c              C   s   t  t d  }  |  d } | S)Nprojects)r   r   )r   r   r
   r
   r   get_projectlist:   s    
r   c              C   s(   t    }  x |  D] } t |  q Wd  S)N)r   r   )r   pr
   r
   r   list_projects?   s    	r   c             C   s7   t  t d |   } x | d D] } t |  q Wd  S)Nzquery/byname/r   )r   r   r   )namer   r   r
   r
   r   searchD   s    r   c             C   s2   t  t d |   } | d } | d } | | f S)Nzquery/get_latest/branchrevision)r   r   )r   r   r   r    r
   r
   r   get_latest_versionI   s    

r!   c             C   s)  t  j j d  s, t d  t j d  n  t  j j t  j j d |    rg t d  t j d  n  t  j j d |  d  } t  j j |  r t d  t j d  n  t |   \ } } t	 t
 d |  | | f  } | j   } t | d   } | j |  Wd  QXt d	 |  d
 | d |  d  S)NsubprojectszISubprojects dir not found. Run this script in your source root directory.r   z5Subproject directory for this project already exists.z.wrapzWrap file already exists.zprojects/%s/%s/%s/get_wrapwbZ	Installedr   r    )ospathisdirr   r   r   joinexistsr!   r   r   r   openwrite)r   wrapfiler   r    r   r   fr
   r
   r   installO   s     
!

r-   c             C   su   t  j   } | j |   | d } | d } | j d  } | d	 } t | d
  } | | | d | d | d f S)Nz	wrap-file	patch_url/      	directorysource_filenamepatch_filename)configparserConfigParserr   splitint)r+   cpr.   arrr   r    r
   r
   r   get_current_versiona   s    


r=   c             C   s  t  j j d  s, t d  t j d  n  t  j j d |  d  } t  j j |  sw t d |  d  t j d  n  t |  \ } } } } } t	 |   \ } } | | k r | | k r t d |  d  t j d  n  t
 t d	 |  | | f  }	 |	 j   }
 t j t  j j d |  d
 d y  t  j t  j j d |   Wn t k
 r[Yn Xy  t  j t  j j d |   Wn t k
 rYn Xt | d   } | j |
  Wd  QXt d |  d | d |  d  S)Nr"   zJSubprojects dir not found. Run this command in your source root directory.r   z.wrapZProjectzis not in use.zis already up to date.r   zprojects/%s/%s/%d/get_wrapignore_errorsTzsubprojects/packagecacher#   ZUpdatedz	to branchr    )r$   r%   r&   r   r   r   r'   r(   r=   r!   r   r   r   shutilrmtreeunlinkFileNotFoundErrorr)   r*   )r   r+   r   r    subdirZsrc_fileZ
patch_fileZ
new_branchZnew_revisionr   r   r,   r
   r
   r   updatek   s4    
"  rD   c             C   s|   t  t d |   } | d } | sA t d |   t j d  n  t d |   x& | D] } t d | d | d  qV Wd  S)	Nz	projects/versionszNo available versions ofr   zAvailable versions of %s: r   r    )r   r   r   r   r   )r   r   rE   vr
   r
   r   info   s    
rH   c              C   s  t  d  xt d  D] }  t j j |   d d  d
  } y t |  \ } } Wn% t k
 rz t  d | d  w Yn Xy t |   \ } } } } } Wn t k
 r t  d  w Yn X| | k r | | k r t  d | d | | f  q t  d | d	 | | | | f  q Wd  S)NzSubproject statuszsubprojects/*.wrapr       znot available in wrapdb.zWrap file not from wrapdb.z#up to date. Branch %s, revision %d.z3not up to date. Have %s %d, but %s %d is available.)r   r   r$   r%   r9   r!   	Exceptionr=   )wr   Zlatest_branchZlatest_revisionZcurrent_branchZcurrent_revision_r
   r
   r   status   s     
 
rO   c             C   s  |  s' |  d d k s' |  d d k r2 t    d S|  d } |  d d   }  | d k rb t   n| d k r t |   d k r t d  d St |  d  n | d k r t |   d k r t d	  d St |  d  n | d
 k rt |   d k rt d  d St |  d  nd | d k rVt |   d k rEt d  d St |  d  n' | d k rlt   n t d |  d Sd S)Nr   z-hz--helpr   listr   z%Search requires exactly one argument.r-   z&Install requires exactly one argument.rD   z%update requires exactly one argument.rH   z#info requires exactly one argument.rO   zUnknown command)	r   r   lenr   r   r-   rD   rH   rO   )argscommandr
   r
   r   run   s@    '






rT   __main__)r   r   r$   r7   r?   r   wrapr   r   r   r   r   r   r   r   r!   r-   r=   rD   rH   rO   rT   __name__r   r	   r
   r
   r
   r   <module>   s(   


#