
N-Y3                 @   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 Z d d l	 Z	 d d l
 m Z d d l  m Z y d d l Z d Z d Z Wn e k
 r d	 Z d
 Z Yn Xd	 a d d   Z d d   Z d d   Z Gd d   d  Z Gd d   d  Z d S)   )mlog    N)Path   )WrapModeTz!https://wrapdb.mesonbuild.com/v1/Fz http://wrapdb.mesonbuild.com/v1/c              C   sP   t  j t  j  }  |  j t  j O_ |  j t  j O_ t  j |  _ |  j   |  S)N)	sslZ
SSLContextZPROTOCOL_SSLv23optionsZOP_NO_SSLv2ZOP_NO_SSLv3ZCERT_REQUIREDZverify_modeZload_default_certs)Zctx r	   P/mnt/raid6/a/bak/reczko/tools/protein/utils/meson-0.42.1/mesonbuild/wrap/wrap.pybuild_ssl_context!   s    
r   c             C   sc   t  j d d | g |  d t  j d t  j } | j   \ } } | j d k rY d | f Sd | f S)Ngitz-Cstdoutstderrr   FT)
subprocessPopenPIPEcommunicate
returncode)cmdZ
workingdirpcouterrr	   r	   r
   	quiet_git)   s    
r   c             C   s   t  rQ y t j j |   SWqQ t j j k
 rM t sI t d  d a n  YqQ Xn  t ss t d d t j	 d a n  |  j
 d  r d |  d d   }  n  t j j |   S)Nz?SSL connection failed. Falling back to unencrypted connections.Tz6Warning: SSL not available, traffic not authenticated.filehttpshttp   )has_sslurllibrequesturlopenerrorZURLErrorssl_warning_printedprintsysr   
startswith)Z	urlstringr	   r	   r
   open_wrapdburl1   s    
	
	r&   c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)PackageDefinitionc             C   s   i  |  _  t |   } | j   j   } | d k rB d |  _ n< | d k rZ d |  _ n$ | d k rr d |  _ n t d   xi | D]a } | j   } | d k r q n  | j d	 d
  \ } } | j   } | j   } | |  j  | <q WWd  QXd  S)Nz[wrap-file]r   z
[wrap-git]r   z	[wrap-hg]hgzInvalid format of package file =r   )valuesopenreadlinestriptypeRuntimeErrorsplit)selffnameifilefirstlinekvr	   r	   r
   __init__F   s$    	zPackageDefinition.__init__c             C   s   |  j  | S)N)r+   )r2   keyr	   r	   r
   get\   s    zPackageDefinition.getc             C   s   d |  j  k S)N	patch_url)r+   )r2   r	   r	   r
   	has_patch_   s    zPackageDefinition.has_patchN)__name__
__module____qualname__r9   r;   r=   r	   r	   r	   r
   r'   E   s   r'   c               @   s   e  Z d  Z e d  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 S)Resolverr   c             C   s1   | |  _  | |  _ t j j |  j d  |  _ d  S)NZpackagecache)	wrap_modesubdir_rootospathjoincachedir)r2   rC   rB   r	   r	   r
   r9   c   s    		zResolver.__init__c             C   s  t  t j j |  j |   } t j j | j d d     } | j   r | d j   r] | St | j	   d   r | d j   r d } t
 | j |    q n* | j   r d } t
 | j |    n  t |  } |  j |  r | S|  j t j k rd } t
 |   n  t j j |  j | d  } t j j |  scd } t
 | j | |    n  t |  } | j d	 k rt j j |  j  st j |  j  n  |  j | |  |  j |  nJ | j d
 k r|  j |  n+ | j d k r|  j |  n t d   | j d  S)Nr   zmeson.buildz.gitz.{!r} is not empty and has no meson.build filesz>{!r} already exists and is not a dir; cannot use as subprojectz7Automatic wrap-based subproject downloading is disabledz.wrapzNo {}.wrap found for {!r}r   r   r(   zUnreachable code.	directory)r   rD   rE   rF   rC   partsis_diris_filenextiterdirr0   formatexistsstrresolve_git_submodulerB   r   
nodownloadisfiler'   r/   isdirrG   mkdirdownloadextract_packageget_gitget_hgAssertionErrorr;   )r2   packagenamedirnameZ
subprojdirmr3   pr	   r	   r
   resolveh   sB    &zResolver.resolvec             C   s   t  d g |  j  \ } } | s% d St  d d | g |  j  \ } } | sP d S| j d  r t j d d |  j d d d	 | g  d
 k r d SnO | j d  r t j d d d g d | r d Sn d } t | j |    d S)Nz	rev-parseFZ	submodulestatus   -r   z-Cupdatez--initr       checkout.cwdTz"Unknown git submodule output: {!r})r   rC   r%   r   callr[   rO   )r2   r]   retr   r^   r	   r	   r
   rR      s    !-zResolver.resolve_git_submodulec             C   s  t  j j |  j | j d   } | j d  } t  j j |  } | ry t j d d g d | Wn% t j k
 r t	 d |   Yn X| j
   d k r t j d d g d | qt j d d	 | g d | d
 k rt j d d g d | t j d d	 | g d | qn t j d d | j d  | j d  g d |  j | j
   d k rt j d d	 | g d | n  | j j d  } | rt j d d d d d | g d | n  d  S)NrH   revisionr   z	rev-parserg   ze%s is not empty but is not a valid git repository, we can not work with it as a subproject directory.headpullre   r   Zfetchcloneurlzpush-urlZremotezset-urlz--pushorigin)rD   rE   rF   rC   r;   rU   r   
