
N_c           @   s  d  d l  Z  d  d l Z  d  d l Z d  d l Z d  d l m Z m Z m Z m Z d  d l	 Z	 d  d l
 Z
 d  d l m Z m Z m 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  d l Z d  d l Z d  d l Z d   Z d   Z d   Z d	   Z d
   Z d   Z  d e e e f d     YZ! d e j" f d     YZ# d   Z$ d   Z% d   Z& d   Z' d Z( d Z) d S(   iN(   t   PackageObjectt   RpmBaset   YumAvailablePackaget   parsePackages(   t
   executeSQLt   sql_esct   sql_esc_glob(   t   seq_max_split(   t   to_utf8t
   to_unicodec            s>     f d   }   j  | _    j | _ | j j   j  | S(   s8   This decorator converts sqlite exceptions into RepoErrorc             s   y   |  |   SWnv t  j j k
 r } t j d k  rt t | d  r_ t j t | j	   qt t j t |   n  t j t |   n Xd  S(   Ni  t   message(
   t   sqlutilst   sqlitet   Errort   syst
   hexversiont   hasattrt   Errorst	   RepoErrort   strR
   (   t   argst   kwargst   e(   t   func(    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   newFunc,   s    (   t   __name__t   __doc__t   __dict__t   update(   R   R   (    (   R   s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   catchSqliteException*   s
    c         C   s   t  j |   S(   N(   t   misct
   share_data(   t   value(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _share_data>   s    c         C   sb   |  | k r t  S| s t S|  rN | rN |  d d k rN |  d | d k rN t S| |  r^ t  St S(   Ni    t   ?t   *t   [(   R"   R#   R$   (   t   Truet   False(   t   matcht   regexp_matcht   n(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _parse_pkg_nB   s    0c   	      C   s  | d } | s t  d   |  | k r, t S|  rt | rt |  d d k rt |  d | d k rt |  d | d k rt t Sd | k rd | | f | d <d	 | | | | f | d
 <d | | f | d <d | | | f | d <d | | | | | f | d <d | | | | | f | d <n  t | | d | d
 | d | d | d | d g  } |  | k r_t S| sit Sx | D] } | |  rpt SqpWt S(   NR)   s   Nothing in epochi    R"   R#   R$   t   nameArchs   %s.%ss   %s-%s-%s.%st   nameVerRelArchs   %s-%st   nameVers   %s-%s-%st
   nameVerRels   %s:%s-%s-%s.%st   envras   %s-%s:%s-%s.%st   nevra(   R"   R#   R$   (   t   AssertionErrorR%   R&   t   set(	   R'   R(   t   dataR   t   vt   rt   aR)   t   item(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt
   _parse_pkgN   s0    
( c         C   s  t  r	 n|  d k r: t | | | | | | |  rt Sng|  d k rc t | | | d  rt Sn>|  d k r t | | |  rt Sn|  d k r d	 | k r d
 | d | | | f | d	 <n  | | d	 k rt Sn|  d k r1d | k rd | d | | | | f | d <n  t | | | d  rt Snp|  d k rT| d | k rt SnM|  d k rd	 | k rd
 | d | | | f | d	 <n  | d	 | k rt Sn |  d k rd | k rd | d | | | | f | d <n  | d | k rt Sn |  d k r| | d k rt Sn |  d k r=| d | k rt Snd |  d k rZ| d rt SnG |  d k rw| d st Sn* |  d k rt St  st d |    d  St  S(   Nt   eqR'   s   name.eqs
   name.matchR)   s   arch.eqs
   arch.matchs   nevr.eqt   nevrs   %s-%s:%s-%ss   nevra.eqs   nevra.matchR0   s   %s-%s:%s-%s.%ss   name.ins   nevr.ins   nevra.ins	   pkgtup.eqt   pkgtups	   pkgtup.int   markedt   washedR#   s   Bad excluder: (   R9   s   match(   s   name.eqs
   name.match(   s   arch.eqs
   arch.match(   s   nevra.eqs   nevra.match(   R&   R8   R%   R*   R1   t   None(   t   excluderR'   R(   R3   R   R4   R5   R6   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _excluder_matchm   sf     !$!$

c         c   sO   d } xB |  D]: } | d k r, | | } n | | | k rB q n  | Vq Wd S(   s  Eliminate duplicate rows from cursor based on field.

    Assuming the result set can be divided into one or more equivalent groups
    of rows based on the given field, this wrapper will yield rows from only
    one of the groups, avoiding duplicates.
    N(   R>   (   t   curt   fieldt	   first_valt   ob(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _deduplicate   s    t   YumAvailablePackageSqlitec           B   s   e  Z d    Z e d d    Z d d  Z e d    Z d   Z	 d   Z
 d   Z d   Z d	   Z d
 e d  Z e d  Z d
 d  Z e d  Z d   Z RS(   c         C   s   i d d 6d d 6d d 6d	 d 6|  _  | j |  _ | j |  _ | |  _ d  |  _ t |  _ d  |  _	 |  j
 |  |  j d  k r d |  _ n  |  j |  _ |  j |  _ |  j |  _ |  j |  j |  j |  j |  j f |  _ d  |  _ d  |  _ d  S(
   Nt	   obsoletest	   conflictst   requirest   providest   0(    (    (    (    (   t   prcot   sackt   idt   repoidt   repoR>   t   stateR&   t   _loadedfilest   _filest   _read_db_objt   epocht   pkgIdt   versiont   vert   releaset   relt   namet   archR;   t
   _changelogt   _hash(   t   selfRP   t   db_obj(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   __init__   s&    
				'	t   fgetc         C   s
   |  j    S(   N(   t
   _loadFiles(   R_   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   <lambda>   s    c         C   s   | r0 y | | SWq0 t  t f k
 r, d	 SXn  xX d d d d d d g D]> } y t |  | t | |   WqI t  t f k
 r qI XqI Wy@ | d |  _ t | d  } | | d t f } | g |  _ Wn t  t f k
 r n Xd	 S(
   sw   read the db obj. If asked for a specific item, return it.
           otherwise populate out into the object what existsR[   R\   RU   RW   RY   t   pkgKeyRV   t   checksum_typeN(   t
   IndexErrort   KeyErrorR>   t   setattrR!   RV   R%   t
   _checksums(   R_   R`   R7   Rf   t	   check_sum(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyRT      s"    c         G   s=   t  |  j | d  |  j } | j   } t | | |  | S(   s6    Exec SQL against an MD of the repo, return a cursor. t   db(   t   getattrRM   RP   t   cursorR   (   R_   t   MDt   sqlR   t   cacheRA   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _sql_MD   s    c         C   s  i d d 6d d 6d d 6d d 6d	 d
 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d  6} | j  d!  r | j d!  r t |  n  | j | |  } y) |  j d" d# | |  j f  j   } Wn@ t j k
 r} t	 |  j  d$  rt
 t	 |   n    n X| d% } | d& k rI| d  k rId' } n  | d- k rj| d  k rjd* } n  | i	 d+ d 6d+ d 6d+ d 6d+ d 6d+ d 6d+ d( 6d+ d) 6d+ d 6d+ d, 6k rt |  } n  t |  | |  | S(.   Nt   size_packaget   packagesizet   size_archivet   archivesizet   size_installedt   installedsizet
   time_buildt	   buildtimet   rpm_header_startt   hdrstartt   rpm_header_endt   hdrendt   location_baset   basepatht   location_hreft   relativepatht	   time_filet   filetimet   rpm_packagert   packagert	   rpm_groupt   groupt   rpm_buildhostt	   buildhostt   rpm_sourcerpmt	   sourcerpmt
   rpm_vendort   vendort   rpm_licenset   licenseRV   t   checksum_valuet   __t   primarys'   SELECT %s FROM packages WHERE pkgId = ?s   no such columni    RU   RK   t   summaryt   descriptiont    i   t   url(   R   R   (   t
   startswitht   endswitht   AttributeErrort   getRr   RV   t   fetchoneR   R   R   Rh   R>   R!   Ri   (   R_   t   varnamet   db2simplemapt   dbnameR5   R   R    (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   __getattr__   sN    

	
		c   	      C   s'  |  j  r |  j Si  } |  j j |  j d d |  j d d |  j f  } x t | d  D] } | d } | d k r d } n# | r | d d	 k r | d	 7} n  t | d
  } t	 | d  } xE | r	| | j
   } t | j
    } | j | g   j |  q WqZ Wt |  _  | |  _ |  j S(   Nt   mdtypet	   filelistssr   SELECT pkgKey, dirname, filetypes, filenames FROM   filelist JOIN packages USING(pkgKey) WHERE  packages.pkgId = ?Re   t   dirnamet   .R   it   /t	   filetypest	   filenames(   RR   RS   RM   t   populateRP   Rr   RV   RE   t   decodefiletypelistt   decodefilenamelistt   popR!   t
   setdefaultt   appendR%   (	   R_   t   resultRA   RD   R   R   R   t   filenamet   filetype(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyRc   6  s,    		
		!		c         C   s   g  } |  j  s |  j |  j j k re y |  j j |  j d d Wqe t j k
 ra | |  _  d  SXn  |  j d d |  j f  } xe t	 | d  D]T } d | d d } t
 | d  } t
 | d	  } | j | t |  | f  q W| |  _  d  Sd  S(
   NR   t	   otherdatat   othersw   SELECT pkgKey, date, author, changelog FROM   changelog JOIN packages USING(pkgKey) WHERE  pkgId = ? ORDER BY date DESCRe   id   t   datet   authort	   changelog(   R]   RP   RM   t   otherdbR   R   R   Rr   RV   RE   R   R   R!   (   R_   R   RA   RD   t   c_datet   c_authort   c_log(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _loadChangelogS  s$    			 	c         C   s   |  j  |  j f S(   N(   Rf   RV   (   R_   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   returnIdSumr  s    c         C   s   |  j    |  j S(   N(   R   R]   (   R_   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   returnChangelogu  s    
t   filec         C   sa   | rD |  j  rD d } |  j d | |  j | f  } t d   |  S|  j   t j |  | |  S(   s}   return list of files based on type, you can pass primary_only=True
           to limit to those files in the primary repodatas=   SELECT name as fname FROM files WHERE pkgKey = ? and type = ?R   c         S   s   |  d S(   Nt   fname(    (   t   x(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyRd     s    (   RR   Rr   Re   t   mapRc   R   t   returnFileEntries(   R_   t   ftypet   primary_onlyRp   RA   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyR   y  s    
c         C   sX   | rA |  j  rA d } |  j d | |  j f  } t d   |  S|  j   t j |   S(   s   return list of types of files in the package, you can pass
           primary_only=True to limit to those files in the primary repodatas9   SELECT DISTINCT type as ftype FROM files WHERE pkgKey = ?R   c         S   s   |  d S(   NR   (    (   R   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyRd     s    (   RR   Rr   Re   R   Rc   R   t   returnFileTypes(   R_   R   Rp   RA   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyR     s    
c         C   sM   t  j d t j d d d } |  j d | |  j | f  } t d   |  S(   Ns_   simpleFiles() will go away in a future version of Yum.Use returnFileEntries(primary_only=True)
t
   stackleveli   s=   SELECT name as fname FROM files WHERE pkgKey = ? and type = ?R   c         S   s   |  d S(   NR   (    (   R   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyRd     s    (   t   warningst   warnR   t   YumDeprecationWarningRr   Re   R   (   R_   R   Rp   RA   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   simpleFiles  s
    	c         C   s  t  |  } | d k r! d } n  t |  j | t  r d | } |  j d | |  j f  } g  |  j | <x | D]z } | d s qp n  t  | d  t  | d  t  | d  t  | d  t  | d	  f f } |  j | j t  |   qp Wn  t j |  | |  S(
   Nt   strong_requiresRI   sD   SELECT name, version, release, epoch, flags FROM %s WHERE pkgKey = ?R   R[   t   flagsRU   RW   RY   (	   R!   t
   isinstanceRL   t   tupleRr   Re   R   R   t
   returnPrco(   R_   t   prcotypet	   printableRp   RA   RD   t   prco_set(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyR     s"    	
!c         C   s   d } |  j  d | |  j f  } g  } x | D] } d } | d j   d k rY d } n  t | d  t | d	  t | d
  t | d  t | d  f | f } | j |  q. W| S(   s%   returns requires with pre-require bitsN   SELECT name, version, release, epoch, flags,pre FROM requires WHERE pkgKey = ?R   RK   t   pret   truei   t   1R[   R   RU   RW   RY   (   R   i   (   Rr   Re   t   lowerR!   R   (   R_   Rp   RA   RI   RD   R   R   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _requires_with_pre  s    	N(   R   t
   __module__Ra   t   propertyt   filesR>   RT   R   Rr   R   Rc   R   R   R   R&   R   R   R   R   R   (    (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyRF      s   			9				t   YumSqlitePackageSackc           B   s  e  Z d  Z d   Z e d    Z d   Z d   Z d   Z d   Z	 e d    Z
 d   Z d	 d
  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e d  Z e d  Z d   Z d   Z d< d  Z d d  Z d< e d  Z  d   Z! e d    Z" e d    Z# d    Z$ e e d!   Z% e d"    Z& e d#    Z' e e d$   Z( e d%    Z) e d&    Z* e d'    Z+ e d(    Z, d< d= d)  Z- d< d> d*  Z. e g  e d+   Z/ e d,    Z0 d-   Z1 d.   Z2 d/   Z3 d0   Z4 e d1  Z5 e d< d< e d2   Z6 e d< d< e d3   Z7 e d4    Z8 d< d< e d5  Z9 d6   Z: e d< d< e d7   Z; d< d< e d8  Z< e d< e d9   Z= e d< d< d< d< d< d:   Z> e d;    Z? RS(?   s~    Implementation of a PackageSack that uses sqlite cache instead of fully
    expanded metadata objects to provide information c         C   s   t  j j |  |  i  |  _ i  |  _ i  |  _ i  |  _ t   |  _ t   |  _	 i  |  _
 i i  d 6i  d 6|  _ i  |  _ i  |  _ i  |  _ t   |  _ t   |  _ t   |  _ d  |  _ g  |  _ i  |  _ t |  _ d  S(   NRJ   RI   (   t   yumRepot   YumPackageSackRa   t	   primarydbt   filelistsdbR   t   excludesR2   t	   _excludest   _exclude_whitelistt   _all_excludest   _search_cachet   _key2pkgt   _pkgname2pkgkeyst   _pkgtup2pkgst   _pkgnames_loadedt   _pkgmatch_failst   _provmatch_failsR>   t   _arch_allowedt   _pkgExcludert   _pkgExcludeIdsR&   t   _pkgobjlist_dirty(   R_   t   packageClass(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyRa     s*    											c         G   s7   t  |  | d  | } | j   } t | | |  | S(   s6    Exec SQL against an MD of the repo, return a cursor. Rl   (   Rm   Rn   R   (   R_   Ro   RP   Rp   R   Rq   RA   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyRr     s    c         C   s#   d } |  j  d | |  j   d S(   s-    Give a count of pkgIds in the given repo DB s!   SELECT count(pkgId) FROM packagesR   i    (   Rr   R   (   R_   Ro   RP   Rp   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _sql_MD_pkg_num  s    c            sU   t    d  s t    j rN t   f d     j  } |   _ t   _ n    j S(   s{    If the pkgobjlist is dirty (possible pkgs on it which are excluded)
            then clean it, and return the clean list. t
   pkgobjlistc            s     j  |   S(   N(   t   _pkgExcluded(   R   (   R_   (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyRd     s    (   R   R1   R   t   filterR   R&   (   R_   t   pol(    (   R_   s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _clean_pkgobjlist  s    		c         C   s   t  } x6 |  j j   D]% \ } } | |  j k r t } Pq q W| rI d St |  d  rh t |  j    Sd } x( |  j D] } | t |  j |  7} qx Wd } x' |  j D] } | |  j	 d |  7} q W| | S(   Ni    R   R   (
   R%   R   t   itemsR   R&   R   t   lenR   R   R   (   R_   t   all_excludedRP   Rq   t   exclude_numt   pkg_num(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   __len__  s     c         C   s   t  |  d  r |  ` n  t  |  d  r0 |  ` n  t  |  d  rH |  ` n  t |  _ i  |  _ i  |  _ t   |  _	 t   |  _
 t   |  _ i  |  _ i i  d 6i  d 6|  _ t j   d  S(   Nt   _memoize_requirest   _memoize_providesR   RJ   RI   (   R   R   R   R   R&   R   R   R   R2   R   R   R   R   R   R   t   unshare_data(   R_   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   dropCachedData
  s"    							c         C   s   |  j    x; |  j j   |  j j   |  j j   D] } | j   q4 Wi  |  _ i  |  _ i  |  _ i  |  _ t   |  _ t   |  _	 i  |  _
 g  |  _ i  |  _ t |  _ t j j |   d  S(   N(   R   R   t   valuesR   R   t   closeR   R2   R   R   R   R   R   R&   R   R   R   (   R_   t   dataobj(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyR     s     
								c         C   s   d  S(   N(    (   R_   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   buildIndexes3  s    t   errorc         C   s   d  S(   N(    (   R_   t   failure(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _checkIndexes8  s    c            s   |  j  j | | f  | |  j k r |  j | j | d      d k	 r |  j   j } t   f d   |  } | |  j   j <q n  d S(   st    Exclude a package so that _pkgExcluded*() knows it's gone.
            Note that this doesn't update self.exclude. c            s   t  |   t     k S(   N(   RN   (   R   (   t   po(    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyRd   D  s    N(   R   t   addR   R   R>   R   R;   R   (   R_   RP   Re   t   pos(    (   R  s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _delPackageRK;  s    c         C   s   | j  |  j k r% i  |  j | j  <n  d |  j | j  | j <| j  | j f |  j k rv |  j j | j  | j f  n  |  j | j  | j  t |  _ d  S(   Ni   (	   RP   R   RV   Re   R   t   discardR	  R%   R   (   R_   t   obj(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt
   delPackageJ  s    c         C   se   t  |  j | <| |  j k r) |  j | =n  | |  j k rE |  j | =n  | |  j k ra |  j | =n  d S(   s%    Exclude all packages from the repo. N(   R%   R   R   R   R   (   R_   RP   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _delAllPackagesS  s    c         C   s=   | |  j  k r t S| |  j k r9 | |  j | k r9 t St S(   N(   R   R%   R   R&   (   R_   RP   RV   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt	   _excluded]  s
    "c         C   s8   |  j  r | |  j  k r t S|  j o7 | | f |  j k S(   N(   R   R%   R   (   R_   RP   Re   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _pkgKeyExcludedf  s    c         C   s  |  j  r" | | f |  j  k r" t S|  j | |  r8 t S|  j d k	 rj | |  j k rj |  j | |  t S|  j sw t Si | j   d 6| | | | | f d 6t d 6} | j   } | j   } | j   } | j   } x|  j D]\ }	 }
 } } |	 d k	 r|	 | j	 k rq n  |
 j
 d d  } t |  d k rTt s t d |
   q n  | \ } } t riq | d k rt | | | | | | | |  r|  j | |  t Sq | d	 k rt | | | | | | | |  rPqq | d
 k r+| d rqt | | | | | | | |  rt | d <qq | d k ru| d sDqt | | | | | | | |  rt | d <qq t s t d |
   q W|  j  j | | f  t S(   s   Main function to use for "can we use this package" question.
                . Tests repo against allowed repos.
                . Tests pkgKey against allowed packages.
                . Tests arch against allowed arches.
                . Tests addPackageExcluder() calls.
        R)   R;   R<   R   i   i   s   Bad excluder: t   excludet   includet   markt   washN(   R   R&   R  R%   R   R>   R	  R   R   RN   t   splitR   R1   R@   R  (   R_   RP   Re   R)   R   R4   R5   R6   R3   RO   R?   R'   R(   t   exSPLITt   exTt   exM(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _pkgExcludedRKNEVRAl  sX    	0 !!
!
!c   	      C   s4   | \ } } } } } |  j  | | | | | | |  S(   sb    Helper function to call _pkgExcludedRKNEVRA.
            Takes a repo, pkgKey and a package tuple(   R  (	   R_   RP   Re   R;   R)   R6   R   R4   R5   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _pkgExcludedRKT  s    c   	      C   sW   | d | d | d | d | d f \ } } } } } |  j  | | | | | | |  S(   si    Helper function to call _pkgExcludedRKNEVRA.
            Takes a repo, pkgKey and a dict of package dataR[   R\   RU   RW   RY   (   R  (	   R_   RP   Re   R3   R)   R6   R   R4   R5   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _pkgExcludedRKD  s    *c         C   s   |  j  | j | j | j  S(   sR    Helper function to call _pkgExcludedRKNEVRA.
            Takes a package object. (   R  RP   Re   R;   (   R_   R  (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyR     s    c         G   s  | d k	 r | |  j k r d Sd } d } t r4 nS| j d  rn t |  d k s[ t  | d j   } n| j d  r t |  d k s t  | d } n | j d  r	t |  d k s t  | d j   } t j |  rt	 j
 t j |   j } qn~ | j d  r3t |  d k st  nT | j d  r]t |  d k st  n* | j d	  rt |  d k st  n  |  j j | | | | f  | d k	 rt |  j  |  j | <n  t   |  _ t |  _ d S(
   s   Add an "excluder" for all packages in the repo/sack. Can basically
            do anything based on nevra, changes lots of exclude decisions from
            "preload package; test; delPackage" into "load excluder".
            Excluderid is used so the caller doesn't have to track
            "have I loaded the excluder for this repo.", it's probably only
            useful when repoid is None ... if it turns out utterly worthless
            then it's still not a huge wart. Ns   .eqi   i    s   .ins   .matchs   .*s   .markeds   .washed(   R>   R   R&   R   R   R1   R   R   t   re_globt   ret   compilet   fnmatcht	   translateR'   R   R   R2   R   R%   R   (   R_   RO   t
   excluderidR?   R   R'   R(   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   addPackageExcluder  s8     !c   	      C   s  | s t   | r( |  j | |  r( d S| |  j k rT i  |  j | <i  |  j | <n  | |  j | k rGd } |  j d | | | f  j   } | d k r d | | f } t j |  n  | r |  j	 | | |  r d S|  j
 | |  } | |  j | | <|  j j | j g   j |  |  j | j | d g   } | j |  n4 | r{|  j |  j | |  r{|  j | |  d S|  j | | S(   s:    Lookup a pkg by it's pkgKey, if we don't have it load it sX   SELECT pkgKey, pkgId, name, epoch, version, release, arch FROM packages WHERE pkgKey = ?R   s"   pkgKey %s doesn't exist in repo %sR[   N(   R1   R  R>   R   R   Rr   R   R   R   R  t   pcR   R   R;   R   R   R	  (	   R_   RP   Re   R  Rp   R3   t   msgR  t   pkgkeys(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _packageByKey  s.    ! c         C   s   | s t   | r+ |  j | | |  r+ d S| |  j k rW i  |  j | <i  |  j | <n  | d |  j j | i   k r |  j | |  } | |  j | | <|  j j | j	 g   j
 |  |  j | j | d g   } | j
 |  n  |  j | | d S(   s=    Like _packageByKey() but we already have the data for .pc() Re   R[   N(   R1   R  R>   R   R   R   R"  R   R   R;   R   (   R_   RP   Re   R3   R  R  R$  (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _packageByKeyData  s    c         C   s   |  j  | | |  r d S|  j j |  } | d k rT i  |  j | <i  |  j | <n | d | k rs | | d j S| d | d | d | d | d f S(   sb    Like _packageByKeyData() but we don't create the package, we just
            return the pkgtup. Re   R[   R\   RU   RW   RY   N(   R  R>   R   R   R   R;   (   R_   RP   Re   R3   t   prepo(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _pkgtupByKeyData  s    c         C   s   g  } x |  j  D]u } |  j j | i   j | g   } | sC q n  x? | D]7 } |  j | |  } | d k rt qJ n  | j |  qJ Wq W| S(   s2    Load all pkgnames from cache, with a given name. N(   R   R   R   R%  R>   R   (   R_   t   pkgnamet   retRP   R$  t   pkgkeyt   pkg(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _packagesByName#  s    !c         C   s   | |  j  k r) | |  j  | k r6 d  Sn g  |  j  | <| |  j k rU i  |  j | <n  | d  k rz t j d | | f  n  | d k r | |  j | <nN | d k r | |  j | <n2 | d k r | |  j | <n t j d | | f  |  j  | j |  d  S(   Ns   Tried to add None %s to %st   metadataR   R   s&   Sorry sqlite does not support %s in %s(	   t   addedR   R>   R   R   R   R   R   R   (   R_   RP   t   datatypeR  t   callback(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   addDict2  s     t   likec         C   s   |  j  | d  S(   NRJ   (   t
   searchPrco(   R_   R[   t
   query_type(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt	   searchAllO  s    c         C   s   | d k r g  } n  xe | D]] } | rD |  j | | d |  } n |  j | | d  } | d k rl q n  | j |  q W| S(   sB    Takes a cursor and maps the pkgKey rows into a list of packages. Re   N(   R>   R&  R%  R   (   R_   RP   RA   t   pkgst	   have_dataRD   R,  (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _sql_pkgKey2poS  s     	c         C   s7   t  } x* |  j D] } | |  j k r t } Pq q W| S(   s6    Are we going to skip every package in all our repos? (   R%   R/  R   R&   (   R_   t   skip_allRP   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt	   _skip_all`  s    c         C   s   d } t  j j |  } t j |  s0 d } n  g  } xh |  j j   D]W \ } } | |  j k rg qF n  | j   } t	 | d | | f  |  j
 | | |  qF Wt j |  S(   Nt   globt   =s1   select DISTINCT pkgKey from files where name %s ?(   t   ost   patht   normpathR   R  R   R   R   Rn   R   R9  t   unique(   R_   R[   t	   querytypet   resultst   repRq   RA   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _search_primary_filesi  s    	c         C   sh   xa |  j  j   D]P \ } } | |  j k r1 q n  | j   } t | d  x | D] } PqQ Wt Sq Wt S(   s    Return true if pkg.returnFileEntries(primary_only=True) is fast.
            basically does "CREATE INDEX pkgfiles ON files (pkgKey);" exist. s   PRAGMA index_info(pkgfiles)(   R   R   R   Rn   R   R&   R%   (   R_   RD  Rq   RA   RD   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _have_fastReturnFileEntriesz  s    c         C   s(   t  |  d  s! |  j   |  _ n  |  j S(   sb    Is calling pkg.returnFileEntries(primary_only=True) faster than
            using searchFiles(). t   _cached_fRFE(   R   RF  RG  (   R_   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   have_fastReturnFileEntries  s    c            s  |  j    r g  St } t   d } t j j |  } t j j |  } t j j |   | sn t j |  r t	 } t	   d } n t j   s t	   n  | d d k r | d  } n  g  } t j
 |  r |  j |  St |  j  d k r:xH |  j j   D]4 \ } } | |  j k r q n  |  j | d d q Wn  xk |  j D]` } t | d  r_qDn  |  j d	 |  }	 |  j d |  }
 |	 |
 k rt j  n  t | _ qDWg  } d
 } | st   \ } } d | } | j |  | j d | d  n   sBt   \ } } d | } | j |  | j d | d  n  d k rxu |  j j   D]d \ } } | |  j k rq^n  | j   } | j |  t | d | f |  |  j | | |  q^Wt j |  Sx |  j j   D] \ } } | |  j k rqn  | j   } t | d | | f | d | g  |  j | | |    rht j t j  |    n      f d   } | j! d d |  t | d | |  |  j | | |  qWt j |  } | S(   sY   search primary if file will be in there, if not, search filelists, use globs, if possibleR<  R=  iR   i    R   R   t   _checked_filelists_pkgsR   R   s(   dirname = ? and filenames LIKE ? %s and t   %s+   dirname GLOB ? and filenames LIKE ? %s and R#   sQ   SELECT pkgKey FROM filelist
                                   WHERE dirname %s ?s   select pkgKey from filelist where                     %s length(filetypes) = 1 and                     dirname || ? || filenames                     %s ?c            se   | j  d  }  s% t  | k  St   f d   |  } x! | D] }  j |  rD d SqD Wd S(   NR   c            s   d   |  f S(   Ns   %s/%s(    (   t   f(   t   sql_dirname(    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyRd     s    i   i    (   R  t   intR   R'   (   RL  t   sql_filenamesR   t   fnsR'   (   t	   file_globR   t   name_re(   RL  s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   filelist_globber  s    RR  i   s   select pkgKey from filelist where                              %s length(filetypes) > 1                              and filelist_globber(dirname,filenames)("   R;  R%   R>  R?  R@  R   t   basenameR   R  R&   t   re_primary_filenameRE  R   R   R   R   R   R   R   R   R   R   RI  R   R   Rn   R   R9  RA  R  R  R  R  t   create_function(   R_   R[   t   strictR<  RB  R   R7  RP   Rq   t   pri_pkgst   fil_pkgst
   sql_paramst   dirname_checkt   patternt   escRD  RA   RR  (    (   RP  R   RQ  s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   searchFiles  s    		


c   
      C   s   |  j    r g  Sg  } t |  d k  r, | S| j d d  } t |  \ } } d | d | | f } x( | d D] } d | | | | f } qr WxI |  j j   D]8 \ } } | j   }	 t |	 |  |  j | |	 |  q W| S(   s7   search arbitrary fields from the primarydb for a stringi   t   's   ''s>   select DISTINCT pkgKey from packages where %s like '%%%s%%'%s i    s   %s or %s like '%%%s%%'%s (	   R;  R   t   replaceR   R   R   Rn   R   R9  (
   R_   t   fieldst   searchstringR   R\  Rp   RK  RD  Rq   RA   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   searchPrimaryFields  s    c         C   s  |  j    r g  Sg  } | s$ | r( | St |  t j t |  k r i  } xK | D]C } |  j | |  } x( | D]  } | j | d  d | | <qs WqT Wx: t | d t j d t	 D] } | j
 | | | f  q W| Sd } d }	 g  }
 x | D]y } | j d d  } t |  \ } } d	 | d | | f } x( | d D] } d
 | | | | f } qAW|
 j
 |  q W| d j |
  |	 } x |  j j   D]u \ } } | j   } t | |  xM | D]E } |  j | | d  } | d k rqn  | j
 | | d f  qWqW| S(   s   search arbitrary fields from the primarydb for a multiple strings
           return packages, number of items it matched as a list of tuplesi    i   t   keyt   reverses*   select pkgKey, SUM(cumul) AS total from ( s$   )GROUP BY pkgKey ORDER BY total DESCR^  s   ''s@   select pkgKey,1 AS cumul from packages where %s like '%%%s%%'%s s   %s or %s like '%%%s%%'%s s    UNION ALL Re   t   totalN(   R;  R   t	   constantst   PATTERNS_MAXRb  R   t   sortedt   operatort
   itemgetterR%   R   R_  R   t   joinR   R   Rn   R   R%  R>   (   R_   R`  t   searchstringsR   t   totRa  t   matchesR  t   unionstringt   endunionstringt   selectst   sR\  Rp   RK  t   totalstringRD  Rq   RA   RD   R,  (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt"   searchPrimaryFieldsMultipleStrings)  sD    ""c      	   C   su  |  j    r i  S| r" t    n  i  } xF|  j j   D]5\ } } | j   } t | d  x| D]} t | d  t | d  t | d  t | d  t | d  f } |  j | | d |  r qd n  t | d  t | d	  t | d
  t | d  t | d  f \ } }	 }
 } } t |  } t | |	 |
 | | f f  } | j | g   j	 |  qd Wq8 W| S(   Ns  select packages.name as name,                packages.pkgKey as pkgKey,                packages.arch as arch, packages.epoch as epoch,                packages.release as release, packages.version as version,                obsoletes.name as oname, obsoletes.epoch as oepoch,                obsoletes.release as orelease, obsoletes.version as oversion,                obsoletes.flags as oflags                from obsoletes,packages where obsoletes.pkgKey = packages.pkgKeyR[   R\   RU   RW   RY   Re   t   onamet   oflagst   oepocht   oversiont   orelease(
   R;  t   NotImplementedErrorR   R   Rn   R   R!   R  R   R   (   R_   t   newestRG   RD  Rq   RA   RD   Rc  R)   RK  R   R4   R5   t   val(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   returnObsoletes]  s0    "!c         C   sU   xN |  j  j   D]= \ } } | j   } t | d | f  x | D] } | SWq Wd  S(   Ns&   select * from packages where pkgId = ?(   R   R   Rn   R   (   R_   RV   RD  Rq   RA   RD   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   getPackageDetails  s
    c         C   s   g  } t  |  d k r | St t |   } x[ |  j j   D]J \ } } | j   } t | d | f  x | D] } | j |  qq Wq> W| S(   Ni    s(   select * from packages where pkgId in %s(   R   R   R   R   R   Rn   R   R   (   R_   t
   pkgId_listR7  t   pkgid_queryRD  Rq   RA   RD   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _getListofPackageDetails  s    c   
   	   C   s?  t  |  d |  s.i  } x |  j j   D] \ } } | |  j k rJ q) n  | j   } t | d |  x | D] } t | d  t | d  t | d  t | d  t | d  f f } t |  } | | d f } t | d	  }	 |	 | f } | j | g   j |  qn Wq) Wt	 |  d | |  n  t
 |  d |  S(
   Nt	   _memoize_s   select * from %sR[   R   RU   RW   RY   i    Re   (   R   R   R   R   Rn   R   R!   R   R   Ri   Rm   (
   R_   R   t   memoizeRD  Rq   RA   R   R|  Rc  R+  (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _search_get_memoize  s$    !c      	   C   s  |  j    r i  St |  } | d k r1 d  } n  t |  t t d   t f k rp | | t j j |  f } n* t |  t	 t
 f k r | | | f } n  t |  } t |  } | |  j | k r |  j | | Si  } t r |  j j   } t } ng  } t } |  j |  }	 x |  j j   D] \ }
 } |
 |  j k rDq#n  i  } x] |	 j |
 | f g   D]C } | \ } } t j j | |  rc| j | g   j |  qcqcWxH | j   D]: \ } } |  j |
 |  } | d  k rqn  | | | <qWq#Wx9| D]1\ }
 } |
 |  j k r!q n  | j   } t | d | | f  i  } x | D] } t | d  t | d  t | d  t | d  t | d  f f } t |  } t j j | |  rQ| j | d g   j |  qQqQWxH | j   D]: \ } } |  j |
 |  } | d  k r#qn  | | | <qWq W| d	 k sQ| d d
 k ro| sk| |  j | | <n  | St j |  sx3 |  j | d t D] } | d  d  f g | | <qW| s| |  j | | <n  | Sx> |  j |  D]- } | d  d  f g | | <| |  j | | <qW| S(   Ni    s   select * from %s where name=?R[   R   RU   RW   RY   Re   RJ   R   RV  (   R;  R	   R>   t   typeR   t   unicodet   rpmUtilst	   miscutilst   stringToVersionR   t   listR!   R   R%   R   R   R&   R  R   R   t   rangeCompareR   R   t	   iteritemsR%  Rn   R   R   RT  R]  RE  (   R_   R   R[   R   RW   t   reqR   t   primarydb_itemst   preloadR  RD  Rq   t   tmpR   R+  R|  Re   t   hitsR,  RA   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _search  s    	!	 
$c         C   s   |  j  d | | |  S(   NRJ   (   R  (   R_   R[   R   RW   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   getProvides  s    c         C   s   |  j  d | | |  S(   NRI   (   R  (   R_   R[   R   RW   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   getRequires  s    c         C   s0  |  j    r g  St |  d  } g  } t |  } g  } x^ | D]V } | |  j k rY q> n  | sn | |  j k r | j |  j |   q> | j |  q> W| r g  | D] } | j ^ q } n  | s | St	 j
 } t |  | k rx0 t | |  D] } | j |  j | |   q W| Sg  }	 d }
 x | D] } |	 j d  q,W|
 d j |	  }
 x |  j j   D] \ } } | j   } t | |
 |  | rxF | D]> } |  j | | d |  } | d k rqn  | j |  qWqfn  |  j | | | d t qfW| s,|  j j g  | D] } | ^ q n  | S(   sy   return a list of packages matching any of the given names. This is 
           only a match on package name, nothing elseR   s^   select pkgId,pkgKey,name,epoch,version,release,arch
                      from packages where s   name = ?s    OR Re   R8  N(   R;  R   R2   R   R   t   extendR-  R   R;   Rf  t   PATTERNS_INDEXED_MAXR   R   t   searchNamesRk  R   R   Rn   R   R(  R>   R9  R%   R   (   R_   t   namest   return_pkgtupst   loaded_all_namest
   returnListt
   user_namesR)  R,  t   max_entriest   pat_sqlst   qsqlR[   RP   Rq   RA   RD   R;   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyR    sP    	&c      	   C   s  |  j    r g  Sy% t j |  \ } } \ } } } Wn( t j k
 r_ } t j t |   n X| } t |  }	 |	 } t }
 d } t j |  s t	 }
 d } n  g  } g  } xY |  j
 j   D]H \ } } | j   } t | d | | f | f  |  j | | |  q Wx | D]~ } t j |  rE| d k rE| j |  qn  |
 s| j | | | | | | f f  r| j |  qq| j |  qW| d k r| St j |  s| S| j |  j |   t j |  r|
 rt j |  S| j |  j |   t j |  S(   s3   return list of packages matching name and prcotype R<  R=  s.   select DISTINCT pkgKey from %s where name %s ?RJ   N(   R;  R   t   string_to_prco_tupleR   t	   MiscErrort   PackageSackErrorR	   R%   R  R&   R   R   Rn   R   R9  t   re_filenameR>   R   t	   checkPrcoR  RE  RT  RA  R]  (   R_   R[   R   R)   RK  R   R4   R5   t   n_bt   n_uR<  RB  t   basic_resultsRC  RD  Rq   RA   R  (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyR4  N  sJ    %	$c         C   sB   | |  j  k r g  S|  j | d  } | s> |  j  j |  n  | S(   s9   return list of packages providing name (any evr and flag)RJ   (   R   R4  R  (   R_   R[   R*  (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   searchProvides  s    c         C   s   |  j  | d  S(   s9   return list of packages requiring name (any evr and flag)RI   (   R4  (   R_   R[   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   searchRequires  s    c         C   s   |  j  | d  S(   s:   return list of packages obsoleting name (any evr and flag)RG   (   R4  (   R_   R[   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   searchObsoletes  s    c         C   s   |  j  | d  S(   s@   return list of packages conflicting with name (any evr and flag)RH   (   R4  (   R_   R[   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   searchConflicts  s    c         C   s  d GHd d1 d     Y} |   } | d | d | d | d | d f | _  |  | _ | d	 | _ | rm | Si | d
 d 6| d d 6| _ i | d d 6d d 6| d d 6| _ i d d 6| d d 6| d	 d 6| _ i | d d 6| d d 6| _ i | d d 6| d d 6| d  d! 6| _ i	 | d" d" 6| d# d# 6| d$ d% 6| d& d' 6| d( d) 6| d* d+ 6| d, d, 6| d- d. 6| d/ d0 6| _ | S(2   Ns   die die die die die db2classt	   tmpObjectc           B   s   e  Z RS(    (   R   R   (    (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyR    s   R[   RU   RW   RY   R\   RV   R{   t   startR}   t   endR   t   hrefR   R    R   t   baset   YESt   pkgidRf   R  Ry   t   buildR   R   Rs   t   packageRu   t   archiveRw   t	   installedR   R   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (	   R0   RM   RV   t   hdranget   locationt   checksumt   timet   sizet   info(   R_   Rl   t
   nevra_onlyR  t   y(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   db2class  s&    	,	&*'c         C   s   | s t  j j |  | | |  Sg  } xR |  j j   D]A \ } } | j   } t | d |  |  j | | | d t q5 W| s t	 j
 d |  n  t j |  S(   NsY   select pkgId,pkgKey,name,epoch,version,release,arch from packages where name=? and arch=?R8  s   No Package Matching %s.%s(   R   R   t   returnNewestByNameArchR   R   Rn   R   R9  R%   R   R  R   t   newestInList(   R_   t   naTupt   patternst   ignore_caset   allpkgRD  Rq   RA   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyR    s    c         C   s   |  j    r g  S| s/ t j j |  | | |  Sg  } xU |  j j   D]D \ } } | j   } t | d | f  |  j | | | d t	 qE W| s t
 j d |  n  t j |  S(   sB  return list of newest packages based on name matching
           this means(in name.arch form): foo.i386 and foo.noarch will
           be compared to each other for highest version.
           Note that given: foo-1.i386; foo-2.i386 and foo-3.x86_64
           The last _two_ pkgs will be returned, not just one of them. sN   select pkgId,pkgKey,name,epoch,version,release,arch from packages where name=?R8  s   No Package Matching %s(   R;  R   R   t   returnNewestByNameR   R   Rn   R   R9  R%   R   R  R   R  (   R_   R[   R  R  R  RD  Rq   RA   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyR    s    	c         C   s>  |  j    r g  g  g  f Sg  } g  } t |  } x | D] } t j |  rn t i d d 6| d 6} | } n t i d d 6| d 6} | } xq |  j j   D]` \ } }	 |	 j   }
 t |
 |  |  j	 | |
  } t
 |  r | j |  n  | j |  q Wq8 Wt j |  } t j |  } t j |  } | | | f S(   NR<  t   opt   qR=  (   R;  R  R   R  t   PARSE_QUERYR   R   Rn   R   R9  R   t   removeR  RA  (   R_   t   pkgspecst   matchedt
   exactmatcht	   unmatchedt   pt   queryt   matchresRD  Rl   RA   t   pmatches(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   matchPackageNames  s,    	c   
      C   s^  | d
 k r g  } n  d d d d d d d g } t } x< | D]4 } t j |  r= | sg | |  j k r= t } Pq= q= Wt j } | s d g } t j } n  t	 |  | k r g  } n  | r t
 |  } n g  } t }	 xL | D]D } t j |  r| j | d f  t }	 q | j | d	 f  q W| rH|	 rH| rH| | | t f S| } | | | t f S(   sz   Setup need_full and patterns for _yieldSQLDataList, also see if
           we can get away with just using searchNames(). R[   t   sql_nameArcht   sql_nameVerRelArcht   sql_nameVert   sql_nameVerRelt	   sql_envrat	   sql_nevraR<  R=  N(   R>   R&   R   t   re_full_search_neededR   R%   Rf  Rg  R  R   R   R  R   (
   R_   RO   R  R  R`  t	   need_fullt   patt   pat_maxR  t	   need_glob(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _setupPkgObjList  s<    						c         c   sA  g  } g  } x | D]} \ } } | r; | |  j  k r; q n  xR | D]J }	 | rh | j d |	 | f  n | j d |	 | f  | j |  qB Wq W| r | r d S| r t d j |  }
 n d }
 xs |  j j   D]b \ } } | d k s | | j k r | j   } t	 | |
 |  x | D] } | | f Vq!Wq q Wd S(   s^   Yields all the package data for the given params. Excludes are done
           at this stage. s   %s LIKE ?%ss   %s %s ?Ns    OR sY   select pkgId, pkgKey, name,epoch,version,release,arch
                      from packages(
   R   R   t   _FULL_PARSE_QUERY_BEGRk  R   R   R>   RN   Rn   R   (   R_   RO   R  R`  R  R  t   pat_dataR[  t   restRB   R  RP   Rq   RA   R   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _yieldSQLDataList7  s*    c         C   s  g  } |  j  | | |  } | \ } } } } | r@ |  j |  Sx^ |  j | | | |  D]D \ }	 }
 |  j |	 |
 d |
  } | d k r qY n  | j |  qY W| r | d k r | |  _ t   |  _ n  | r| d k r|  j j	 g  | D] } | j
 ^ q  n  | rqx` | D]U \ } } | d k r3qn  x4 | D], } | j
 | k r:|  j j | j
  Pq:q:WqWn  | sx' | D] \ } } |  j j |  q~Wn  | S(   sj   Builds a list of packages, only containing nevra information.
           Excludes are done at this stage. Re   R=  R   N(   R=  R   (   R  R  R  R&  R>   R   R   R2   R   R   R[   R  R   (   R_   RO   R  R  R  R3   R  R`  R  RP   R   R  R  R  R,  (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   _buildPkgObjListW  s8    	)c         C   s   |  j    r g  St |  d  } | r4 |  j   } n$ |  j | | |  } t |  d  } | r | r t } t | | | d d } | d | d } n  | d k r | r | } n  | Sg  } x0 | D]( } | | j k r q n  | j |  q W| S(   s   Returns a list of packages, only containing nevra information. The
           packages are processed for excludes. Note that the packages are
           always filtered to those matching the patterns/case. R   RA  s   repo-pkgkeyi    i   N(	   R;  R   R   R  R&   R   R>   RO   R   (   R_   RO   R  R  t   internal_pkgoblistR   R  R  (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   returnPackages~  s,    	
c         C   s   |  j    r g  St |  d  } | r; t j j |  | |  Sd } g  } |  j | | |  } | \ } } } }	 |	 r g  |  j |  D] }
 |
 j ^ q Sx^ |  j	 | | | |  D]D \ } } |  j
 | | d |  } | d k r q n  | j |  q W| S(   s   Returns a list of pkg tuples (n, a, e, v, r), optionally from a
           single repoid. Note that the packages are always filtered to those
           matching the patterns/case. R   Re   N(   R;  R   R   R   t   simplePkgListR>   R  R  R;   R  R(  R   (   R_   R  R  R  RO   R  R3   R  R`  R  R,  RP   R   R;   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyR    s&    #c         C   s  |  j    r g  Sg  } | r x |  j d | g  D] } t } x] d | f d | f d | f d | f g D]1 \ }	 }
 |
 ri t | |	  |
 k ri t } Pqi qi W| r2 | j |  q2 q2 W| St } x, | | | | | f D] } | r t } q q W| r | Sd } x d | f d | f d | f d | f d | f g D]P \ }	 }
 |
 r5| d d	 k rn| d
 |	 |
 f } q| d |	 |
 f } q5q5WxO |  j j   D]> \ } } | j   } t	 | |  |  j
 | | | d t qW| S(   s6   return list of pkgobjects matching the nevra requestedR  RU   RW   R\   RY   sG   select pkgId,pkgKey,name,epoch,version,release,arch from packages WHERER[   it   WHEREs    AND %s = "%s"s
    %s = "%s"R8  (   R;  R  R%   Rm   R&   R   R   R   Rn   R   R9  (   R_   R[   RU   RX   RZ   R\   R  R,  R'   t   colt   vart   emptyt   argR  RD  Rq   RA   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   searchNevra  s@    ""c   	      C   s  |  j  d k r! t |  |  _  n |  j  j |  |  _  t d   |  } d j |  } x |  j j   D] \ } } | j   } | j	 j
 d  sg d |  j  k r qg n  t } t | d  x( | D]  } | d | k r t } Pq q W| sg |  j |  d Sqg Wd S(   sB   excludes incompatible arches - archlist is a list of compat archesc         S   s   d |  S(   Ns   '%s'(    (   R   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyRd     s    t   ,s   -sourcet   srcs"   SELECT DISTINCT arch FROM packagesi    N(   R   R>   R2   t   intersectionR   Rk  R   R   Rn   RN   R   R&   R   R%   R  (	   R_   t   archlistt	   sarchlistt
   arch_queryRD  Rq   RA   t   has_archt   row(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   excludeArchs  s$    "N(   NNN(   NNN(@   R   R   R   Ra   R   Rr   R   R   R   R   R   R  R  R	  R  R  R  R  R  R  R  R   R!  R%   R%  R&  R(  R-  R>   R2  R6  R&   R9  R;  RE  RF  RH  R]  Rb  Rt  R}  R~  R  R  R  R  R  R  R4  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  (    (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyR     s   											
				A				)					}4%[;A					(	 &#,c         C   s   d j  |   S(   NR   (   Rk  (   t   filenamelist(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   encodefilenamelist  s    c         C   s   |  j  d d  }  |  j d  S(   Ns   //R   (   R_  R  (   t   filenamestring(    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyR     s    c         C   sD   d } i d d 6d d 6d d 6} x |  D] } | | | 7} q( W| S(   NR   RK  R   t   dt   dirt   gt   ghost(    (   t   filetypelistR   t	   ft2stringR   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   encodefiletypelist  s
    c         C   s6   i d d 6d d 6d d 6} g  |  D] } | | ^ q" S(   NR   RK  R  R  R  R  (    (   t   filetypestringt	   string2ftR   (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyR      s    s  
select pkgKey from packages
where name %(op)s '%(q)s'
   or name || '.' || arch %(op)s '%(q)s'
   or name || '-' || version %(op)s '%(q)s'
   or name || '-' || version || '-' || release %(op)s '%(q)s'
   or name || '-' || version || '-' || release || '.' || arch %(op)s '%(q)s'
   or epoch || ':' || name || '-' || version || '-' || release || '.' || arch %(op)s '%(q)s'
   or name || '-' || epoch || ':' || version || '-' || release || '.' || arch %(op)s '%(q)s'
s  
SELECT pkgId,pkgKey,name,epoch,version,release,arch,
  name || "." || arch AS sql_nameArch,
  name || "-" || version || "-" || release || "." || arch AS sql_nameVerRelArch,
  name || "-" || version AS sql_nameVer,
  name || "-" || version || "-" || release AS sql_nameVerRel,
  epoch || ":" || name || "-" || version || "-" || release || "." || arch AS sql_envra,
  name || "-" || epoch || ":" || version || "-" || release || "." || arch AS sql_nevra
  FROM packages
  WHERE
(*   R>  t   os.pathR  R   t   packagesR    R   R   R   R   R   R   R   R   R   t   rpmUtils.miscutilsR  Rf  Ri  t   yum.miscR   t   yum.i18nR   R	   R   R  R   R   R!   R*   R8   R@   RE   RF   R   R   R  R   R   R   R  R  (    (    (    s2   /usr/lib/python2.7/site-packages/yum/sqlitesack.pyt   <module>   sF   "					C	     T					