
ȔMc           @   s  d  d l  m Z m Z d  d l m Z d  d l Td  d l m Z d  d l Td  d l	 Z	 d  d l
 Z
 d  d l Z d  d l Z d  d l Z e
 j d  Z e
 j d  Z e
 j d  Z d	 e f d
     YZ d   Z d   Z d   Z d   Z d   Z d e f d     YZ d e f d     YZ d e f d     YZ d e f d     YZ d e f d     YZ d   Z e j d e  d   Z  e j d e   d S(   i(   t   Loadert   PackageInfo(   t   FileChannel(   t   *(   t	   BLOCKSIZENs   ^(.+)-([^-]+-[^-]+)$s   ^%([A-Z0-9]+)%$s   ([\w.+-]+)([<=>]+)?([\w.+-]+)?t   ArchPackageInfoc           B   s   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z RS(   c         C   s&   t  j |  |  | |  _ | |  _ d  S(   N(   R   t   __init__t   _loadert   _info(   t   selft   packaget   loadert   info(    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR   *   s    	c         C   s   |  j  j d d  S(   Nt   groupst	   Archlinux(   R   t   get(   R	   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   getGroup/   s    c         C   s   |  j  j d d  S(   Nt   desct    (   R   R   (   R	   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt
   getSummary2   s    c         C   s   d S(   NR   (    (   R	   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   getDescription5   s    c         C   s   |  j  j d d  S(   Nt   licenseR   (   R   R   (   R	   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt
   getLicense8   s    c         C   sL   |  j  } d | k rH d | k rH |  j } t j j | d | d  g Sg  S(   Nt   filenamet   baseurl(   R   t   _packaget   ost   patht   join(   R	   R   t   pkg(    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   getURLs;   s
    		c         C   s&   |  j  j d  } | r" t |  Sd  S(   Nt   csize(   R   R   t   longt   None(   R	   t   urlt   size(    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   getSizeB   s    
c         C   s   |  j  j d d   S(   Nt   md5sum(   R   R   R!   (   R	   R"   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   getMD5H   s    c         C   s&   |  j  j d  } | r" t |  Sd  S(   Nt	   builddate(   R   R   t   intR!   (   R	   t   date(    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   getBuildTimeK   s    
c         C   s&   |  j  j d  } | r" t |  Sd  S(   Nt   isize(   R   R   R    R!   (   R	   R#   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   getInstalledSizeQ   s    
c         C   s$   |  j  } d | k r  | d g Sg  S(   NR"   (   R   (   R	   R   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   getReferenceURLsW   s    	c         C   s"   |  j  j |   |  _ |  j j   S(   N(   R   t   getPathst   _pathst   keys(   R	   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   getPathList]   s    c         C   s   |  j  | d k S(   Nt   d(   R/   (   R	   R   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt	   pathIsDira   s    c         C   s   |  j  | d k S(   Nt   f(   R/   (   R	   R   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt
   pathIsFiled   s    (   t   __name__t
   __module__R   R   R   R   R   R   R$   R&   R*   R,   R-   R1   R3   R5   (    (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR   (   s   													c         C   s  g  } d  } d  } d  } d  } |  j d  rOt j d  \ } } yg d d  l } | j |   } | j t  }	 x) |	 r t j	 | |	  | j t  }	 qr Wt j
 |  Wn t k
 r<}
 d d  l } t j j |   s t d |    n t j j |   }  | j d |  | f  \ } } | d k r=t d |
  q=n Xt j |  } n t j |   } | j d  } x| j   D]} | j d	  r| d
 j   } | r| j |  n  i  } | | d <d  } qz| rz| j d  r| d j   | d <qS| j d  r | d
 j   | d <qS| j d  rF| d j   | d <qS| j d  rl| d j   | d <qS| j d  r| d j   | d <qS| j d  r| d j   | d <qS| j d  r| d j   | d <qS| j d  r| d j   | d <qS| j d  r*| d j   | d <qS| j d  rS| d
 j   | d  <qSqzqzW| rm| j |  n  | rt j |  n  | j
   | S(!   Ns   .tar.xzs   .taris   File not found: '%s's   unxz <'%s' >%si    s"   %s, unxz helper could not be founds   .PKGINFOt   pkgnamei	   t   namet   pkgveri   t   versiont   pkgdescR   R"   i   R'   i   t   packageri   R#   i   R+   t   archR   i
   t   groupR   t   dependt   depends(   R!   t   endswitht   tempfilet   mkstempt   lzmat   LZMAFilet   readR   R   t   writet   closet   ImportErrort   commandsR   t   existst   IOErrort   abspatht   getstatusoutputt   Errort   tarfilet   opent   extractfilet	   readlinest
   startswitht   stript   appendt   unlink(   R   t   infolstR   t   desctagt
   desctaglent   tempnamet   outputRE   t   inputt   datat   eRK   t   statust   tart   filet   lineR9   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   parseFilePackageInfog   s|    	
	
c         C   s  i  } t  j |   r t  j |   } xg| j   D]V } | j } | d k r1 | j d  rh | d  } n  | j   rz d p} d | | <q1 q1 Wn t |   } | rMi  } x | D] } | s | j   r q n  t j	 |  } | r | j
 d  j   } q n  | r)| | k r)| | j | j    q | j   g | | <q W| j   n  | d rx4 | d D]% } | j d  r}d pd | | <qbWn  | S(   Ns   .PKGINFOt   /iR2   R4   i   t   files(   RQ   t
   is_tarfileRR   t
   getmembersR9   RB   t   isdirRV   t	   SECTIONREt   matchR?   t   lowerRW   t   rstripRI   (   R   t   filelistRb   R   Rc   Rd   t   mt   section(    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   parseFilePackageList   s6    	&
&c   	      C   s+  g  } i  } xt  j |   D] } | j d  s@ | j d  r t j |  |  } t |  } d  } x | D] } | sk | j   r qk n  t j	 |  } | r | j
 d  j   } qk n  | r | | k r | | d | j   | | <qk | j   | | <qk W| j   q q W| r'| j |  n  | S(   NR   RA   i   s   
