
ȔMc           @   sd  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 d e f d     YZ d	   Z d 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(   ^(.+?)-([^-]+-[^-]+-[^-]+?)(.t[gblx]z)?$t   SlackPackageInfoc           B   sY   e  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   _info(   t   selft   packaget   info(    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyR   %   s    c         C   s   |  j  j d d  S(   Nt   groupt	   Slackware(   R   t   get(   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt   getGroup)   s    c         C   s   |  j  j d d  S(   Nt   licenset   Unknown(   R   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt
   getLicense,   s    c         C   s   |  j  j d d  S(   Nt   summaryt    (   R   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt
   getSummary/   s    c         C   s   |  j  j d d  S(   Nt   descriptionR   (   R   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt   getDescription2   s    c         C   s&   |  j  j d d  } | r" | g Sg  S(   Nt   websiteR   (   R   R   (   R   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt   getReferenceURLs5   s    c         C   s   |  j  } d | k r d | k r |  j } | j d | j  } | j d d  } | d } | d } | j d  r | d  } n  | j d  r | d	 } n  d
   } t j j | | |  d | j	 | | f  g Sg  S(   Nt   locationt   baseurlt   versiont   types   .tgzt   /is   ./i   c         S   s   |  j  d  }  | j  d  } x1 t |  D]# } | |  d k r+ |  d  }  q+ q+ Wd j |   }  d j |  } t j |  |  S(   NR   i(   t   splitt   reversedt   joint	   posixpath(   t   begint   endt   dir(    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt	   mergepathG   s    s   %s-%s%s(
   R   t   _packageR   R   t   endswitht
   startswitht   ost   pathR    t   name(   R   R
   t   pkgR   R   R   R   R%   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt   getURLs;   s    		

	
c         C   s   |  j  j d d   S(   Nt   md5(   R   R   t   None(   R   t   url(    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt   getMD5U   s    c         C   s   |  j  j d g   S(   Nt   filelist(   R   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt   getPathListX   s    (   t   __name__t
   __module__R   R   R   R   R   R   R-   R1   R3   (    (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyR   #   s   								c         C   s]  g  } i  } t  j j |   \ } } t  j j |  \ } } | j d d  \ } } | | d <| | d <| | d <| d k rt j d  \ }	 }
 yg d d  l } | j |   } | j t	  } x) | r t  j
 |	 |  | j t	  } q 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  } | rd | d } t |  } x | j   D] } | r| j |  r| | j   } d | k r/| | d <qd | k rQ| r| | d <qq| j d  rq| d | d <n  | j d  r| d | d <n  | d c d 7<| d c | 7<qqWn  x | j   D]w } | j } | j d  r| d  } n  | d k r| j d  rd | k r/| d j |  q?| g | d <qqW| rY| j |  n  | S(   Nt   -i   R+   R   R   s   .txzs   .taris   File not found: '%s's   unxz <'%s' >%si    s"   %s, unxz helper could not be founds   install/slack-descs   %s:R   R   s	   License: i	   R   s	   Website: R   s   
R   s   ./t   installR2   (   R)   R*   R   t   splitextt   tempfilet   mkstempt   lzmat   LZMAFilet   readR   t   writet   closet   ImportErrort   commandst   existst   IOErrort   abspatht   getstatusoutputt   Errort   tarfilet   opent   extractfilet   lent	   readlinesR(   t   stript
   getmembersR+   R'   t   append(   t   filenamet   infolstR
   t   dirnamet   basenameR	   R   R+   R   t   outputt   tempnameR;   t   inputt   datat   eRA   t   statust   tart   filet   desctagt
   desctaglent   linet   member(    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt   parsePackageFile[   st    


		c         C   s0  i  } g  } d  } d  } d  } t } | r t |  } xQ | D]I }	 |	 j d  d k r^ q= n  |	 j   j d  d  \ }
 } |
 | | <q= W| j   n  t |   } xf| D]^}	 |	 j d  r||	 d j   } t j	 |  } | st
 j t d  |  q n  | r| j |  n  i  } | j d k  rL| j   \ | d <| d	 <} n! | j   \ | d <| d	 <| d
 <d  } t } q | r |	 j d  rK|	 d j   } | | d <| j d  r| d } n  d | | f } | | k r| | | d <n  | j d  rd | d
 <n  | j d  r,d | d
 <n  | j d  rd | d
 <qq|	 j d  rw|	 d j   } | | d <q|	 j d  r|	 d j   } | | d <q|	 j d  rd | d } t |  } q|	 j d  rt } q| rB|	 j   }	 |	 d k rd |	 }	 d | k r/| d j |	  q?|	 g | d <qq| r|	 j |  r|	 | j   }	 d | k r|	 | d <qd  | k r|	 r|	 | d  <qq|	 j d!  r|	 d" | d# <n  |	 j d$  r|	 d" | d% <n  | d  c d& 7<| d  c |	 7<qq q W| r"| j |  n  | j   | S('   Ns    ./ii   s   PACKAGE NAME:i   s   Invalid package name: %si   R+   R   R   s   PACKAGE LOCATION:i   R   s   ./i   s   %s/%sR.   s   .tbzs   .tlzs   .txzs   PACKAGE REQUIRED:t   requireds   PACKAGE CONFLICTS:i   t	   conflictss   PACKAGE DESCRIPTION:s   %s:s
   FILE LIST:R   R2   R   R   s	   License: i	   R   s	   Website: R   s   