check_callCalledProcessErrorr0   lowerrh   r+   )r2   r_   checkoutdirrevnois_thereZpush_urlr	   r	   r
   rY      s2    !$
zResolver.get_gitc             C   s>  t  j j |  j | j d   } | j d  } t  j j |  } | r | j   d k rv t j d d g d | q:t j d d | g d | d k r:t j	 d d g d | t j	 d d | g d | q:ne t j	 d d	 | j d
  | j d  g d |  j | j   d k r:t j	 d d | g d | n  d  S)NrH   rj   Ztipr(   rl   rg   re   r   rm   rn   )
rD   rE   rF   rC   r;   rU   rr   r   rh   rp   )r2   r_   rs   rt   ru   r	   r	   r
   rZ      s    !$zResolver.get_hgc       
      C   s  d } | j  d  r$ t |  } n t j j |  } t j |  2} y t | j   d  } Wn t	 k
 r| d  } Yn X| d  k r t
 d  | j   St
 d |  t
 d d d	 t j j   d
 } g  } d
 } x | j |  } | d k r Pn  | t |  7} | j |  t | | d  }	 x7 | |	 k  ret
 d d d	 t j j   | d 7} q/Wq t
 d	  Wd  QXd j |  S)N
   i   zhttps://wrapdb.mesonbuild.comzContent-Lengthz!Downloading file of unknown size.zDownload size:zDownloading: endr)   r       rf   r   i (  )r%   r&   r   r   r    
contextlibclosingintinfo	TypeErrorr#   readr$   r   flushlenappendrF   )
r2   rn   Z	blocksizeZrespZdlsizeZprinted_dotsblocksZ
downloadedblockZratior	   r	   r
   get_data   s>    

zResolver.get_datac             C   s)   t  j   } | j |  | j   } | S)N)hashlibsha256rc   	hexdigest)r2   datah	hashvaluer	   r	   r
   get_hash	  s    zResolver.get_hashc             C   s  t  j j |  j | j d   } t  j j |  rS t j d t j |  d  d  S| j d  } t j d t j |  d t j |   |  j	 |  } |  j
 |  } | j d  } | | k r t d | | | f   n  t | d	   } | j |  Wd  QX| j   r| j d
  }	 t j d t j |	   |  j	 |	  }
 |  j
 |
  } | j d  } | | k rt d | | | f   n  t  j j |  j | j d   } t | d	   } | j |
  Wd  QXn t j d  d  S)Nsource_filenameZUsingzfrom cache.Z
source_urlZDownloadingfromZsource_hashz6Incorrect hash for source %s:
 %s expected
 %s actual.wbr<   zDownloading patch fromZ
patch_hashz4Incorrect hash for patch %s:
 %s expected
 %s actualpatch_filenamezPackage does not require patch.)rD   rE   rF   rG   r;   rP   r   logboldr   r   r0   r,   writer=   )r2   r_   r\   ZofnameZsrcurlZsrcdataZdhashZexpectedfZpurlZpdataZphashfilenamer	   r	   r
   rW     s2    !(!zResolver.downloadc             C   s]  t  j d k  rx y d d  l } ~ Wn t k
 r6 Yqx Xy& t j d d d g t j g  d  Wqx t j k
 rt Yqx Xn  t j	 j
 |  j | j d   } t j	 j |  r d  S|  j } y$ | j d	  t j |  | } Wn t k
 r Yn Xt j t j	 j
 |  j | j d
   |  | j   rYt j t j	 j
 |  j | j d   |  j  n  d  S)N   r   r   Zxztarz.tar.xzz.txzzxz'ed tar-filerH   Zlead_directory_missingr   r   )r   r   )r$   version_infolzmaImportErrorshutilregister_unpack_format_unpack_tarfileRegistryErrorrD   rE   rF   rC   r;   rU   rV   KeyErrorunpack_archiverG   r=   )r2   packager   Z
target_dirextract_dirr	   r	   r
   rX   +  s.    &!	
+zResolver.extract_packageN)r>   r?   r@   r   r9   r`   rR   rY   rZ   r   r   rW   rX   r	   r	   r	   r
   rA   b   s   0#"rA   )r)   r   ry   Zurllib.requestr   rD   r   r   r   r$   pathlibr   r   r   r   ZAPI_ROOTr   r"   r   r   r&   r'   rA   r	   r	   r	   r
   <module>   s&   0