(   R   t   listdirRB   t	   posixpathR   RR   R!   RV   Rk   Rl   R?   Rm   Rn   RI   RW   (	   t   dirnameRY   R   t   entryR   Rc   Rq   Rd   Rp   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   parseDBPackageInfo   s*    c      	   C   sL  i  } d  } t j   } d  } t j |   } x| j   D]} | j   r | rz t j | |  } t	 j
 |  d  } n  | r | r | | | <n  | j j d  } t j |  }	 |	 s t j t d  |  q: n  i  } n  | j j d  s| j j d  r: | } | j | |  t j | | j  } t |  }
 d  } x |
 D] } | sH| j   rhqHn  t j |  }	 |	 r|	 j d  j   } qHn  | r| | k r| | d | j   | | <qH| j   | | <qHW|
 j   t	 j |  q: q: W| r| r| | | <n  | rBt j | |  } t	 j
 |  d  } n  | j   S(   NRf   s   Invalid package name: %sR   RA   i   s   
(   R!   RC   t   mkdtempRQ   RR   Ri   Rj   Rt   R   R   t   rmdirR9   Rn   t   NAMERERl   t   ifacet   errort   _RB   t   extractRV   Rk   R?   Rm   RI   RX   t   values(   t   dbpathRY   R   t   tempdirt   pkgdirRb   t   membert   temppathR9   Rp   Rc   Rq   Rd   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   parseSitePackageInfo   sX    		$
	c         C   s  d  } t j   } d  } i  } |  rd  } t j |   } | j d |  } | r| } i  } | j   r | r t j | |  }	 t	 j
 |	  d  } n  | j j d  } n  t r| } | j | |  t j | | j  }	 t |	  }
 d  } x |
 D] } | s | j   rq n  t j |  } | rG| j d  j   } q n  | rs| | k rs| | j | j    q | j   g | | <q W|
 j   t	 j |	  n  | d rx4 | d D]% }
 |
 j d  rd pd | |
 <qWqqn  | rt j | |  }	 t	 j
 |	  d  } n  | S(   Ns   %s/filesRf   i   Rg   R2   R4   (   R!   RC   Rx   RQ   RR   t	   getmemberRj   Rt   R   R   Ry   R9   Rn   t   TrueR~   RV   Rk   Rl   R?   Rm   RW   RI   RX   RB   (   t   flpathRu   R   R   R   Ro   Rg   R   R9   R   Rc   Rq   Rd   Rp   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   parseSitePackageList  sV    	

,	t
   ArchLoaderc           B   s8   e  Z d d   Z d   Z d   Z d   Z d   Z RS(   c         C   s   t  j |   | |  _ d  S(   N(   R    R   t   _baseurl(   R	   R   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR   A  s    c         C   s   g  S(   N(    (   R	   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   getInfoListE  s    c            s  t  j |  j  } x|  j   D]} | d } | d } d | k rZ | d | d 7} n  t | | f g } t | d | f g } d       f d   } d | k r x@ | | d  D]+ } | \ }	 }
 } | j t |	 | f  q Wn  g  } d	 | k r@xC | | d	  D]. } | \ }	 }
 } | j t |	 |
 | f  qWn  g  } d
 | k rxC | | d
  D]. } | \ }	 }
 } | j t |	 |
 | f  qcWn  |  j	 t
 | | f | | | |  } |  j r|  j | d <n  | | j |  <| j d  | j   q Wd  S(   NR9   R;   R>   t   -t   <c         S   sZ   t  j |  j    } | rC | j d  | j d  | j d  f S|  j   d  d  f Sd  S(   Ni   i   i   (   t	   DEPENDSRERl   RV   R?   R!   (   t   strRp   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   parserelationV  s    (c            s:   g  } x- |  j    j   D] } | j   |   q W| S(   N(   RV   t
   splitlinesRW   (   R   t   rett   descr(   R   (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   parserelations]  s    t   providesRA   t	   conflictsR   i   (   R{   t   getProgresst   _cacheR   t   ArchProvidest   ArchUpgradesRW   t   ArchRequirest   ArchConflictst   buildPackaget   ArchPackageR   t   loaderst   addt   show(   R	   t   progR   R9   R;   t   prvargst   upgargsR   t   prvt   nt   rt   vt   reqargst   reqt   cnfargst   cnfR   (    (   R   s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   loadH  s>    

	  	c         C   s   t  | |  | j |   S(   N(   R   R   (   R	   R   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   getInfo  s    c         C   s   i  S(   N(    (   R	   R   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR.     s    N(   R6   R7   R!   R   R   R   R   R.   (    (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR   ?  s
   		8	t   ArchDirLoaderc           B   s/   e  Z d d   Z d   Z d   Z d   Z RS(   c         C   s   t  j j |  |  _ t j |  d |  j  | rA | g |  _ nC g  t  j |  D]* } | j d  su | j d  rQ | ^ qQ |  _ d  S(   Ns   file:///s   .pkg.tar.gzs   .pkg.tar.xz(	   R   R   RN   t   _dirR   R   t
   _filenamesRs   RB   (   R	   t   dirR   t   x(    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR     s    c         c   st   xm |  j  D]b } t j j |  j |  } t |  } | r
 | d } | | d <t j j |  | d <| Vq
 q
 Wd  S(   Ni    R   R   (   R   R   R   R   R   Re   t   getsize(   R	   R   t   filepathRY   R   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR     s    

c         C   s   t  |  j  S(   N(   t   lenR   (   R	   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   getLoadSteps  s    c         C   s#   t  t j j |  j | j d   S(   NR   (   Rr   R   R   R   R   R   (   R	   R   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR.     s    N(   R6   R7   R!   R   R   R   R.   (    (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR     s   
	
	t   ArchDBLoaderc           B   s/   e  Z d d   Z d   Z d   Z d   Z RS(   c         C   sf   t  j |   | d  k rL t j j t j d d  t j d d  d  } n  | |  _ |  j	 t
  d  S(   Ns	   arch-rootRf   s   arch-packages-dirs   var/lib/pacmant   local(   R   R   R!   R   R   R   t   sysconfR   R   t   setInstalledR   (   R	   R   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR     s    		c         c   sa   xZ t  j |  j  D]F } t t  j j |  j |   } | r | d } d  | d <| Vq q Wd  S(   Ni    R   (   R   Rs   R   Rw   R   R   R!   (   R	   Rv   RY   R   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR     s    

c         C   s   t  t j |  j   S(   N(   R   R   Rs   R   (   R	   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR     s    c         C   s=   d | j  d | j  d f } t t j j |  j | d   S(   Ns   %s-%sR9   R;   Rg   (   R   Rr   R   R   R   R   (   R	   R   Ru   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR.     s    N(   R6   R7   R!   R   R   R   R.   (    (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR     s   
		t   ArchSiteLoaderc           B   s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C   s,   t  j |   | |  _ | |  _ | |  _ d  S(   N(   R   R   t	   _filenamet	   _pathlistR   (   R	   R   t   pathlistR   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR     s    		c         C   s   t  |  j  S(   N(   R   R   (   R	   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR     s    c         C   sV   t  j |  j  } d } x- | j   D] } | j   r% | d 7} q% q% W| j   | S(   Ni    i   (   RQ   RR   R   Ri   Rj   RI   (   R	   Rc   t   totalR   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR     s    
c         C   s.   d | j  d | j  d f } t |  j |  S(   Ns   %s-%sR9   R;   (   R   R   R   (   R	   R   Ru   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR.     s    (   R6   R7   R   R   R   R.   (    (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR     s   				t   ArchFileChannelc           B   s   e  Z d    Z RS(   c         C   s   t  j j |  j  } | |  j k r( t S|  j   t  j j |  j  \ } } t | |  } | j	 |   |  j
 j |  | |  _ t S(   N(   R   R   t   getmtimeR   t   _digestR   t   removeLoaderst   splitR   t
   setChannelt   _loadersRW   (   R	   t   fetchert   progresst   digestRu   t   basenameR   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   fetch  s    
	(   R6   R7   R   (    (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyR     s   c         C   s,   |  j  d  s |  j  d  r( t |   Sd  S(   Ns   .pkg.tar.gzs   .pkg.tar.xz(   RB   R   R!   (   R   (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   createFileChannel  s    
s   create-file-channelc         C   s1   |  j  t  |  j  t j  |  j  t j  d  S(   N(   t   bindt   parsePackageInfoR   R   R   R   (   t   psyco(    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   enablePsyco  s    s   enable-psyco(!   t   smart.cacheR    R   t   smart.channelR   t   smart.backends.arch.baset   smart.constR   t   smartR   t   reRt   RQ   RC   t   compileRz   Rk   R   R   Re   Rr   Rw   R   R   R   R   R   R   R   R   t   hookst   registerR   (    (    (    s>   /usr/lib/python2.7/dist-packages/smart/backends/arch/loader.pyt   <module>   s6   

?	B			/	0G		