(   R/   t   FalseRH   t   findRL   R   R?   R(   t   NAMEREt   matcht   ifacet   warningt   _RN   t	   lastindext   groupsR'   RJ   t   Truet   rstrip(   RO   t   checksumt   md5sumsRP   R
   R[   R\   R2   RZ   R]   R.   R*   R+   t   mt   ignoreR   R`   Ra   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt   parsePackageInfo   s     !	
	

t   SlackLoaderc           B   s/   e  Z d d   Z d   Z d   Z d   Z RS(   c         C   s#   t  j |   i  |  _ | |  _ d  S(   N(   R    R   t   _md5sumst   _baseurl(   R   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyR      s    	c         C   s   g  S(   N(    (   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt   getInfoList   s    c            s  t  j |  j  } x|  j   D]} | d } | d } t | | f g } t | d | f g } d       f d   } g  } d | k r xq | | d  D]\ }	 t |	  t k	 r |	 \ }
 } } | j t	 |
 | | f  q | j t
 t |	  f  q Wn  g  } d | k rVxC | | d  D]. } | \ }
 } } | j t |
 | | f  q!Wn  |  j t | | f | | | |  } |  j r|  j | d <n  | | j |  <| j d	  | j   q Wd  S(
   NR+   R   t   <c         S   sW   |  j    j d  } t |  d k r@ | d | d | d f S|  j    d  d  f Sd  S(   Nt    i   i    i   i   (   RL   R   RJ   R/   (   t   strt   toks(    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt   parserelation  s    c            s   |  s
 g  Sg  } x~ |  j    j d  D]g } | j d  } t |  d k rg | j   | d   q& | j g  | D] }   |  ^ qt  q& W| S(   Nt   ,t   |i   i    (   RL   R   RJ   RN   (   Rx   t   rett   descrR   t   x(   Rz   (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt   parserelations  s    *R`   Ra   R   i   (   Rf   t   getProgresst   _cacheRu   t   SlackProvidest   SlackUpgradesR   t   listRN   t   SlackRequirest   SlackOrRequirest   tuplet   SlackConflictst   buildPackaget   SlackPackageRt   t   loaderst   addt   show(   R   t   progR
   R+   R   t   prvargst   upgargsR   t   reqargst   reqt   nt   rt   vt   cnfargst   cnfR,   (    (   Rz   s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt   load   s6    

	  	c         C   s   t  | | j |   S(   N(   R   R   (   R   R,   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt   getInfo3  s    N(   R4   R5   R/   R   Ru   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyRr      s   		9t   SlackDirLoaderc           B   s&   e  Z d d   Z d   Z d   Z RS(   c         C   s   t  j j |  |  _ t j |  d |  j  | rA | g |  _ na g  t  j |  D]H } | j d  s | j d  s | j d  s | j d  rQ | ^ qQ |  _ d  S(   Ns   file://s   .tgzs   .tbzs   .tlzs   .txz(	   R)   R*   RD   t   _dirRr   R   t
   _filenamest   listdirR'   (   R   R$   RO   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyR   8  s    c         c   sj   xc |  j  D]X } t j j |  j |  } t |  } | r
 | d } |  j j d  | d <| Vq
 q
 Wd  S(   Ni    R   R   (   R   R)   R*   R    R   R_   t   lstrip(   R   RO   t   filepathRP   R
   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyRu   D  s    
c         C   s   t  |  j  S(   N(   RJ   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt   getLoadStepsM  s    N(   R4   R5   R/   R   Ru   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyR   6  s   		t   SlackDBLoaderc           B   s&   e  Z d d   Z d   Z d   Z RS(   c         C   sc   t  j |   | d  k rI t j j t j d d  t j d d   } n  | |  _ |  j	 t
  d  S(   Ns
   slack-rootR   s   slack-packages-dirs   /var/log/packages(   Rr   R   R/   R)   R*   R    t   sysconfR   R   t   setInstalledRk   (   R   R$   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyR   R  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)   R   R   Rq   R*   R    R/   (   R   t   entryRP   R
   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyRu   [  s    

c         C   s   t  t j |  j   S(   N(   RJ   R)   R   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyR   c  s    N(   R4   R5   R/   R   Ru   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyR   P  s   		t   SlackSiteLoaderc           B   s#   e  Z d    Z d   Z d   Z RS(   c         C   s,   t  j |   | |  _ | |  _ | |  _ d  S(   N(   Rr   R   t	   _filenamet	   _checksumRt   (   R   RO   Rm   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyR   h  s    		c         C   s   t  |  j |  j  S(   N(   Rq   R   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyRu   n  s    c         C   sP   t  |  j  } d } x* | D]" } | j d  r | d 7} q q W| j   | S(   Ni    s   PACKAGE NAME:i   (   RH   R   R(   R?   (   R   RZ   t   totalR]   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyR   q  s    
(   R4   R5   R   Ru   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyR   f  s   		t   SlackFileChannelc           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   _digestRk   t   removeLoadersR   R   t
   setChannelt   _loadersRN   (   R   t   fetchert   progresst   digestRQ   RR   t   loader(    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt   fetch|  s    
	(   R4   R5   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyR   z  s   c         C   sJ   |  j  d  s< |  j  d  s< |  j  d  s< |  j  d  rF t |   Sd  S(   Ns   .tgzs   .tbzs   .tlzs   .txz(   R'   R   R/   (   RO   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt   createFileChannel  s    
s   create-file-channelc         C   s>   |  j  t  |  j  t  |  j  t j  |  j  t j  d  S(   N(   t   bindR_   Rq   Rr   R   R   Ru   (   t   psyco(    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt   enablePsyco  s    s   enable-psyco(   t   smart.cacheR    R   t   smart.channelR   t   smart.backends.slack.baset   smart.constR   t   smartR)   t   reR!   RG   R9   t   compileRd   R   R_   R/   Rq   Rr   R   R   R   R   R   t   hookst   registerR   (    (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/slack/loader.pyt   <module>   s,   

8	@UF		