
N_c           @   s  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 d  d l	 m
 Z
 d  d l Z d  d l Z d  d l m Z m Z d  d l m Z m Z d  d l Z d  d l Z d  d l m Z m Z d  d l Z d  d l Z d   Z d	   Z d
   Z d e f d     YZ d f  d     YZ 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% d e& f d     YZ' d   Z( d e& f d     YZ) d   Z* e+ d  k re*   n  d S(!   iN(   t	   miscutils(   t   arch(   t   initReadOnlyTransaction(   t   YumInstalledPackaget   parsePackages(   t   PackageSackBaset   PackageSackVersion(   t
   to_unicodet   _c          G   s4   t  j d  } z t |    } Wd t  j |  X| S(   sk    Annoying people like to set umask's for root, which screws everything
        up for user readable stuff. i   N(   t   ost   umaskt   open(   t   argst   oumaskt   ret(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _open_no_umask(   s
    c          G   s7   t  j d  } z t  j |    } Wd t  j |  X| S(   sk    Annoying people like to set umask's for root, which screws everything
        up for user readable stuff. i   N(   R	   R
   t   makedirs(   R   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _makedirs_no_umask3   s
    c          G   s7   y t  |    } Wn t k
 r, } d | f SX| d f S(   s1    IOError wrapper BS for open, stupid exceptions. N(   R   t   IOErrort   None(   R   R   t   e(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _iopen>   s
    t   RPMInstalledPackagec           B   s5   e  Z d    Z d   Z d   Z d   Z d   Z RS(   c         C   sG   t  |  _ t j |  | d | j | |  _ | |  _ t |  _ |  ` d  S(   Nt   yumdb(	   t   Truet   _has_hdrR   t   __init__R   t   idxt   rpmdbt   Falset   hdr(   t   selft   rpmhdrt   indexR   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR   I   s    				c         C   sf   |  j  r |  j S|  j j   } | j d |  j  } y | j   SWn t k
 ra t j	 d  n Xd  S(   Ni    s   Rpmdb changed underneath us(
   R   R   R   t
   readOnlyTSt   dbMatchR   t   nextt   StopIterationt   Errorst   PackageSackError(   R   t   tst   mi(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _get_hdrS   s    	c         C   sy   | j  d  r% t d |  | f  n  | d k r@ |  j   } n |  j   |  _ } t |  _ | d k ru | | } n  | S(   NR   s   %s has no attribute %sR   (   t
   startswitht   AttributeErrorR*   R   R   R   (   R   t   varnamet   val(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   __getattr___   s    	c         C   s   t    } xY |  j D]N \ } } } x< |  j j | | |  D]" } | |  k r; | j |  q; q; Wq WxW |  j |  j D]E } x< |  j j | d d  D]" } | |  k r | j |  q q Wqv Wt |  S(   s4   return list of installed pkgs requiring this packageN(   NNN(	   t   sett   providesR   t   getRequirest   addt   filelistt   dirlistR   t   list(   R   t   pkgsett   reqnt   reqft   reqevrt   pkgt   fn(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   requiring_packagess   s    	c         C   so   t    } xY |  j D]N \ } } } x< |  j j | | |  D]" } | |  k r; | j |  q; q; Wq Wt |  S(   N(   R0   t   strong_requiresR   t   getProvidesR3   R6   (   R   R7   R8   R9   R:   R;   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   required_packages   s    	(   t   __name__t
   __module__R   R*   R/   R=   R@   (    (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR   G   s
   	
			t   RPMDBProblemc           B   s    e  Z d  Z d   Z d   Z RS(   sJ   
    Represents a problem in the rpmdb, from the check_*() functions.
    c         K   s;   | |  _  | |  _ x" | D] } t |  | | |  q Wd  S(   N(   R;   t   problemt   setattr(   R   R;   RD   t   kwargst   kwarg(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR      s    		c         C   s8   | d  k r d St |  j | j  p7 t |  j | j  S(   Ni   (   R   t   cmpR;   RD   (   R   t   other(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   __cmp__   s    (   RA   RB   t   __doc__R   RJ   (    (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyRC      s   	t   RPMDBProblemDependencyc           B   s   e  Z d    Z RS(   c         C   sa   |  j  d k r, d |  j t d  |  j f Sd |  j t d  |  j d j t t |  j   f S(   Nt   requiress   %s %s %ss   has missing requires ofs   %s %s %s: %ss   has installed conflictss   , (	   RD   R;   R   t   missingt   foundt   joint   mapt   strt	   conflicts(   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   __str__   s
    (   RA   RB   RT   (    (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyRL      s   t   RPMDBProblemDuplicatec           B   s   e  Z d    Z d   Z RS(   c         K   s   t  j |  | d |  d  S(   Nt	   duplicate(   RC   R   (   R   R;   RF   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR      s    c         C   s   t  d  |  j |  j f S(   Ns   %s is a duplicate with %s(   R   R;   RV   (   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyRT      s    (   RA   RB   R   RT   (    (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyRU      s   	t   RPMDBProblemObsoletedc           B   s   e  Z d    Z d   Z RS(   c         K   s   t  j |  | d |  d  S(   Nt	   obsoleted(   RC   R   (   R   R;   RF   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR      s    c         C   s   t  d  |  j |  j f S(   Ns   %s is obsoleted by %s(   R   R;   t	   obsoleter(   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyRT      s    (   RA   RB   R   RT   (    (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyRW      s   	t   RPMDBProblemProvidesc           B   s   e  Z d    Z d   Z RS(   c         K   s   t  j |  | d |  d  S(   NR1   (   RC   R   (   R   R;   RF   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR      s    c         C   s   t  d  |  j |  j f S(   Ns%   %s provides %s but it cannot be found(   R   R;   t   provide(   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyRT      s    (   RA   RB   R   RT   (    (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyRZ      s   	t   RPMDBPackageSackc           B   s  e  Z d  Z i e j e j e j f d 6e j e j e j	 f d 6e j
 e j e j f d 6e j e j e j f d 6Z e Z d dW dW d d  Z d   Z e e dW  Z d	   Z d
   Z d   Z d   Z d   Z d d  Z d   Z d d  Z d   Z  d   Z! d   Z" d   Z# d   Z$ d   Z% d   Z& e' j( Z) dW dW d  Z* dW d  Z+ e, e- d   Z. e, d    Z/ dW dW e- d  Z0 d   Z1 d    Z2 d!   Z3 d"   Z4 d#   Z5 d$   Z6 d%   Z7 d&   Z8 d'   Z9 d(   Z: d)   Z; d*   Z< d+   Z= d,   Z> d-   Z? d.   Z@ d/   ZA d0   ZB d1   ZC d2   ZD d3   ZE e d4  ZF d5   ZG d6   ZH d7   ZI d8   ZJ e- i  d9  ZK e, d:    ZL e- d;  ZM g  d<  ZN dW dW dW dW dW d=  ZO d>   ZP dW d?  ZQ d@   ZR dW dW dW dW dW dA  ZS dB   ZT dC   ZU dD   ZV dE   ZW dF   ZX dG   ZY dW dW dW dW dW dH  ZZ dI   Z[ dJ   Z\ dK   Z] e, dL    Z^ dW dX dM  Z_ dN   Z` dW dY dO  Za dP   Zb dQ   Zc dW dR  Zd dS   Ze g  dT  Zf dU   Zg dV   Zh RS(Z   s*   
    Represent rpmdb as a packagesack
    RM   R1   RS   t	   obsoletest   /s   /var/lib/yumc         C   s  | |  _  i  |  _ i  |  _ t   |  _ i  |  _ t |  _ t   |  _ t   |  _	 t   |  _
 g  |  _ i  |  _ i  |  _ t |  _ | d  k r | d } n  |  j |  t j j |  j |  j   s | d | |  _ n	 | |  _ t t d  rt j d  } n d } t j j | d |  |  _ d  |  _ d  |  _ i  |  _ d  |  _ | |  _ t |  _ d  |  _  i i  d 6i  d 6i  d 6i  d	 6|  _! t j j |  j d
  } t j j | d  } t" d | d |  |  _# d  S(   Ns   /rpmdb-indexesR^   t   expandMacros   %_dbpaths   /var/lib/rpmR1   RM   RS   R]   s   /yumdbs   /versiont   db_patht   version_path($   t   roott   _idx2pkgt	   _name2pkgR0   t   _pkgnames_loadedt   _tup2pkgR   t   _completely_loadedt   _pkgname_failst   _pkgmatch_failst   _provmatch_failst   _simple_pkgtup_listt   _get_pro_cachet   _get_req_cachet   _loaded_gpg_keysR   t   setCacheDirR	   t   patht   normpathR+   t   _persistdirt   hasattrt   rpmR_   t
   _rpmdbpatht   _have_cached_rpmdbv_datat   _cached_conflicts_datat   _trans_cache_storeR(   t
   releasevert
   auto_closet   _cached_rpmdb_mtimet   _cachet   RPMDBAdditionalDataR   (   R   Rb   Ry   t   cachedirt
   persistdirt   dbpatht   addldb_pathRa   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR      sN    																	c         C   s   |  j  s< |  j d t  } | d k	 r< | j   |  _  q< n  |  j  s~ x6 |  j   D]% \ } } |  j  j |  j |   qR Wn  |  j  S(   sT   Getter for the pkglist property. 
        Returns a list of package tuples.
        t   load_packagesN(   Rk   t   preloadPackageChecksumsR   R   t   keyst   _get_packagest   appendt   _hdr2pkgTuple(   R   t   csumpkgtupsR   R)   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _get_pkglist  s    		 c         C   s   i  |  _  i  |  _ t   |  _ i  |  _ t |  _ t   |  _ t   |  _ t   |  _	 g  |  _
 i  |  _ i  |  _ t d k	 r t j   n  i i  d 6i  d 6i  d 6i  d 6|  _ d |  _ d |  _ |  j   d |  _ d S(   s    Drop all cached data, this is a big perf. hit if we need to load
            the data back in again. Also note that if we ever call this while
            a transaction is ongoing we'll have multiple copies of packages
            which is _bad_. R1   RM   RS   R]   N(   Rc   Rd   R0   Re   Rf   R   Rg   Ri   Rh   Rj   Rk   Rl   Rm   t   miscR   t   unshare_dataR|   Rv   Rw   t   transactionResetR{   (   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   dropCachedData  s,    									
c         C   s  t  |  _ t   |  _ t   |  _ g  |  _ i  |  _ i  |  _ t d k	 rU t j
   n  i i  d 6i  d 6i  d 6i  d 6|  _ d |  _ d |  _ |  j   |  j d } t j j |  |  _ d   } g  } x | D] } |  j j | j  | |  j | j  | j t j k rq|  j j | j  | j |  | j rq|  j | j } | |  j  | j!  | |  j | j  qqn  | j t j" k r | |  j  | j# j!  | |  j | j  q q Wx | D] } | j \ } } }	 }
 } |  j$ | |	 |
 | |  } | s|  j% d |  qn  | d } | j# j&   } | d k r;qn  t' | d  t' | d	  } } d
 | j( j) k sd | j( j) k rqn  | | j( j) d
 <| | j( j) d <qWd S(   s    Drop cached data that is assocciated with the given transaction,
            this tries to keep as much data as possible and even does a
            "preload" on the checksums. This should be called once, when a
            transaction is complete. R1   RM   RS   R]   s	   /Packagesc         S   s   | |  k r |  | =n  d S(   sZ    Make sure we never traceback here, because it screws our yumdb
                if we do. N(    (   t   xt   y(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt	   _safe_del[  s    s   dCDPT(pkg checksums): %si    i   t   checksum_typet   checksum_dataN(*   R   Rg   R0   Ri   Rj   Rk   Rl   Rm   R   R   R   R|   Rv   Rw   R   Ru   R	   Rp   t   getmtimeR{   Re   t   discardt   nameRd   t   output_statet	   constantst   TS_INSTALL_STATESRh   R   t	   reinstallRf   t   pkgtupRc   R   t   TS_REMOVE_STATESt   pot   searchNevrat   _deal_with_bad_rpmdbcachet   returnIdSumRR   t
   yumdb_infot   _read_cached_data(   R   t   txmbrst
   rpmdbfnameR   t   precachet   txmbrt   ipot   nt   aR   t   vt   rR;   t   csumt   Tt   D(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   dropCachedDataPostTransaction8  sd    							
			
!c         C   s   t  j j |  j |  j  s5 |  j d | |  _ n d | |  _ t |  d  r| t  j j |  j d  } | |  j j _	 n  d S(   s    Sets the internal cachedir value for the rpmdb, to be the
            "rpmdb-indexes" directory in the persisent yum storage. R^   R   s   /versionN(
   R	   Rp   Rq   R+   Rb   t	   _cachedirRs   R   t   confRa   (   R   R~   Ra   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyRo     s    c         C   sL   |  j  s! t d |  j  |  _  n  |  j  j sE t d |  j  |  _  n  |  j  S(   NRb   (   R(   R   Rb   R   (   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR"     s
    	c         C   s   d  S(   N(    (   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   buildIndexes  s    t   errorc         C   s   d  S(   N(    (   R   t   failure(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _checkIndexes  s    c         C   s   d  S(   N(    (   R   t   obj(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt
   delPackage  s    t   likec   
      C   s   i  } |  j  d d } |  j d | t j | f g  } x9 | D]1 \ } } |  j | |  } | j | j |  q? W|  j |  }	 x! |	 D] } | j | j |  q W| j   S(   NR1   i    t   patterns(	   t	   DEP_TABLER   Rt   t   RPMMIRE_GLOBt   _makePackageObjectt
   setdefaultt   pkgidt   searchFilest   values(
   R   R   t
   query_typet   resultt   tagR)   R   R   R;   t   fileresults(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt	   searchAll  s    !c         C   sj   i  } t  j j |  } xE |  j d |  D]1 \ } } |  j | |  } | j | j |  q+ W| j   S(   s;   search the filelists in the rpms for anything matching namet	   basenames(   R	   Rp   Rq   R   R   R   R   R   (   R   R   R   R   R   R;   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR     s    c         C   sq  |  j  | j |  } | d  k	 r& | St j |  \ } } \ } } } t }	 t j |  re t }	 n  i  } |  j | d }
 x |  j	 |
 t j
 |   D]h \ } } |  j | |  } |	 s | j | | | | | | f f  r | | | j <q q | | | j <q W| d k rP| d d k rP|  j |  } x | D] } | | | j <q6Wn  | j   } | |  j  | | <| S(   Ni    R1   R^   (   R|   t   getR   R   t   string_to_prco_tupleR   t   re_globR   R   R   t   to_utf8R   t	   checkPrcoR   R   R   (   R   R   t   prcotypeR   R   t   fR   R   R   t   globR   R   R   R   R   R;   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt
   searchPrco  s,    !	($c         C   sB   | |  j  k r g  S|  j | d  } | s> |  j  j |  n  | S(   NR1   (   Rj   R   R3   (   R   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   searchProvides  s    c         C   s   |  j  | d  S(   NRM   (   R   (   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   searchRequires  s    c         C   s   |  j  | d  S(   NR]   (   R   (   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   searchObsoletes  s    c         C   s   |  j  | d  S(   NRS   (   R   (   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   searchConflicts  s    c         C   s   |  j  S(   N(   t   pkglist(   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   simplePkgList  s    c         C   sj   | s
 d  S| \ } } |  j  d | d |  } | sG t j d |  n  g  t j |  D] } | j ^ qW S(   NR   R   s   No Package Matching %s(   t   _searchR&   R'   R   t   newestInListR   (   R   t   naTupR   R   R   t   allpkgR   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   returnNewestByNameArch  s    c         C   sB   | s
 d  S|  j  d |  } | s5 t j d |  n  t j |  S(   NR   s   No Package Matching %s(   R   R&   R'   R   R   (   R   R   t   allpkgs(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   returnNewestByName  s    c         C   s   |  s t  |   t j k r  d  Sg  } xm |  D]e } | s? q- n  | d } | d k r^ d  } n | rs | j   } n  | j | t j | |  f  q- W| S(   Ni    t   ?t   *t   [(   R   R   R   (   t   lenR   t   PATTERNS_MAXR   t   lowerR   R   t   compile_pattern(   R   t   ignore_caseR   t   patt   qpat(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _compile_patterns  s    
	#c         C   s?  |  d k r t Sx(|  D] \ } } | d } | d k rB d } n t |  } | d d } | rq | j   } n  | d k	 r | | k r | | d k r q n  | | d  r t S| d |  r t S| d |  r t S| d |  r t S| d |  rt S| | d	 |  rt S| d
 | d |  r t Sq Wt S(   s<    This is basically parsePackages() but for rpm hdr objects. t   epocht   0R   i    s)   %(name)s-%(version)s-%(release)s.%(arch)ss   %(name)s.%(arch)ss   %(name)s-%(version)ss    %(name)s-%(version)s-%(release)ss*   :%(name)s-%(version)s-%(release)s.%(arch)ss	   %(name)s-s!   :%(version)s-%(release)s.%(arch)sN(   R   R   RR   R   R   (   t
   repatternsR   R   R   t   repatR   t   qname(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _match_repattern/  s:    
	(	
c         C   s|  |  j  r | r g  } xz | D]k } |  j | g  } | s{ | rE Pn  t j |  rX Pn  d | k rh Pn  d | k r{ Pq{ n  | j |  q W| Sn  g  } | r| rg  } xY | D]Q } | |  j k r q n  | |  j k r | j |  j |  q n  | j |  q W| } | s| Sn  |  j  s|  j	 | |  } xB |  j
   D]4 \ }	 }
 |  j | |	 |  rC|  j |	 |
  qCqCW| d k |  _  n  |  j j   } |  j rg  | D] } | j d k r| ^ q} n  | rxt | | |  } |  j j | d  | r| d | d | } n | d | d } xG | D]< } x3 | D]+ } | j | k rB|  j j | j  qBqBWq5Wn  | S(   s   Returns a list of packages. Note that the packages are
           always filtered to those matching the patterns/case. repoid is
           ignored, and is just here for compatibility with non-rpmdb sacks. t   -t   .s
   gpg-pubkeyi   i    i   N(   Rg   t   searchNamesR   R   t   extendRi   Re   Rd   R   R   R   R   R   R   Rc   R   Rn   R   R   t   updateR3   (   R   t   repoidR   R   R   R   t   pkgst   tpatst   rpatsR   R   t
   pkgobjlistR;   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   returnPackagesR  s`    				+!c         C   s   |  j  d k r i  } x |  j d  D]u \ } } | t j sD q% n  |  j | |  } | | | j <| j rr q% n  | | _ t	 | _ | j
 t | _ | ` q% W| j   |  _  n  |  j  S(   s    Load the packages which have conflicts from the rpmdb, newer
            versions of rpm have an index here so this is as fast as
            cached (we test rpm version at cache write time). t   conflictnameN(   Rw   R   R   Rt   t   RPMTAG_CONFLICTNAMER   R   R   R   R   RS   R   R   (   R   R   R   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt    _uncached_returnConflictPackages  s     				
c         C   s   t  j |  j t  j  s d  S|  j d } t | d d  } | j d |  | j d t |   x9 t |  D]+ } x" | j D] } | j d |  q Wqq W| j	   t  j
 | d |  d  S(   Ns
   /conflictss   .tmpt   ws   %s
s   %u
(   R	   t   accessR   t   W_OKR   t   writeR   t   sortedR   t   closet   rename(   R   R   t   rpmdbvt   conflicts_fnamet   foR;   t   var(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _write_conflicts_new  s    
c         C   s*   |  j  d t  d } |  j | |  d  S(   Nt	   main_onlyi    (   t   simpleVersionR   R  (   R   R   R  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _write_conflicts  s    c         C   s   |  j  d k r i  } x |  j d  D]u \ } } | t j sD q% n  |  j | |  } | | | j <| j rr q% n  | | _ t	 | _ | j
 t | _ | ` q% W| j   |  _  n  |  j  S(   s    Load the packages which have obsoletes from the rpmdb, this is
            needed because newer rpm's have obsoletes imply conflicts. t   obsoletenameN(   t   _cached_obsoletes_dataR   R   Rt   t   RPMTAG_OBSOLETENAMER   R   R   R   R   R]   R   R   (   R   R   R   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt    _uncached_returnObsoletePackages  s     				
c         C   s   t  j |  j t  j  s d  S|  j d } t | d d  } | j d |  | j d t |   x9 t |  D]+ } x" | j D] } | j d |  q Wqq W| j	   t  j
 | d |  d  S(   Ns
   /obsoletess   .tmpR   s   %s
s   %u
(   R	   R   R   R   R   R   R   R   R   R   R  (   R   R   R  t   obsoletes_fnameR  R;   R  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _write_obsoletes_new  s    
c         C   s*   |  j  d t  d } |  j | |  d  S(   NR  i    (   R  R   R  (   R   R   R  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _write_obsoletes  s    c         C   sx   t  j |  j d  t  j |  j d  t  j |  j d  t  j |  j d  t  j |  j d  t j d |  d S(   s    This shouldn't be called, but people are hitting weird stuff so
            we want to deal with it so it doesn't stay broken "forever". s   /versions
   /conflictss
   /obsoletess   /file-requiress   /pkgtups-checksumss   Rpmdb checksum is invalid: %sN(   R   t   unlink_fR   R&   R'   (   R   t   caller(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR     s    c         C   sR  |  j  s d  Sd   } |  j d | } t |  \ } } | d  k rI d  S| j   } |  j d t  d } | s | | d  k r d  Sg  } y t | |   }	 xq |	 d k r|	 d 8}	 | |  | |  | |  | |  | |  f }
 t |
 d  | j |  j	 |
   q W| j   d k r+d  SWn t
 k
 rM|  j |  d  SX| S(	   Nc         S   s   |  j    d  S(   Ni(   t   readline(   R  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt	   _read_str  s    R^   R  i    ii   i   t    (   t   __cache_rpmdb__R   R   R   R  R  R   t   intR   t   searchPkgTuplet
   ValueErrorR   (   R   t   fnameR  t
   full_fnameR  R   t   frpmdbvR  R   t   pkgtups_numR   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _read_pkglist  s4    		
!c         C   s   |  j  d  |  _ |  j S(   NRS   (   R  Rw   (   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _read_conflicts3  s    c         C   s   |  j  r | |  j d <n  d  S(   NRS   (   R  Rx   (   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt    transactionCacheConflictPackages7  s    	c         C   sD   |  j    } | d k r@ |  j   } |  j r@ |  j |  q@ n  | S(   s0    Return a list of packages that have conflicts. N(   R  R   R   R  R	  (   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   returnConflictPackages;  s    	c         C   s   |  j  r | |  j d <n  d  S(   NR]   (   R  Rx   (   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt    transactionCacheObsoletePackagesE  s    	c         C   s   |  j  d  |  _ |  j S(   NR]   (   R  R  (   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _read_obsoletesI  s    c         C   sD   |  j    } | d k r@ |  j   } |  j r@ |  j |  q@ n  | S(   s0    Return a list of packages that have obsoletes. N(   R#  R   R  R  R  (   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   returnObsoletePackagesM  s    	c         C   s   |  j  s i  |  _ d Sd |  j k rE |  j d } |  j | |  n  d |  j k rt |  j d } |  j | |  n  d |  j k r |  j d } |  j | |  n  d |  j k r |  j d } |  j | |  n  i  |  _ d S(   s    We are going to do a transaction, and the parameter will be the
            rpmdb version when we finish. The idea being we can update all
            our rpmdb caches for that rpmdb version. NRS   R]   s   file-requiress   pkgtups-checksums(   R  Rx   R  R  t   _write_file_requirest   _write_package_checksums(   R   R  R   t   data(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   transactionResultVersionW  s     		c         C   s   i  |  _  d S(   s    We are going to reset the transaction, because the data we've added
            already might now be invalid (Eg. skip-broken, or splitting a
            transaction). N(   Rx   (   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR   r  s    c         C   sa   |  j    } | j d d  } g  } x6 | D]. } t |  _ | j |  j | | j     q+ W| S(   s/    Return packages of the gpg-pubkeys ... hacky. R   s
   gpg-pubkey(   R"   R#   R   Rn   R   R   t   instance(   R   R(   R)   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   returnGPGPubkeyPackagesy  s    	#c         C   sX  d   } |  j  s t  t |  j d  \ } } | d  k rA d
 S|  j d t  d } | j   } | sz | | d  k r~ d Si  } i  } yt | |   } x | d k rP| d 8} | |  | |  | |  | |  | |  f }	 t |	 d  t | |   }
 x? |
 d k rL|
 d 8}
 | |  } | j	 |	 g   j
 |  qWq Wt | |   }
 x |
 d k r|
 d 8}
 | |  } t | |   } xt | d k r| d 8} | |  | |  | |  | |  | |  f }	 t |	 d  | j	 | g   j
 |	  qWqfW| j   d k r+d SWn t k
 rM|  j d	  d SX| | f S(   Nc         S   s   |  j    d  S(   Ni(   R  (   R  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR    s    s   /file-requiresR  i    ii   i   R  s   file requires(   NN(   NN(   NN(   NN(   R  t   AssertionErrorR   R   R   R  R   R  R  R   R   R  R   (   R   R  R  R   R  R  t   iFRt   iFPR  R   t	   files_numR  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _read_file_requires  sP    	
!
!

!!c         C   s  |  j  r: |  j   \ } } | d k	 r: | t   | f Sn  i  } t   } t   } x |  j   D] } x | j D] \ } } }	 | j d  s qo n  | j | j g   j	 |  | | k ro |  j
 | | |	  }
 | j |  |
 s | j |  q qo qo Wq_ Wt   } x! | j   D] } | j |  qWi  } x= | D]5 } g  |  j
 |  D] } | j ^ qN} | | | <q8W| | | f } |  j  r|  j d t  d } |  j | |  n  | S(   s    Get a cached copy of the fileRequiresData for
            depsolving/checkFileRequires, note the giant comment in that
            function about how we don't keep this perfect for the providers of
            the requires. R^   R  i    N(   R  R/  R   R0   R   RM   R+   R   R   R   R?   R3   t
   itervaluesR   R  R   R%  (   R   R,  R-  t   installedFileRequirest   installedUnresolvedFileRequirest   resolvedR;   R   t   flagt   evrt   dept   fileRequirest   fnamest   installedFileProvidersR  t   pkgtupsR   R  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   fileRequiresData  s<    				%		c         C   s=   |  j  s d  S| s | r d  S| | | f } | |  j d <d  S(   Ns   file-requires(   R  Rx   (   R   R1  R2  t   installedFileProvidest   problemsR'  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   transactionCacheFileRequires  s    		c         C   s  t  j |  j t  j  s d  S| \ } } } | r5 d  St |  j d d  } | j d |  | j d t |   x t |  D]w } x | D] } | j d |  q Wt | |  }	 | j d t |	   x% t |	  D] }
 | j d |
  q Wq W| j d t |   x t |  D]w }
 | j d |
  t | |
  } | j d t |   x6 t |  D]( } x | D] } | j d |  qwWqjWqW| j	   t  j
 |  j d |  j d  d  S(   Ns   /file-requires.tmpR   s   %s
s   %u
s   /file-requires(   R	   R   R   R   R   R   R   R   R0   R   R  (   R   t   rpmdbversionR'  R1  R2  R<  R  R   R  t	   filenamesR  R:  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR%    s4    
c      	   C   sd  |  j  s d Sd   } t |  j d  \ } } | d k r? d S|  j d t  d } | j   } | sx | | d  k r| d Si  } y t | |   } x | d k r5| d 8} | |  | |  | |  | |  | |  f }	 t |	 d  | |  }
 | |  } |
 d	 k r"d | |	 <q |
 | f | |	 <q W| j   d
 k rLd SWn t k
 rn|  j	 d  d SX| sy| Sx | D] }	 | |	 d k rqn  |	 \ } } } } } |  j
 | | | | |  } | s|  j	 d | | | | | f  qn  | d } | |	 \ }
 } d | j j k sd | j j k r<qn  |
 | j j d <| | j j d <qWd S(   sI   As simpleVersion() et. al. requires it, we "cache" this yumdb data
            as part of our rpmdb cache. We cache it with rpmdb data, even
            though someone _could_ use yumdb to alter it without changing the
            rpmdb ... don't do that.
            NOTE: This is also used as a cache of pkgtups in the rpmdb. Nc         S   s   |  j    d  S(   Ni(   R  (   R  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR  &  s    s   /pkgtups-checksumsR  i    ii   i   R   R  s   pkg checksumss   pkg checksums: %s-%s:%s-%s.%sR   R   (   R  R   R   R   R  R   R  R  R  R   R   R   R   (   R   R   R  R  R   R  R  R   R  R   R   R   R   R   R   R   R;   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR     s\    		
!	
c         C   s   |  j  s d  S| |  j d <d  S(   Ns   pkgtups-checksums(   R  Rx   (   R   t   pkg_checksum_tups(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt    transactionCachePackageChecksums`  s    	c         C   s  t  j |  j t  j  s d  S| } t |  j d d  } | j d |  | j d t |   xs t |  D]e \ } } x | D] } | j d |  q W| d  k r d } n  x | D] } | j d |  q Wqm W| j	   t  j
 |  j d |  j d  d  S(   Ns   /pkgtups-checksums.tmpR   s   %s
s   %u
R   s   /pkgtups-checksums(   R   R   (   R	   R   R   R   R   R   R   R   R   R   R  (   R   R?  R'  RA  R  R   t   TDR  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR&  f  s     	
c         C   s   |  j  d k	 r |  j  S|  j s# d S|  j d } |  j d } t j j |  r t j j |  r t j j |  } t j j |  } | | k r t	 |  \ } } | d k r d S| j
   d  } | |  _  q n  |  j  S(   s.    Return the cached string of the main rpmdbv. s   /versions	   /PackagesiN(   Rv   R   R  R   Ru   R	   Rp   t   existsR   R   R  (   R   t   rpmdbvfnameR   t   nmtimet   omtimeR  R   R  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _get_cached_simpleVersion_mainy  s     	$c         C   s8  t  |  |  _ |  j s d  S|  j d  k r/ d  S|  j d } t j j |  sR d  St j j	 |  } |  j | k rw d  S|  j
 d } t j |  j
 t j  s t j j |  j
  r d  Sy t |  j
  Wq t t f k
 r } d  SXn  t | d d  } | j |  j  | j d  | j   t j | d |  d  S(   Ns	   /Packagess   /versions   .tmpR   s   
(   RR   Rv   R  R{   R   Ru   R	   Rp   RD  R   R   R   R   R   R   t   OSErrorR   R   R   R  (   R   R  R   R{   RE  R   R  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _put_cached_simpleVersion_main  s0    	
c      
   C   s  d   } | r; | r; |  j    } | d k	 r; | i  g Sn  t   } i  } i  } i  } xvt |  j    D]b}	 |	 j }
 d } d |
 k r d |
 k r |
 j |
 j f } n  | j |	 |  x^ | D]V } |	 j	 | | k r | | k rt   | | <i  | | <n  | | j |	 |  q q W| r(qi n  d } d } d |	 j k rtd |	 j j
 } d |	 j k rt|	 j j } qtn  | | | | |	 |  x> | D]6 } |	 j	 | | k r| | | | | |	 |  qqWqi W|  j d k r|  j |  n  | r| | | | g S| | g S(	   s5    Return a simple version for all installed packages. c         S   so   |  j  | i   } | j  d  t    } | j | |  | d  k	 rk | j  | t    } | j | |  n  d  S(   N(   R   R   R   R   (   t   ireposR   t   revR;   R   t   irevst   rpsv(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _up_revs  s    R   R   t	   installedt	   from_repot   @t   from_repo_revisionN(   RH  R   R   R   R   R   R   R   R   R   RQ  RS  Rv   RJ  (   R   R  t   groupsRO  R  t   mainRK  t	   main_grpst   irepos_grpsR;   t   ydbiR   t   groupR   RL  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR    sL    			%c         C   sk   d } x^ | D]V } xM |  D]E } t  | |  } | r | j   j |  d k r | d 7} Pq q Wq W| S(   Ni    ii   (   R   R   t   find(   t   fieldst   searchstringsR   t   countt   st   fieldt   value(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _find_search_fields  s    !
c         C   s   | s t  d   |  } n  g  } x] |  j   D]O \ } } |  j | | |  } | d k r. | j |  j | |  | f  q. q. W| S(   Nc         S   s
   |  j    S(   N(   R   (   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   <lambda>  s    i    (   RQ   R   Ra  R   R   (   R   R[  R\  t   loweredR   R   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt"   searchPrimaryFieldsMultipleStrings  s    &c         C   s4   g  } x' | D] } | j  |  j d |   q W| S(   NR   (   R   R   (   R   t   namest
   returnListR   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR     s    c         C   s   |  j  | | | | |  S(   N(   R   (   R   R   R   t   vert   relR   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR     s    c         C   s   d  S(   N(    (   R   t   archlist(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   excludeArchs  s    c         C   sA   |  j    } g  | j d t  D] \ } } |  j | |  ^ q S(   Nt   headers(   R"   t   returnLeafNodesR   R   (   R   R   R(   t   hR)   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyRl    s    c         o   ss   |  j    } | j | |   } x2 | D]* } | d d k r% | | j   f Vq% q% W~ |  j ro |  j j   n  d S(   sL   dbMatch() wrapper generator that yields (header, index) for matches
        R   s
   gpg-pubkeyN(   R"   R#   R)  Rz   R(   R   (   R   R   t   kwdsR(   R)   Rm  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR     s    	c      	   C   sA  | d k	 r | |  j k r g  S| | | | | f } | |  j k rQ |  j | g St   } g  } |  j sx | |  j k r!| d k	 r |  j j | g   }	 |	 s |  j j |  q n |  j	   }	 xY |	 D]Q }
 xH d D]3 } | | d k	 r | | t
 |
 |  k r Pq q W| j |
  q W| S|  j   } | d k	 rN|  j d |  } n6 | d k	 ro|  j d |  } n |  j   } t |  _ t } x | D] \ } } |  j | |  }
 |  j j |
 j  t } xH d D]3 } | | d k	 r| | t
 |
 |  k rPqqW| j |
  qW| r=| d k	 r=|  j j |  n  | S(	   s4   List of matching packages, to zero or more of NEVRA.R   Rh  Rg  R   R   N(   s   archs   rels   vers   epoch(   s   archs   rels   vers   epoch(   R   Rh   Rf   t   localsRg   Re   Rd   R   R3   R   t   getattrR   R"   R   R   R   R   R   (   R   R   R   Rg  Rh  R   R   t   locR   R   R   R   R(   R)   t   doneR   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR   !  sL    	)	)c         C   s   | |  j  k r |  j  | St | | |   } | |  j  | <|  j j | j g   j |  | |  j | j <|  j r |  j	 d  k r |  j d } t j j |  |  _	 n  | S(   Ns	   /Packages(   Rc   R   Rd   R   R   R   Rf   R   R  R{   R   Ru   R	   Rp   R   (   R   R   R!   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR   X  s    c         C   s   t  j | d  } t  j | d  } t  j t | d   } t  j t | d   } | d } | d  k rw d } n t |  } t  j |  } t  j | | | | | f  S(   NR   R   t   versiont   releaseR   R   (   R   t
   share_dataRR   R   (   R   R   R   R   Rg  Rh  R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR   e  s    
	c         C   s   t  j d t d d |  j S(   Nsc   getPkgList() will go away in a future version of Yum.
Please access this via the pkglist attribute.t
   stackleveli   (   t   warningst   warnt   DeprecationWarningR   (   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt
   getPkgListt  s    	c         C   s9   t  j d t d d g  |  j   D] \ } } | ^ q# S(   Ns6   getHdrList() will go away in a future version of Yum.
Rv  i   (   Rw  Rx  Ry  R   (   R   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt
   getHdrList{  s    	c         C   s_   t  j d t d d g  } x3 |  j D]( \ } } } } } | j | | f  q& Wt j |  S(   Ns>   getNameArchPkgList() will go away in a future version of Yum.
Rv  i   (   Rw  Rx  Ry  R   R   R    t   unique(   R   t   lstR   R   R   Rg  Rh  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   getNameArchPkgList  s    	c         C   sY   t  j d t d d g  } x- |  j D]" \ } } } } } | j |  q& Wt j |  S(   Ns:   getNamePkgList() will go away in a future version of Yum.
Rv  i   (   Rw  Rx  Ry  R   R   R    R|  (   R   R}  R   R   R   Rg  Rh  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   getNamePkgList  s    	c         C   sT   t  j d t d d g  |  j d | d | d | d | d |  D] } | j ^ qA S(	   Ns@   returnTuplebyKeyword() will go away in a future version of Yum.
Rv  i   R   R   R   Rg  Rh  (   Rw  Rx  Ry  R   R   (   R   R   R   R   Rg  Rh  R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   returnTupleByKeyword  s    	c   	      C   s   t  j d t d d | \ } } } } } |  j d | d | d | d | d |  } t |  d	 k r{ | d	 } | j g Sg  Sd  S(
   Ns?   returnHeaderByTuple() will go away in a future version of Yum.
Rv  i   R   R   R   Rg  Rh  i    (   Rw  Rx  Ry  R   R   R   (	   R   t   pkgtupleR   R   R   R   R   R}  t   item(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   returnHeaderByTuple  s    	*

c         C   so   t  j d t d d | \ } } } } } | d	 k r@ d } n  g  |  j | | | | |  D] } | j ^ q\ S(
   s?   returns a list of header indexes based on the pkgtuple provideds>   returnIndexbyTuple() will go away in a future version of Yum.
Rv  i   i    s   (none)R  R   N(   Ni    s   (none)R  (   Rw  Rx  Ry  R   R   R   (   R   R  R   R   R   Rs  Rt  R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   returnIndexByTuple  s    		c         C   s
   t   d  S(   N(   t   NotImplementedError(   R   R(   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   addDB  s    c         C   s   | d k r d } n  t |  t j k rE t j |  \ } } } n> t |  t j t j f k ru | \ } } } n d } } } |  t j	 |  t j	 |  t j	 |  t j	 |  f f } t j	 |  S(   s2    Given random stuff, generate a usable dep tuple. i    N(
   R   t   typet   typest
   StringTypeR    t   stringToVersiont	   TupleTypet   ListTypeR   Ru  (   R   t   flagsRs  t   r_et   r_vt   r_rt   deptup(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt
   _genDeptup  s    	c   
      C   s   t  j |  } |  j | | |  } | |  j k r> |  j | S| d d } |  j |  } i  } xk | D]c } | d d k r | d k r | d d f g | | <qh n  | j d |  }	 |	 rh |	 | | <qh qh W| |  j | <| S(   s   searches the rpmdb for what provides the arguments
           returns a list of pkg objects of providing packages, possibly emptyi   i   i    R^   R1   N(   NNN(   R   Ru  R  Rl   R   R   t   matchingPrcos(
   R   R   R  Rs  R  R  R   R   R   t   hits(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR?     s     c         C   s)   g  |  j  | | |  D] } | j ^ q S(   N(   R?   R   (   R   R   R  Rs  R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   whatProvides  s    c   
      C   s   t  j |  } |  j | | |  } | |  j k r> |  j | S| d d } |  j |  } i  } xk | D]c } | d d k r | d k r | d d f g | | <qh n  | j d |  }	 |	 rh |	 | | <qh qh W| |  j | <| S(   s   searches the rpmdb for what provides the arguments
           returns a list of pkgtuples of providing packages, possibly emptyi   i   i    R^   RM   N(   NNN(   R   Ru  R  Rm   R   R   R  (
   R   R   R  Rs  R  R  R   R   R   R  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR2     s     c         C   s)   g  |  j  | | |  D] } | j ^ q S(   N(   R2   R   (   R   R   R  Rs  R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   whatRequires  s    c         C   sk   i  } xR t  j   D]D } x; t  j |  D]* } x! |  j |  D] } d | | <q? Wq) Wq Wt | j    S(   sq   returns a list of yum installed package objects which own a file
           that are currently running or in use.i   (   R   t   return_running_pidst   get_open_filesR   R   R   (   R   R   t   pidR<   R;   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   return_running_packages  s    c      	   C   s!  | d k r |  j   } n  t   } g  } xt |  D]} x | j D] } | d j d  rf qG n  | | k rx qG n  | \ } } } |  j | | |  r | j |  qG n  t j	 j
 j | |  } t j | | |  }	 t | d d |	 }
 | j |
  qG Wx| j D]	} | d j d  r+qn  | \ } } } |  j | | |  } i  } xV | D]N } | j d | j d k r| j d | j d k rq\n  | | | | <q\W| } | sqn  t j	 j
 j | |  } t j | | |  } t | d d | d | }
 | j |
  qWq7 W| S(	   s&    Checks for any missing dependencies. i    t   rpmlibRM   RN   i   RS   RO   N(   R   R   R0   R   R>   R+   R?   R3   t   yumt   depsolveR  R   R    t   formatRequireRL   R   RS   R   (   R   R   t	   providersR=  R;   t   rreqt   reqR  Rg  RN   t   probt   creqt   rest   nrest   conflicting_poRO   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   check_dependencies  sJ    	   4	c         c   s   d  } xv t |  j    D]b } | j | k r4 q n  | j t | j   rR q n  | d  k rj | } q n  | | f V| } q Wd  S(   N(   R   R   R   R   t   intersectionR0   t   provides_names(   R   t   ignore_providest   lastR;   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _iter_two_pkgsB  s    c      	   C   s   t  |  } g  } x |  j |  D] \ } } | j | j k rF q" n  | j |  r | | k r t j | j  r | j d k r q" n  t j | j  r | j d k r q" q n  | j t | d |  q" W| S(   s    Checks for any "duplicate packages" (those with multiple versions
            installed), we ignore any packages with a provide in the passed
            provide list (this is how installonlyworks, so we do the same). t   noarchRV   (   R0   R  R   t   verEQR   t   isMultiLibArchR   RU   (   R   R  R=  R  R;   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   check_duplicatesP  s    !!	c         C   s   g  } g  } x6 t  |  j    D]" } | j s4 q n  | j |  q WxM t  |  j    D]9 } x0 | j |  D] } | j t | d |  qn WqX W| S(   s@    Checks for any packages which are obsoleted by other packages. RY   (   R   R   R]   R   t   obsoletedByRW   (   R   t
   obsoletersR=  R;   t   obspo(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   check_obsoletedc  s    	!c         C   s   g  } xu t  |  j    D]a } xX | j D]M } | \ } } } | |  j | | |  k r) | j t | d |  Pq) q) Wq W| S(   sq    For each package, check that a provides search for it's name (and
            everything it provides) finds it. R[   (   R   R   R1   R?   R   RZ   (   R   R=  R;   t   provtupR   R  Rs  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   check_providesp  s    N(   NNN(   NNN(i   RA   RB   RK   Rt   t   RPMTAG_REQUIRENAMEt   RPMTAG_REQUIREVERSIONt   RPMTAG_REQUIREFLAGSt   RPMTAG_PROVIDENAMEt   RPMTAG_PROVIDEVERSIONt   RPMTAG_PROVIDEFLAGSR   t   RPMTAG_CONFLICTVERSIONt   RPMTAG_CONFLICTFLAGSR  t   RPMTAG_OBSOLETEVERSIONt   RPMTAG_OBSOLETEFLAGSR   R   R  R   R   R   t   propertyR   R   R   Ro   R"   R   R   R   R   R   R   R   R   R   R   R   R   t   containsRP  R   R   t   staticmethodR   R   R   R   R   R  R	  R  R  R  R   R  R  R   R!  R"  R#  R$  R(  R   R*  R/  R;  R>  R%  R   RB  R&  RH  RJ  R  Ra  Rd  R   R   Rj  Rl  R   R   R   R   Rz  R{  R~  R  R  R  R  R  R  R?   R  R2   R  R  R  R  R  R  R  (    (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR\      s   	1			W						 						#N								$			
			
			
	<	(		&C				#7			7					
	
						/		c         C   s   |  j  d d  j  d d  S(   NR^   R  t   ~(   t   replace(   Rp   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt	   _sanitize|  s    R}   c           B   sJ   e  Z d  Z d d d  Z d   Z d   Z d d d d  Z d   Z RS(   sQ   class for access to the additional data not able to be stored in the
       rpmdbs   /var/lib/yum/yumdbc         C   s   t  j   |  _ | |  j _ | |  j _ t |  j _ i  |  _ t j	 j
 |  j j  s y  t |  j j  t |  j _ Wq t t f k
 r } q Xn* t j |  j j t j  r t |  j _ n  i i  d 6|  _ d  S(   Nt   attr(   R   t   GenericHolderR   R`   Ra   R   t   writablet	   _packagesR	   Rp   RD  R   R   R   RI  R   R   t   yumdb_cache(   R   R`   Ra   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR     s    	c         C   s`   d |  j  j } t j |  } x: | D]2 } t j j |  j d  d } | |  j | <q& Wd  S(   Ns   %s/*/*/R   i    (   R   R`   R   R	   Rp   t   basenamet   splitR  (   R   t   glbt   pkgdirst   dR   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _load_all_package_paths  s
    c   	      C   su   | |  j  k r |  j  | S| \ } } } } } t |  } d |  j j | d | | | | | f } | |  j  | <| S(   Ns   %s/%s/%s-%s-%s-%s-%si    (   R  R  R   R`   (	   R   R   R   R   R   R   R   R   t   thisdir(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _get_dir_name  s    c         C   sd   | r! |  j  | j | j  } n* | rB | rB |  j  | |  } n	 t d  t |  j | d |  j S(   s<   Return an RPMDBAdditionalDataPackage Object for this packages1   Pass something to RPMDBAdditionalData.get_packageR  (   R  R   R   R  t   RPMDBAdditionalDataPackageR   R  (   R   R   R   R   R  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   get_package  s    	c         C   s   d S(   s   populate out the dirs and remove all the items no longer in the rpmd
           and/or populate various bits to the currently installed versionN(    (   R   t   rpmdbobj(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   sync_with_rpmdb  s    	N(	   RA   RB   RK   R   R   R  R  R  R  (    (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR}     s   		
c         C   s6   |  r# |  d d k r# |  d }  n  t  j |   d  k S(   Ni    R^   i   (   R   t   validate_repoidR   (   R`  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _validate_from_repo  s    R  c           B   s   e  Z e d  d d d d d d d d d	 g
  Z i e d 6Z d 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 d   Z d d  Z RS(   R   t   reasont   installed_byt
   changed_byRQ  RS  t   from_repo_timestampRy   t   group_membert   command_linec         C   s(   | |  _  | |  _ i  |  _ | |  _ d  S(   N(   t   _conft   _mydirR   t   _yumdb_cache(   R   R   t   pkgdirR  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR     s    			c         C   sG  | |  j  | <|  j d k r  d Sd } | d k	 r> | j } n  | d k r] | |  j k r] d S| |  j d k r|  j d | d } | d k	 r | d k	 r | j | j f | j | j f k r |  j d | d j |  | |  j | <d Sn  |  j d | d | k rd Sn  | | t | g  f |  j d | <| |  j | <d S(   s    Create caches for the attr. We have a per. object read cache so at
            worst we only have to read a single attr once. Then we expand that
            with (dev, ino) cache, so hardlink data can be read once for
            multiple packages. Ni   R  i   i    (	   R   R  R   t   st_nlinkt   _auto_hardlink_attrst   st_devt   st_inoR3   R0   (   R   R  R`  R<   t   infot   nlinkst   sinfo(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _auto_cache  s&    $#c         C   s   | |  j  k r |  j  | } | |  j  d k rt |  j  d | d j |  |  j  d | d st |  j  d | =qt n  |  j  | =n  d S(   s(    Remove old values from the link cache. R  i   N(   R  R   (   R   R<   t   ovalue(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _unlink_yumdb_cache  s    c         C   s   |  j  d k r t S|  j |  | |  j  d k r7 t S|  j  d | d sR t  y^ t |  j  d | d  j   } t j | d  t	 j
 | | d  t	 j | d |  Wn t SX|  j  d | d j |  | |  j  | <t S(   sb    If we have a matching yumdb cache, link() to it instead of having
            to open()+write(). R  i   s   .tmpN(   R  R   R   R  R+  t   iterR$   R   R  R	   t   linkR  R3   R   (   R   R<   R`  t   lfn(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _link_yumdb_cache  s     !c         C   s   t  j j |  j d |  S(   s*    Given an attribute, return the filename. R^   (   R	   Rp   Rq   R  (   R   R  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _attr2fn)  s    c         C   s_  t  j j |  j  s% t |  j  n  t |  } | |  j k rM |  j | =n  |  j |  } | j d  r t	 d | |  f  n  | d k r t
 j |  j j  n  |  j | |  r d  St
 j | d  t | d d  } y | j |  Wn, t t f k
 r} t	 d | |  f  n X| j   | j   ~ t  j | d |  |  j | | |  d  S(   Ns   .tmps   Cannot set attribute %s on %sR   R   R   (   s   checksum_types   checksum_data(   R	   Rp   RD  R  R   R  R   R  t   endswithR,   R   R  R  Ra   R  R   R   RI  R   t   flushR   R  R  (   R   R  R`  R<   R  R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _write-  s.    

c   	      C   s  t  |  } | |  j k r& |  j | S|  j |  } | j d  rZ t d |  | f  n  t j | d t } | d  k r t d |  | f  n  | j	 d k r |  j
 d  k	 r | j | j f } | |  j
 k r |  j | |  j
 | | |  |  j | Sn  t |  \ } } | d  k r$d | j S| j   } | j   ~ | |  j k r~|  j | } | |  s~t d | |  f  q~n  | j	 d k r|  j
 d  k	 r| |  j
 | <n  |  j | | | |  | S(   Ns   .tmps   %s has no attribute %st   ignore_EACCESi   s   <E:%d>s#   Invalid value of attribute %s on %s(   R  R   R  R  R,   R   t   stat_fR   R   R  R  R  R  R  R   t   errnot   readR   t   _validators(	   R   R  R<   R  t   keyR  R   R`  t   valid(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _readS  s:    
c         C   s   t  |  } |  j |  } | |  j k r7 |  j | =n  |  j |  t j j |  r y t j |  Wq t t	 f k
 r t
 d | |  f  q Xn  d S(   s   remove the attribute files!   Cannot delete attribute %s on %s N(   R  R  R   R  R	   Rp   RD  t   unlinkR   RI  R,   (   R   R  R<   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   _delete}  s    c         C   s   |  j  |  S(   N(   R  (   R   R  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR/     s    c         C   s9   | j  d  s" |  j | |  n t j |  | |  d  S(   NR   (   R+   R  t   objectt   __setattr__(   R   R  R`  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR    s    c         C   s3   | j  d  s |  j |  n t j |  |  d  S(   NR   (   R+   R  R   t   __delattr__(   R   R  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR    s    c         C   s   |  j  |  } | d  k	 S(   N(   R   R   (   R   R  R   (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   __contains__  s    c         c   s   x |  j  D] } | Vq
 Wxk t j |  j d  D]S } | t |  j  d } | |  j  k rb q0 n  | r~ | j d  r~ q0 n  | Vq0 Wd  S(   Ns   /*i   s   .tmp(   R   R   R  R   R  (   R   t   show_hiddenR  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   __iter__  s    	c         C   sV   x' |  j  d t  D] } |  j |  q Wy t j |  j  Wn t k
 rQ n Xd  S(   NR  (   R  R   R  R	   t   rmdirR  RI  (   R   R  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   clean  s    c         C   s,   y |  j  |  } Wn t k
 r' | SX| S(   s   retrieve an add'l data obj(   R  R,   (   R   R  t   defaultR  (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR     s
    N(   RA   RB   R0   R  R  R  R   R   R  R  R  R  R  R  R  R/   R  R  R  R   R  R  R   (    (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyR    s.   	
	
			&	*						c          C   s,   t  d  }  x |  j   D] } | GHq Wd  S(   NR^   (   R\   R   (   t   sackt   p(    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyRU    s    t   __main__(,   Rt   R  Rw  R   R	   t   os.patht   rpmUtilsR    R   t   rpmUtils.transactionR   R   R&   t   packagesR   R   t   packageSackR   R   t   fnmatcht   ret   yum.i18nR   R   R   t   yum.depsolveR  R   R   R   R   RC   RL   RU   RW   RZ   R\   R  R   R}   R  R  RU  RA   (    (    (    s/   /usr/lib/python2.7/site-packages/yum/rpmsack.pyt   <module>   sN   				E
	     	F		