
N_c           @   s  d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l	 Z	 d d l
 m Z m Z d d l m 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 Td d l m Z d d l Z d d l Z e j j d  d d	 l m Z m Z y) d d l  Z  e! e  d
  rde" Z  n  Wn e# k
 r~e" Z  n Xd d l$ Z$ d d l% Z% d   Z& d   Z' e( d  Z) d d e" d  Z* d f  d     YZ+ d f  d     YZ, d e- f d     YZ. e, d  Z/ d e/ _0 d e. f d     YZ1 d e- f d     YZ2 d f  d     YZ3 d e. e2 f d     YZ4 d    Z5 d! e4 f d"     YZ6 d# f  d$     YZ7 d% f  d&     YZ8 d' d >Z9 d' d' >Z: d' d( >Z; d' d) >Z< d' d* >Z= d' d+ >Z> d' d, >Z? d' d- >Z@ d' d. >ZA d' d/ >ZB d0 e- f d1     YZC d2 eC f d3     YZD d4 f  d5     YZE i  aF d6 eE f d7     YZG e, d8  ZH d eH _0 d9 e6 f d:     YZI d; e6 f d<     YZJ d= eJ f d>     YZK d S(?   sA   
Classes and functions dealing with rpm package representations.
iN(   t   Popent   PIPE(   t   RpmUtilsError(   t   flagToStringt   stringToVersiont   compareVerOnly(   t   *(   t
   itemgettert   media(   t
   URLGrabbert   URLGrabErrort   getc         C   s_   |  j  |  j |  j } } } | j  | j | j } } } t j j | | | f | | | f  S(   s4   
    Compare two Package or PackageEVR objects.
    (   t   epocht   versiont   releaset   rpmUtilst	   miscutilst
   compareEVR(   t   po1t   po2t   e1t   v1t   r1t   e2t   v2t   r2(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   comparePoEVR9   s    c         C   sn   |  j  |  j |  j } } } | j  | j | j } } } | | k rJ t S| | k rZ t S| | k rj t St S(   sA   
    Compare two Package or PackageEVR objects for equality.
    (   R   R   R   t   Falset   True(   R   R   R   R   R   R   R   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   comparePoEVREQ@   s       c         C   sI  i  } x<|  D]4} | j  \ } } } } } | sp | j   } | j   } | j   } | j   } | j   } n  | }	 d | | f }
 d | | | | f } d | | f } d | | | f } d | | | | | f } d | | | | | f } xM |	 |
 | | | | | g D]0 } | | k r,g  | | <n  | | j |  qWq W| S(   s  take a list of pkg objects and return a dict the contains all the possible
       naming conventions for them eg: for (name,i386,0,1,1)
       dict[name] = (name, i386, 0, 1, 1)
       dict[name.i386] = (name, i386, 0, 1, 1)
       dict[name-1-1.i386] = (name, i386, 0, 1, 1)       
       dict[name-1] = (name, i386, 0, 1, 1)       
       dict[name-1-1] = (name, i386, 0, 1, 1)
       dict[0:name-1-1.i386] = (name, i386, 0, 1, 1)
       dict[name-0:1-1.i386] = (name, i386, 0, 1, 1)
       s   %s.%ss   %s-%s-%s.%ss   %s-%ss   %s-%s-%ss   %s:%s-%s-%s.%ss   %s-%s:%s-%s.%s(   t   pkgtupt   lowert   append(   t   pkgst	   casematcht   pkgdictt   pkgt   nt   at   et   vt   rt   namet   nameArcht   nameVerRelArcht   nameVert
   nameVerRelt   envrat   nevrat   item(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   buildPkgRefDictK   s*    "i    s$   repo-epoch-name-version-release-archc         C   s  | d k r$ t |  t |   } n  g  } g  } g  } x | D] } | sX | j   } n  | | k r | j | |  | | =q= t j |  r| j   }	 t j |  }
 d } x; |	 D]3 } |
 |  r | j | |  | | =d } q q W| s| j	 |  qq= | j	 |  q= Wt j
 |  } | d k rSt j
 |  } t j
 |  } n= | d k rd   } | |  } | |  } n t d |  | | | f S(   s,  matches up the user request versus a pkg list:
       for installs/updates available pkgs should be the 'others list' 
       for removes it should be the installed list of pkgs
       takes an optional casematch option to determine if case should be matched
       exactly. Defaults to not matching.i    i   s$   repo-epoch-name-version-release-archs   repo-pkgkeyc         S   sD   i  } x1 |  D]) } d | j  j | j f } | | | <q W| j   S(   Ns   %s%s(   t   repot   idt   pkgKeyt   values(   R!   t   uR$   t   mark(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt	   pkgunique   s
    s   Bad value for unique: %sN(   t   NoneR2   t   boolR   t   extendt   misct   re_globt   keyst   compile_patternR    t   uniquet
   ValueError(   R!   t   usercommandsR"   RA   R#   t
   exactmatcht   matchedt	   unmatchedt   commandt   trylistt   regext   founditR1   R9   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   parsePackagesm   sB    	
	t   FakeSackc           B   s)   e  Z d  Z d   Z d   Z d   Z RS(   s,    Fake PackageSack to use with FakeRepositoryc         C   s   d  S(   N(    (   t   self(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   __init__   s    c         C   s   t  S(   sb    Is calling pkg.returnFileEntries(primary_only=True) faster than
            using searchFiles(). (   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   have_fastReturnFileEntries   s    c         C   s   d S(   sN   delete a pkgobject, do nothing, but make localpackages work with --skip-brokenN(    (   RM   t   obj(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt
   delPackage   s    (   t   __name__t
   __module__t   __doc__RN   RO   RQ   (    (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRL      s   		t   FakeRepositoryc           B   sV   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z e	 d d    Z
 RS(	   s8   Fake repository class for use in rpmsack package objectsc         C   s   t  } d | k r- t j j |  } t } n  | j d  rO | d  } t } n  g  } | rk | j d  n  x6 | D]. } t |  d k r d } n  | j |  qr Wd j |  |  _	 d S(   s?    Set the repoid, but because it can be random ... clean it up. t   /s   .rpmii   t   ?t    N(
   R   t   ost   patht   basenameR   t   endswithR    t   ordt   joinR4   (   RM   t   repoidt	   pathbasedt   bytest   byte(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _set_cleanup_repoid   s    	
		c         C   s)   |  j  |  |  j |  _ t   |  _ d  S(   N(   Rc   R4   R*   RL   t   sack(   RM   R_   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRN      s    c         C   s4   |  j  | j  k r d S|  j  | j  k  r, d Sd Sd  S(   Ni   ii    (   R4   (   RM   t   other(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   __cmp__   s
    c         C   s   t  |  j  S(   N(   t   hashR4   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   __hash__   s    c         C   s   |  j  S(   N(   R4   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   __str__   s    c         C   s   |  j  S(   N(   R4   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _ui_id   s    t   fgetc         C   s
   |  j    S(   N(   Rj   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   <lambda>   s    (   RR   RS   RT   Rc   RN   Rf   Rh   Ri   Rj   t   propertyt   ui_id(    (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRU      s   						t   PackageObjectc           B   sr  e  Z d  Z d   Z d   Z e d d    Z d   Z e d d    Z d   Z	 e d d    Z
 d	   Z e d d
    Z d   Z e d d    Z d   Z e d d    Z d   Z e d d    Z d   Z e d d    Z d   Z e d d    Z d   Z e d d    Z d   Z e d d    Z d   Z e d d    Z d   Z e d d    Z d   Z e d d    Z  d   Z! e d d     Z" d!   Z# e d d"    Z$ d#   Z% d$   Z& d%   Z' d&   Z( d'   Z) d(   Z* d)   Z+ d*   Z, d+   Z- d,   Z. d-   Z/ d.   Z0 d/   Z1 d0   Z2 d1   Z3 d2   Z4 e d d3    Z5 d4   Z6 RS(5   sZ   Base Package Object - sets up the default storage dicts and the
       most common returnsc         C   s:   d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ g  |  _ d  S(   N(   R:   R*   R   R   R   t   archt
   _checksums(   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRN      s    					c         C   s!   |  j  d k r |  j S|  j Sd  S(   Nt   0(   R   t   nvraR/   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt	   _ui_envra   s    Rk   c         C   s
   |  j    S(   N(   Rt   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl      s    c         C   s!   |  j  d k r |  j S|  j Sd  S(   NRr   (   R   Rs   R0   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt	   _ui_nevra  s    c         C   s
   |  j    S(   N(   Ru   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s!   |  j  d k r |  j S|  j Sd  S(   NRr   (   R   t   vrt   evr(   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _ui_evr  s    c         C   s
   |  j    S(   N(   Rx   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s!   |  j  d k r |  j S|  j Sd  S(   NRr   (   R   t   vrat   evra(   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _ui_evra  s    c         C   s
   |  j    S(   N(   R{   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s!   |  j  d k r |  j S|  j Sd  S(   NRr   (   R   t   nvrt   nevr(   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _ui_nevr  s    c         C   s
   |  j    S(   N(   R~   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   d |  j  |  j f S(   Ns   %s.%s(   R*   Rp   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _na  s    c         C   s
   |  j    S(   N(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   d |  j  |  j f S(   Ns   %s-%s(   R   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _vr!  s    c         C   s
   |  j    S(   N(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   #  s    c         C   s   d |  j  |  j |  j f S(   Ns   %s-%s.%s(   R   R   Rp   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _vra%  s    c         C   s
   |  j    S(   N(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   '  s    c         C   s   d |  j  |  j |  j f S(   Ns   %s:%s-%s(   R   R   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _evr)  s    c         C   s
   |  j    S(   N(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   +  s    c         C   s    d |  j  |  j |  j |  j f S(   Ns   %s:%s-%s.%s(   R   R   R   Rp   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _evra-  s    c         C   s
   |  j    S(   N(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   /  s    c         C   s   d |  j  |  j |  j f S(   Ns   %s-%s-%s(   R*   R   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _nvr1  s    c         C   s
   |  j    S(   N(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   3  s    c         C   s    d |  j  |  j |  j |  j f S(   Ns   %s-%s-%s.%s(   R*   R   R   Rp   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _nvra5  s    c         C   s
   |  j    S(   N(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   7  s    c         C   s    d |  j  |  j |  j |  j f S(   Ns   %s-%s:%s-%s(   R*   R   R   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _nevr9  s    c         C   s
   |  j    S(   N(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   ;  s    c         C   s&   d |  j  |  j |  j |  j |  j f S(   Ns   %s-%s:%s-%s.%s(   R*   R   R   R   Rp   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _nevra=  s    	c         C   s
   |  j    S(   N(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   A  s    c         C   s    d |  j  |  j |  j |  j f S(   Ns   %s:%s-%s-%s(   R   R*   R   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _envrC  s    c         C   s
   |  j    S(   N(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   E  s    c         C   s&   d |  j  |  j |  j |  j |  j f S(   Ns   %s:%s-%s-%s.%s(   R   R*   R   R   Rp   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _envraG  s    c         C   s
   |  j    S(   N(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   K  s    c         C   s   |  j  S(   N(   t   ui_envra(   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRi   M  s    c         C   sH   |  j  d k r. d |  j  |  j |  j f } n d |  j |  j f } | S(   sA   returns a printable version string - including epoch, if it's setRr   s   %s:%s-%ss   %s-%s(   R   R   R   (   RM   t   ver(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   printVerP  s    c         C   sA   | s
 d St  |  j | j  } | d k r= t |  |  } n  | S(   s<    Compare package to another one, only rpm-version ordering. i   i    (   t   cmpR*   R   (   RM   Re   t   ret(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   verCMPY  s    c         C   s   |  j  |  } | d k r3 t |  j | j  } n  | d k r t |  d  r t | d  r t |  j | j  } | r |  j d k r d S| r | j d k r d Sn  | S(   s4    Compare packages, this is just for UI/consistency. i    R_   t	   installedi   i(   R   R   Rp   t   hasattrR_   (   RM   Re   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRf   b  s    *c         C   s[   | s
 t  S|  j | j k r  t  St |  d  rW t | d  rW |  j | j k rW t  Sn  t S(   se    Compare packages for yes/no equality, includes everything in the
            UI package comparison. R_   (   R   R   R   R_   R   (   RM   Re   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   __eq__o  s    c         C   s   |  | k s t  St S(   N(   R   R   (   RM   Re   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   __ne__z  s    c         C   s   t  |  |  S(   N(   t   getattr(   RM   t   key(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   __getitem__  s    c         C   s<   | s
 d St |  j | j  } | d k r/ t St |  |  S(   s<    Compare package to another one, only rpm-version equality. i    N(   R:   R   R*   R   R   (   RM   Re   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   verEQ  s    c         C   s   | s
 d S|  j |  S(   s>    Compare package to another one, only rpm-version inequality. N(   R:   R   (   RM   Re   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   verNE  s    c         C   s   |  j  |  d k  S(   s;    Uses verCMP, tests if the other _rpm-version_ is <  ours. i    (   R   (   RM   Re   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   verLT  s    c         C   s   |  j  |  d k S(   s;    Uses verCMP, tests if the other _rpm-version_ is <= ours. i    (   R   (   RM   Re   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   verLE  s    c         C   s   |  j  |  d k S(   s;    Uses verCMP, tests if the other _rpm-version_ is >  ours. i    (   R   (   RM   Re   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   verGT  s    c         C   s   |  j  |  d k S(   s;    Uses verCMP, tests if the other _rpm-version_ is >= ours. i    (   R   (   RM   Re   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   verGE  s    c         C   s)   d |  j  j t |   t t |    f S(   Ns   <%s : %s (%s)>(   t	   __class__RR   t   strt   hexR4   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   __repr__  s    c         C   s&   t  j d t j d d t |  |  S(   Ns8   returnSimple() will go away in a future version of Yum.
t
   stackleveli   (   t   warningst   warnt   Errorst   YumFutureDeprecationWarningR   (   RM   t   varname(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   returnSimple  s    	c         C   s   |  j  S(   N(   Rq   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   returnChecksums  s    c         C   s
   |  j    S(   N(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s1   x* |  j  D] \ } } } | r
 | | f Sq
 Wd  S(   N(   t	   checksums(   RM   t   csumtypet   csumt   csumid(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   returnIdSum  s    (7   RR   RS   RT   RN   Rt   Rm   R   Ru   t   ui_nevraRx   t   ui_evrR{   t   ui_evraR~   t   ui_nevrR   t   naR   Rv   R   Ry   R   Rw   R   Rz   R   R|   R   Rs   R   R}   R   R0   R   t   envrR   R/   Ri   R   R   Rf   R   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRo      sh   																																				t   -t   YumNotFoundPackagec           B   s5   e  Z d    Z d   Z e d d    Z d   Z RS(   c         C   su   | d |  _  | d |  _ | d |  _ | d |  _ | d |  _ | |  _ d |  _ g  |  _ t |  _	 t j
 |  _ d  S(   Ni    i   i   i   i   (   R*   Rp   R   R   R   R   t   sizeRq   t   _not_found_repoR3   R4   R_   (   RM   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRN     s    				c         C   s   |  j  S(   s    This just returns '-' (   R_   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _ui_from_repo  s    Rk   c         C   s
   |  j    S(   N(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   t  S(   s^   check the package checksum vs the localPkg
           return True if pkg is good, False if not(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   verifyLocalPkg  s    (   RR   RS   RN   R   Rm   t   ui_from_repoR   (    (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR     s   		t   RpmBasec           B   sE  e  Z d  Z d   Z d   Z d   Z d   Z d   Z e d  Z	 d   Z
 d   Z d	   Z d
   Z d   Z d e d  Z e d  Z d   Z d   Z d d  Z e d d    Z e d d    Z e d d    Z e d d    Z e d d    Z e d d    Z e d d    Z e d d    Z e d d    Z e d d    Z e d d    Z e d d    Z  e d d     Z! e d d!    Z" e d d"    Z# e d d#    Z$ e d d$    Z% e d d%    Z& e d d&    Z' e d d'    Z( d(   Z) e d d)    Z* d*   Z+ d+ d,  Z, RS(-   s2   return functions and storage for rpm-specific datac         C   s   i  |  _  g  |  j  d <g  |  j  d <g  |  j  d <g  |  j  d <i  |  _ g  |  j d <g  |  j d <g  |  j d <g  |  _ g  |  _ d  |  _ d  S(   Nt	   obsoletest	   conflictst   requirest   providest   filet   dirt   ghost(   t   prcot   filest
   _changelogt   licensesR:   t   _hash(   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRN     s    				c         C   s:   | s
 t  S|  j | j k r  t  S|  j | j k r6 t  St S(   N(   R   R   R_   R   (   RM   Re   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR     s    c         C   s   |  | k s t  St S(   N(   R   R   (   RM   Re   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR     s    c         C   s   t  |  j |  j |  j  S(   N(   t
   PackageEVRR   R   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt	   returnEVR  s    c         C   sY   |  j  d  k rR d |  j j |  j |  j |  j |  j |  j f } t	 |  |  _  n  |  j  S(   Ns   %s - %s:%s-%s-%s.%s(
   R   R:   R3   R4   R   R*   R   R   Rp   Rg   (   RM   t   mystr(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRh     s
    c         C   s`   |  j  j | g   } | r\ g  } x4 | D], } | d s> q( n  | j t j |   q( W| S| S(   s9   return list of provides, requires, conflicts or obsoletesi    (   R   R   R    R=   t   prco_tuple_to_string(   RM   t   prcotypet	   printablet   prcost   resultsR   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt
   returnPrco  s    
c         C   s>  | |  j  k r d St |  j  |  d k rF | |  j  | k r d Sn~ t |  d  s} i d	 d 6d	 d 6d	 d 6d	 d 6|  _ n  |  j | d	 k r t |  j  |  |  j | <n  | |  j | k r d S| \ } } \ } } } | d	 k	 r |  j | |  Sx? |  j |  D]. \ } }	 \ }
 } } t j	 | |  rd SqWd S(
   sB   returns 1 or 0 if the pkg contains the requested tuple/tuple rangei    i   i   t   _prco_lookupR   R   R   R   N(
   R   t   lenR   R:   R   t   sett   inPrcoRangeR   t   i18nt   str_eq(   RM   R   t	   prcotuplet   reqnt   reqft   reqet   reqvt   reqrR%   t   fR'   R(   R)   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt	   checkPrco	  s&    (c         C   s   t  |  j | |   S(   s   returns true if the package has a the prco that satisfies 
           the reqtuple range, assume false.
           Takes: prcotype, requested prco tuple(   R;   t   matchingPrcos(   RM   R   t   reqtuple(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR   *  s    c      	   C   s-  | \ } } \ } } } g  } x|  j  |  D] \ }	 }
 \ } } } t j | |	  s^ q. n  |
 d k rs d }
 n  |
 d k r | d k r | d  k r |  j } n  | d  k r |  j } n  | d  k r |  j } q n  t j j	 | |	 |
 | | | f f  } | r. | j
 |	 |
 | | | f f  q. q. W| S(   Nt   =t   EQR   (   R   R   R   R:   R   R   t   relR   R   t   rangeCompareR    (   RM   R   R   R   R   R   R   R   t   resultR%   R   R'   R(   R)   RE   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR   0  s&    (		&c         C   s   |  j  d |  r t S| d j d  r t j | d  rE t } n t } x1 d D]& } | d |  j | |  k rR t SqR Wn  t S(   s   check to see if the package object provides for the requirement
           passed, including searching filelists if the requirement is a file
           depR   i    RV   R   R   R   (   s   files   dirs   ghost(   R   R   t
   startswithR=   t   re_primary_filenameR   t   returnFileEntries(   RM   R   t   pri_onlyt   ftype(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   provides_forM  s    	c         C   s   |  j  S(   s   return changelog entries(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   returnChangeloga  s    R   c         C   s{   |  j  rw | |  j  k rw | ri | d k r6 t j } n	 t j } g  |  j  | D] } | |  rM | ^ qM S|  j  | Sn  g  S(   s}   return list of files based on type, you can pass primary_only=True
           to limit to those files in the primary repodataR   (   R   R=   t   re_primary_dirnameR   (   RM   R   t   primary_onlyt   matcht   fn(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR   e  s    		*c         C   s   | r g  } xp |  j  j   D]_ } | d k r: t j } n	 t j } x( |  j  | D] } | |  rQ PqQ qQ Wq | j |  q W| S|  j  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 repodataR   (   R   R?   R=   R   R   R    (   RM   R   R   R   R   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   returnFileTypess  s    	c         C   sf   t  |  d |  sU g  |  j |  D] \ } } } | ^ q# } t |  d | |  n  t |  d |  S(   Nt   _cache_prco_names_(   R   R   t   setattrR   (   RM   R   R%   R   R(   t   data(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   returnPrcoNames  s    +c         C   s    t  j d t j d d |  j S(   Ns<   getProvidesNames() will go away in a future version of Yum.
R   i   (   R   R   R   t   YumDeprecationWarningt   provides_names(   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   getProvidesNames  s    	R   c         C   s@   t  j d t j d d |  j r< | |  j k r< |  j | Sg  S(   Ns_   simpleFiles() will go away in a future version of Yum.Use returnFileEntries(primary_only=True)
R   i   (   R   R   R   R   R   (   RM   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   simpleFiles  s
    	Rk   c         C   s   |  j  d d  S(   NR   R   (   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j  d d  S(   NR   R   (   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j  d d  S(   NR   R   (   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j  d  S(   NR   (   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j  d  S(   Nt   strong_requires(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j  d  S(   NR   (   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j  d  S(   NR   (   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j  d  S(   NR   (   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j  d  S(   NR   (   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j  d  S(   NR   (   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j  d  S(   NR   (   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j  d  S(   NR   (   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j  d  S(   NR   (   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j  d t  S(   NR   (   R   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j  d t  S(   NR   (   R   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j  d t  S(   NR   (   R   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j  d t  S(   NR   (   R   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j  d t  S(   NR   (   R   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s
   |  j    S(   N(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s
   |  j    S(   N(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   t  |  d  r |  j St  |  d  rq |  j rq t j j |  j  \ } } } } } | |  j k rq | |  _ | Sn  |  j |  _ |  j S(   s\    Return the "base name" of the package, atm. we can only look at
            the sourcerpm. t   _base_package_name_rett	   sourcerpm(   R   R   R   R   R   t   splitFilenameR*   (   RM   R%   R(   R)   R'   R&   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _getBaseName  s    $	c         C   s
   |  j    S(   N(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j  j j   S(   sb    Is calling pkg.returnFileEntries(primary_only=True) faster than
            using searchFiles(). (   R3   Rd   RO   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRO     s    i    c         C   s}   |  j  d |  j |  j |  j f f } g  } xL | D]D } | j d |  r1 | j |  | ru t |  | k ru Pqu q1 q1 W| S(   s    Returns list of obsoleters that obsolete this package. Note that we
            don't do obsoleting loops. If limit is != 0, then we stop after
            finding that many. R   R   (   R*   R   R   R   R   R    R   (   RM   t
   obsoleterst   limitt   provtupR   t   obspo(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   obsoletedBy  s    $(-   RR   RS   RT   RN   R   R   R   Rh   R   R   R   R   R   R   R   R   R   R   R   R   Rm   t   filelistt   dirlistt	   ghostlistR   R   R   R   R   R   t   requires_namest   strong_requires_namest   conflicts_namest   obsoletes_namest   provides_printt   requires_printt   strong_requires_printt   conflicts_printt   obsoletes_printt	   changelogt   EVRR   t   base_package_nameRO   R  (    (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR     sR   						!								R   c           B   sV   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 RS(	   s   
    A comparable epoch, version, and release representation. Note that you
    almost certainly want to use pkg.verEQ() or pkg.verGT() etc. instead.
    c         C   s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S(   N(   R   R   R   R   R   (   RM   R'   R(   R)   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRN     s
    				c         C   s7   t  j j |  j |  j |  j f | j | j | j f  S(   N(   R   R   R   R   R   R   (   RM   Re   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   compare  s    c         C   s   |  j  |  d k  r t St S(   Ni    (   R  R   R   (   RM   Re   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   __lt__  s    c         C   s   |  j  |  d k r t St S(   Ni    (   R  R   R   (   RM   Re   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   __gt__  s    c         C   s   |  j  |  d k r t St S(   Ni    (   R  R   R   (   RM   Re   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   __le__  s    c         C   s   |  j  |  d k r t St S(   Ni    (   R  R   R   (   RM   Re   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   __ge__  s    c         C   s   t  |  |  S(   N(   R   (   RM   Re   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR     s    c         C   s   |  | k s t  St S(   N(   R   R   (   RM   Re   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR     s    (   RR   RS   RT   RN   R  R  R  R  R  R   R   (    (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR     s   							t   YumAvailablePackagec           B   s  e  Z d  Z d( d  Z d   Z e d d    Z d   Z d   Z	 d   Z
 d   Z d	   Z d
   Z e d d    Z e e  Z e d    Z d   Z e e  Z d   Z e e  Z d   Z e e  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e d    Z d   Z d   Z  d   Z! d   Z" d   Z# d   Z$ d   Z% d   Z& e' d   Z( d!   Z) d"   Z* d#   Z+ d$   Z, d%   Z- d& d'  Z. RS()   s}   derived class for the  packageobject and RpmBase packageobject yum
       uses this for dealing with packages in a repositoryc         C   s   t  j |   t j |   | j |  _ | |  _ d  |  _ t |  _	 d  |  _
 | d  k r~ |  j |  |  j |  _ |  j |  _ n  |  j |  j |  j |  j |  j f |  _ d  S(   N(   Ro   RN   R   R4   R_   R3   R:   t   stateR   t   _loadedfilest   _verify_local_pkg_cachet   importFromDictR   R   R   R   R*   Rp   R   R   (   RM   R3   R#   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRN     s    				c         C   s   |  j  d k r d |  j k r d } |  j j d k	 rp d |  j k rp |  j j |  j j k rp d |  j j } n  d |  j j | S|  j  S(   s   This reports the repo the package is from, we integrate YUMDB info.
            for RPM packages so a package from "fedora" that is installed has a
            ui_from_repo of "@fedora". Note that, esp. with the --releasever
            option, "fedora" or "rawhide" isn't authoritative.
            So we also check against the current releasever and if it is
            different we also print the YUMDB releasever. This means that
            installing from F12 fedora, while running F12, would report as
            "@fedora/13". R   t	   from_repoRX   t
   releaseverRV   t   @N(   R_   t
   yumdb_infot   rpmdbR  R:   R  (   RM   t   end(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR     s    	Rk   c         C   s
   |  j    S(   N(   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   .  s    c         C   s   |  j  j j |   d S(   s   remove self from package sackN(   R3   Rd   RQ   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   exclude0  s    c         C   sH   |  j  d k r. d |  j  |  j |  j f } n d |  j |  j f } | S(   sA   returns a printable version string - including epoch, if it's setRr   s   %s:%s-%ss   %s-%s(   R   R   R   (   RM   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR   4  s    c         C   s#   |  j    } d |  j |  j | f S(   Ns   %s.%s %s(   R   R*   Rp   (   RM   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   compactPrint=  s    c         C   s   |  j  S(   N(   t   packagesize(   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _sizeA  s    c         C   s   |  j  S(   N(   t   relativepath(   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _remote_pathD  s    c         C   s\   |  j  } | r? | d d k r, | d } n  t j | |  j  St j |  j j d |  j  S(   s   returns a URL that can be used for downloading the package.
        Note that if you're going to download the package in your tool,
        you should use self.repo.getPackage.iRV   i    (   t   basepatht   urlparset   urljoint   remote_pathR3   t   urls(   RM   t   base(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _remote_urlG  s    	c         C   s
   |  j    S(   N(   R&  (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   S  s    c         C   s
   |  j    S(   N(   R/  (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   U  s    c         C   s   t  |  d  r |  j St |  j  s8 |  j |  _ |  j S|  j d d } t j | d d } | j d d  } | j d  } | d k r | d | d !} n  | |  _ |  j S(	   sD   Returns the name of the last person to do a commit to the changelog.t   _committer_reti    i   t   errorst   replacet   asciis   > i(	   R   R0  R   R  t   packagerR=   t
   to_unicodet   encodet   find(   RM   t   valt   ix(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt
   _committerW  s    	c         C   sS   t  |  d  r |  j St |  j  s8 |  j |  _ |  j S|  j d d |  _ |  j S(   s5   Returns the time of the last commit to the changelog.t   _committime_reti    (   R   R;  R   R  t	   buildtime(   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _committimen  s    c         C   s   |  j  d d S(   s   Returns the 'default' checksumi    i   (   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt	   _checksum~  s    c         C   sd   |  j  d  k r d  St j |  j   \ } } } } } | d k r` t |  d k rV d St |  Sd  S(   NR   i    (   R)  R:   R*  t   urlsplitR   t   int(   RM   t   schemet   netlocRZ   t   queryt   fragid(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt
   getDiscNum  s    !
c         C   s_   |  j    } t j j   } y t j j | |  } Wn$ t j k
 rZ t j d |   n X| S(   Ns"   Package Header %s: RPM Cannot open(	   t   localPkgR   t   transactiont   initReadOnlyTransactionR   t   hdrFromPackageR   R   t	   RepoError(   RM   t   rpmfilet   tst   hdr(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   returnHeaderFromPackage  s    c         C   s   t  j j |  j    rk y# t j |  j    } | d } Wq{ t j t f k
 rg t j	 d |   q{ Xn t j	 d |   | S(   sT   returns an rpm header object from the package object's local
           header cachei    s   Package Header %s: Cannot opens    Package Header %s: Not Available(
   RY   RZ   t   existst   localHdrt   rpmt   readHeaderListFromFilet   errort
   IndexErrorR   RJ  (   RM   t   hlistRM  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   returnLocalHeader  s    c         C   sE   t  |  d  s> t j j |  j  } |  j j d | |  _ n  |  j S(   sB   return path to local package (whether it is present there, or not)t	   localpathRV   (   R   RY   RZ   R[   R,  R3   t   pkgdirRW  (   RM   t   rpmfn(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRF    s    c         C   sS   t  |  d  sL t j j |  j  } | d  d } |  j j d | |  _ n  |  j S(   sW   return path to local cached Header file downloaded from package 
           byte rangest   hdrpathis   .hdrRV   (   R   RY   RZ   R[   R,  R3   t   hdrdirRZ  (   RM   t   pkgnamet   hdrname(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRP    s
    c      	   C   s  y t  j |  j    } Wn t k
 r/ } t SXt |  d  r |  j r |  j } | j | j k r | j | j k r | j	 | j	 k r | j
 | j
 k r t Sn  |  j   \ } } y% t j | |  j   d |  j } Wn t j k
 r t SX| | k r t S| |  _ t S(   s^   check the package checksum vs the localPkg
           return True if pkg is good, False if notR  t   datasize(   RY   t   statRF  t   OSErrorR   R   R  t   st_inot   st_devt   st_mtimet   st_sizeR   R   R=   t   checksumR%  R   t	   MiscError(   RM   t   nstR'   t   ostt	   csum_typeR   t   filesum(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR     s,    			c         C   sw   t  d k r d St |  d  r, t |  d  S|  j   s< d Sy t  j |  j   d  } Wn d SXt |  d |  | S(   s    Get the user.xdg.origin.url value from the local pkg. ... if it's
            present. We cache this so we can access it after the file has been
            deleted (keepcache=False). t   __cached_localXattrUrls   user.xdg.origin.urlN(   t   xattrR:   R   R   R   R   RF  R   (   RM   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _localXattrUrl  s    c         C   s
   |  j    S(   N(   Rm  (   t   x(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s&   t  j d t j d d t j |  S(   s1   convert the prco tuples into a nicer human strings9   prcoPrintable() will go away in a future version of Yum.
R   i   (   R   R   R   R   R=   R   (   RM   t	   prcoTuple(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   prcoPrintable  s    	c         C   s   |  j  S(   s.   return a list of requires in normal rpm format(   R  (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   requiresList  s    c         C   s   |  j  |  j d f g S(   Ni   (   t   checksum_typet   pkgId(   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR     s    c         C   s  t  | d  rW | j \ } } } } } | |  _ | |  _ | |  _ | |  _ | |  _ n  t  | d  r | j d |  _ | j d |  _	 n  t  | d  r | j
 d |  _ | j
 d |  _ | j
 d |  _ n  t  | d	  r| j j d
  } | d k rd- } n  | |  _ | j d |  _ n  t  | d  rO| j d |  _ | j d |  _ n  t  | d  rx= d d d d d d d d g D] } t |  | | j |  q}W|  j j d d  |  _ |  j j | j d  n  t  | d  r6xT | j D]F }	 | j |	 }
 |
 |  j k rg  |  j |
 <n  |  j |
 j |	  qWn  t  | d  rx | j D] } x | j | D]r } | d } | j d  } | j d  } | j d   } | j d!  } |  j | j | | | | | f f  qcWqOWn  t  | d"  rLxZ | j D]L } | j d#  } | j d$  } | j d%  } |  j j | | | f  qWn  t  | d&  r| j  d' } | j  d$ } | j  d( } | d- k s| j!   d) k rd* } n! | j!   d+ k rd, } n d* } |  j" j | | | f  n  d- S(.   s^   handles an mdCache package dictionary item to populate out 
           the package informationR0   t   timet   buildR   R   t   packaget   archiveR   t   locationR.  RX   t   hreft   hdranget   startR"  t   infot   summaryt   descriptionR4  t   groupt	   buildhostR   t   urlt   vendors   
t   licenseR   R   R*   t   flagsR   R   R   R  t   datet   valuet   authorRe  t   typet   pkgidt   NOi    t   YESi   N(#   R   R0   R*   R   R   Rp   R   Rt  R<  t   filetimeR   R%  t   archivesizet   installedsizeRx  R   R:   R)  R'  Rz  t   hdrstartt   hdrendR   R|  R}  R2  R   R    R   R   R  R   Re  t   upperRq   (   RM   R#   R%   R'   R(   R)   R&   R  R1   R   R   t   rtypet   rdictR*   R   t   cdictR  t   textR  t   ctypeR   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR     sx    						
1 		c         C   s\   t  j j |  j  } t  j j |  j  } d t j | d t t j | d t f } | S(   Ns$   <location xml:base="%s" href="%s"/>
t   attrib(   RY   RZ   t   dirnamet
   remote_urlR[   R=   t   to_xmlR   (   RM   R.  Ry  t   msg(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _return_remote_locationS  s
    +c         C   s   d } } |  j  r( t j |  j   } n  |  j rF t j |  j  } n  |  j d \ } } } d |  j |  j |  j |  j |  j	 | | t j |  j
  t j |  j  | | |  j |  j |  j |  j |  j f } | |  j   7} | S(   NRX   i    s3  
  <name>%s</name>
  <arch>%s</arch>
  <version epoch="%s" ver="%s" rel="%s"/>
  <checksum type="%s" pkgid="YES">%s</checksum>
  <summary>%s</summary>
  <description>%s</description>
  <packager>%s</packager>
  <url>%s</url>
  <time file="%s" build="%s"/>
  <size package="%s" installed="%s" archive="%s"/>
(   R4  R=   R  R  R   R*   Rp   R   R   R   R}  R~  R  R<  R%  R  R  R  (   RM   R4  R  Ri  R   R   R  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _dump_base_items[  s    
			c         C   s  d } |  j  r, | d t j |  j   7} n
 | d 7} |  j r\ | d t j |  j  7} n
 | d 7} |  j r | d t j |  j  7} n
 | d 7} |  j r | d t j |  j  7} n
 | d	 7} |  j r | d
 t j |  j  7} n
 | d 7} | d |  j |  j f 7} | |  j	 d  7} | |  j
   7} | |  j	 d  7} | |  j	 d  7} | |  j t  7} | d d k r| d 7} n  | d 7} | S(   Ns     <format>
s"       <rpm:license>%s</rpm:license>
s       <rpm:license/>
s        <rpm:vendor>%s</rpm:vendor>
s       <rpm:vendor/>
s       <rpm:group>%s</rpm:group>
s       <rpm:group/>
s&       <rpm:buildhost>%s</rpm:buildhost>
s       <rpm:buildhost/>
s&       <rpm:sourcerpm>%s</rpm:sourcerpm>
s       <rpm:sourcerpm/>
s+       <rpm:header-range start="%s" end="%s"/>R   R   R   is   
s     </format>(   R  R=   R  R  R  R  R   R  R  t	   _dump_pcot   _dump_requirest   _dump_filesR   (   RM   R  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _dump_format_itemsx  s6    	
	
	
	
	

c   
      C   s1  d } t  |  |  } | r( d | } n  x t |  D] \ } } \ } } } d t j | d t }	 | r |	 d t j | d t 7}	 | r |	 d t j | d t 7}	 n  | r |	 d t j | d t 7}	 n  | r |	 d t j | d t 7}	 q n  |	 d	 7}	 | |	 7} q5 W| r-| d
 | 7} n  | S(   NRX   s   
    <rpm:%s>
s         <rpm:entry name="%s"R  s    flags="%s"s    epoch="%s"s	    ver="%s"s	    rel="%s"s   />
s       </rpm:%s>(   R   t   sortedR=   R  R   (
   RM   t   pcotypeR  t   mylistR*   R  R'   R(   R)   t	   pcostring(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR    s&     %  #
 c         C   s   g  } x: t  |  j d |   D]  } | j d t j |   q Wx: t  |  j d |   D]  } | j d t j |   q\ Wx: t  |  j d |   D]  } | j d t j |   q Wd j |  S(   NR   s   
  <file>%s</file>R   s   
  <file type="dir">%s</file>R   s   
  <file type="ghost">%s</file>RX   (   R  R   R    R=   R  R^   (   RM   t   primaryR  R   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR    s    c         C   s   t     d  S(   N(   t   NotImplementedError(   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _requires_with_pre  s    c         C   s  |  j    } d } | r! d } n  t |  d  r|  j rt d   |  } | rt | d t d t d  } | j   } t |  d k r | d j	 d  r | j   } n  g  } x@ | D]8 } | d j	 d	  r | | k r q n  | j
 |  q W| } qn  d } xt |  D]\ }	 }
 \ } } } } |	 j	 d
  rGqn  |	 |  j k s|	 j	 d  r|	 |  j k s|	 |  j k s|	 |  j k r|
 sqq|  j d |	 |
 | | | f f  rqqn  d t j |	 d t } |
 r|| d t j |
 d t 7} | r-| d t j | d t 7} n  | rS| d t j | d t 7} n  | r|| d t j | d t 7} q|n  | d k r| d | 7} n  | d 7} | | 7} | d 7} qW| r| d 7} n  | d k rd S| S(   s   returns deps in XML formatRX   s   
    <rpm:requires>
t   _collapse_libc_requiresc         S   s   |  d j  d  S(   Ni    s	   libc.so.6(   R   (   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    R   R   i    s   libc.so.6()s	   libc.so.6s   rpmlib(RV   R   s         <rpm:entry name="%s"R  s    flags="%s"s    epoch="%s"s	    ver="%s"s	    rel="%s"Rr   s	    pre="%s"s   />
i   s       </rpm:requires>(   Rr   i    (   R  R   R  t   filterR  R   R   t   popR   R   R    R   R  R  R  R   R=   R  R   (   RM   R  R  t   libc_requirest   restt   bestt   newlistt   it   usedR*   R  R'   R(   R)   t   pret
   prcostring(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR    s`     	%($	  #

 c   	      C   s   |  j  s d Sg  } | s% |  j  } n |  j  |  } d } d } x t |  D] \ } } } | | k ro d } n
 | d 7} | } | | 7} | j d t j | d t t j t |   t j |  f  qK Wd j |  S(   NRX   i    i   s2   
  <changelog author="%s" date="%s">%s</changelog>R  (   R  t   reversedR    R=   R  R   R   R^   (	   RM   t
   clog_limitR  t   clogst   last_tst   hack_tsRL  R  t   content(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _dump_changelog  s$    		

	$c         C   sL   d } | |  j    7} | |  j   7} | d 7} t |  t k sH t  | S(   Ns   
<package type="rpm">s   
</package>(   R  R  R  R   t   AssertionError(   RM   R  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   xml_dump_primary_metadata  s    
c         C   sS   d |  j  |  j |  j |  j |  j |  j |  j   f } t |  t k sO t	  | S(   Ns`   
<package pkgid="%s" name="%s" arch="%s">
  <version epoch="%s" ver="%s" rel="%s"/>%s
</package>(
   Re  R*   Rp   R   R   R   R  R  R   R  (   RM   R  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   xml_dump_filelists_metadata  s
    i    c      	   C   sV   d |  j  |  j |  j |  j |  j |  j |  j |  f } t |  t k sR t	  | S(   Ns`   
<package pkgid="%s" name="%s" arch="%s">
  <version epoch="%s" ver="%s" rel="%s"/>%s
</package>(
   Re  R*   Rp   R   R   R   R  R  R   R  (   RM   R  R  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   xml_dump_other_metadata#  s
    N(/   RR   RS   RT   R:   RN   R   Rm   R   R#  R   R$  R&  R(  R/  R   R,  R  R:  t	   committerR=  t
   committimeR>  Re  RE  RN  RV  RF  RP  R   Rm  t   xattr_origin_urlRp  Rq  R   R  R  R  R  R  R   R  R  R  R  R  R  R  (    (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR  	  sT   												
						#					S			(	
		7			
c         C   s   |  | p |  d | S(   sX    Rpm returns None, for certain sizes. And has a "longsize" for the real
        values. t   long(    (   RM  R   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _rpm_long_size_hack0  s    t   YumHeaderPackagec           B   s   e  Z d  Z d   Z d   Z d   Z e d    Z d   Z e d    Z	 d   Z
 e d  Z d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d e d  Z d   Z d   Z d   Z d   Z d   Z RS(   s'   Package object built from an rpm headerc         C   s{  t  j |  |  | |  _ t j |  j d  |  _ |  j d } | sN d } n  t j |  |  _ t j |  j    |  _ t j |  j d  |  _	 t j |  j d  |  _
 |  j	 |  _ |  j
 |  _ |  j |  j |  j |  j	 |  j
 f |  _ d
 |  _ d
 |  _ |  j t j |  _ |  j s;d |  j d |  j d f |  _ n  t |  j d  |  _ t |  j d	  |  _ i  |  _ t |  _ d
 S(   sG   hand in an rpm header, we'll assume it's installed and query from thereR*   Rp   t   noarchR   R   s   %s.%sR<  R  R   N(   R  RN   RM  R=   t
   share_dataR*   Rp   t   doepochR   R   R   R   R   R   R:   t   _loaded_summaryt   _loaded_descriptionRQ  t   RPMTAG_SHA1HEADERR  R  R%  R  t   _YumHeaderPackage__mode_cacheR   t    _YumHeaderPackage__prcoPopulated(   RM   R3   RM  t   this_a(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRN   9  s,    		'			$	c         C   s#   d t  j t j j |  j     S(   Ns   file://(   t   urllibt   quoteRY   RZ   t   abspathRF  (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR/  T  s    c         C   sS   |  j  d  k rL |  j   d p" d } t j | j d d   } | |  _  n  |  j  S(   NR}  RX   s   
(   R  R:   t   _get_hdrR=   R  R2  (   RM   R}  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _loadSummaryW  s
    c         C   s
   |  j    S(   N(   R  (   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   ^  s    c         C   sG   |  j  d  k r@ |  j   d p" d } t j |  } | |  _  n  |  j  S(   NR~  RX   (   R  R:   R  R=   R  (   RM   R~  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _loadDescription`  s
    c         C   s
   |  j    S(   N(   R  (   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   f  s    c         C   s`   |  j  d k r4 d |  j |  j |  j |  j f } n( d |  j  |  j |  j |  j |  j f } | S(   NRr   s   %s-%s-%s.%ss   %s:%s-%s-%s.%s(   R   R*   R   R   Rp   (   RM   R8  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRi   h  s    c         C   s2   |  j  s |  j   t |  _  n  t j |  | |  S(   N(   R  t   _populatePrcoR   R  R   (   RM   R   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR   q  s    	
c         C   s   |  j  S(   N(   RM  (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR  w  s    c         C   s  i t  j d  d 6t  j d  d 6t  j d  d 6t  j d  d 6} |  j   } x| D]} | t t d	 |  } t t  j |  } | s qY n  | t t d
 |  } | d k r t j t j B} g  | D] } t | | @ ^ q } n  t t	 j
 j |  } t t  j |  } | t t d |  } t t	 j
 j |  }	 t d   |	  }	 | | }
 t t  j t | | |	   |  j |
 <| d k rY t | |  j |
  } g  | D] } | d s| d ^ q} | |  j d <qY qY Wd S(   s;   Populate the package object with the needed PRCO interface.R   t   OBSOLETER   t   CONFLICTR   t   REQUIRER   t   PROVIDEs   RPMTAG_%sNAMEs   RPMTAG_%sFLAGSs   RPMTAG_%sVERSIONc         S   s4   t  j |  d  t  j |  d  t  j |  d  f S(   Ni    i   i   (   R=   R  (   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    i    i   R   N(   R=   R  R  R   RQ  t   mapt   RPMSENSE_SCRIPT_PREt   RPMSENSE_SCRIPT_POSTR;   R   R   R   R   t   zipR   (   RM   t   tag2prcoRM  t   tagR*   t   lstt   bitst   flagt   weakreqst   versR   t   wreqt
   strongreqs(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR  z  s4    &		
%'c         C   sR   t  j d t j d d y t |  |  SWn! t k
 rM t j d |  n Xd  S(   Ns6   tagByName() will go away in a furture version of Yum.
R   i   s   Unknown header tag %s(   R   R   R   R   R   t   AttributeErrorRf  (   RM   R  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt	   tagByName  s    	c         C   s   | j  d  r4 | j d  r4 t d |  | f  n  y |  j | SWnG t k
 ri t d |  | f  n$ t k
 r t d |  | f  n Xd  S(   Nt   __s   %s has no attribute %s(   R   R\   R  RM  t   KeyErrorRB   (   RM   t   thing(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   __getattr__  s    c         C   s2   |  j  d } | d  k r" d } n t |  } | S(   NR   Rr   (   RM  R:   R   (   RM   t   tmpepochR   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR    s
    	c         C   s   |  j  S(   N(   RM  (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRV    s    c   	      C   s<  |  j  d } |  j  d } |  j  d } t | | |  } |  j s8x | D] \ } } } | d  k sp | d k r d |  j k r g  |  j d <n  |  j d j |  qI n  | |  j k r t j |  |  j | <n  d } |  j | r d } n | d  k	 r| d @rd } n  |  j j	 | g   j |  qI Wt
 |  _ n  d  S(	   Nt	   filenamest	   fileflagst	   filemodesRX   R   R   i@   R   (   RM  R  R  R:   R   R    R  R_  t   S_ISDIRt
   setdefaultR   (	   RM   R   R  R  t	   filetupleR   t   modeR  t   fkey(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt
   _loadFiles  s(    			 R   c         C   s   |  j    t j |  | |  S(   s"   return list of files based on type(   R  R  R   (   RM   R   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR     s    
c         C   sB   t  |  j d  d k r> t |  j d |  j d |  j d  Sg  S(   Nt   changelognamei    t   changelogtimet   changelogtext(   R   RM  R  (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR     s
    
c         C   s   t     d  S(   N(   R  (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR     s    c         C   s   t  |  j d  S(   NR   (   R  RM  (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR&    s    c         C   s2   | d k	 r. | t j t j Bt j B@r. d Sn  d S(   sn   check the flags for a requirement, return 1 or 0 whether or not requires
           is a pre-requires or a noti   i    N(   R:   RQ  t   RPMSENSE_PREREQR  R  (   RM   R  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _is_pre_req  s    c         C   s   |  j  t j } |  j  t j } t t |  } t |  j |  } |  j  t j } t t |  } | d k	 r t
 | | | |  } n  t j |  } | S(   s%   returns requires with pre-require bitN(   RM  RQ  t   RPMTAG_REQUIRENAMEt   RPMTAG_REQUIREFLAGSR  R   R  t   RPMTAG_REQUIREVERSIONR   R:   R  R=   RA   (   RM   R*   R  R  R  R  R  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR     s    (   RR   RS   RT   RN   R/  R  Rm   R}  R  R~  Ri   R   R   R  R  R  R  R  RV  R  R   R   R   R&  R  R  (    (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR  7  s,   								$							
			t   _CountedReadFilec           B   s    e  Z d  Z d   Z d   Z RS(   s    Has just a read() method, and keeps a count so we can find out how much
        has been read. Implemented so we can get the real size of the file from
        prelink. c         C   s   | |  _  d |  _ d  S(   Ni    (   t   fpt	   read_size(   RM   R  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRN     s    	c         C   s+   |  j  j |  } |  j t |  7_ | S(   N(   R  t   readR   R   (   RM   R   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR    s    (   RR   RS   RT   RN   R  (    (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR    s   	t   _PkgVerifyProbc           B   s#   e  Z d  Z e d  Z d   Z RS(   s8    Holder for each "problem" we find with a pkg.verify(). c         C   s:   | |  _  | |  _ d  |  _ d  |  _ | |  _ | |  _ d  S(   N(   R  t   messageR:   t   database_valuet
   disk_valuet
   file_typest   fake(   RM   R  R  t   ftypesR  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRN     s    					c         C   s  | d  k r d Si 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 6} t | |  j | | j  } | sxu d d d g D]a } t |  |  } t | |  } | d  k r | d  k s t  q n  t | |  } | r Pq q Wn  | S(   Ni   R  i   t   symlinki   Re  i   R   t   useri   R  i   R  i   t   genchecksumi   t   mtimei	   t   missingi
   s   permissions-missingi   R  i   t	   missingoki   R   R  R  R  (   R:   R   R  R   R  (   RM   Re   t	   type2sortR   t   attrRn  t   y(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRf   &  s$    (   RR   RS   RT   R   RN   Rf   (    (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR    s   i   i   i   i   i   i   i   i   i   t   YUMVerifyPackageFilec           B   sg  e  Z d    Z d  d  Z e d d   d d   d d    Z e d d   d d	   d d
    Z e d d   d d   d d    Z e d d   d d   d d    Z	 e d d   d d   d d    Z
 e d d   d d   d d    Z e d d   d d   d d    Z d   Z e d d   d d   d d    Z e d    Z e d d    Z RS(!   c         C   ss   | |  _  d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _	 t
 |  _ t   |  _ d  |  _ d  S(   N(   t   filenameR:   t   readlinkR  t   devR
  R  R  t   digestR   R   t   verify_ftypeR   t   rpmfile_typet   rpmfile_state(   RM   R  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRN   G  s    										c         C   sM   | d  k r d | } n  d | } t |  | |  t |  | | d  k	  d  S(   Nt   verify_t   _(   R:   R   (   RM   R  R8  t   vattr(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _setVerifiedAttrX  s
    
Rk   c         C   s   |  j  S(   N(   t	   _readlink(   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   _  s    t   fdelc         C   s   t  |  d d   S(   NR  (   R   R:   (   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   `  s    t   fsetc         C   s   |  j  d |  S(   NR  (   R  (   Rn  R  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   a  s    c         C   s   |  j  S(   N(   t   _mtime(   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   b  s    c         C   s   t  |  d d   S(   NR  (   R   R:   (   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   c  s    c         C   s   |  j  d |  S(   NR  (   R  (   Rn  R  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   d  s    c         C   s   |  j  S(   N(   t   _dev(   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   e  s    c         C   s   t  |  d d   S(   NR  (   R   R:   (   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   f  s    c         C   s   |  j  d |  S(   NR  (   R  (   Rn  R  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   g  s    c         C   s   |  j  S(   N(   t   _user(   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   h  s    c         C   s   t  |  d d   S(   NR
  (   R   R:   (   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   i  s    c         C   s   |  j  d |  S(   NR
  (   R  (   Rn  R  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   j  s    c         C   s   |  j  S(   N(   t   _group(   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   k  s    c         C   s   t  |  d d   S(   NR  (   R   R:   (   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   l  s    c         C   s   |  j  d |  S(   NR  (   R  (   Rn  R  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   m  s    c         C   s   |  j  S(   N(   t   _digest(   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   o  s    c         C   s   t  |  d d   S(   NR  (   R   R:   (   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   p  s    c         C   s   |  j  d |  S(   NR  (   R  (   Rn  R  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   q  s    c         C   s   |  j  S(   N(   R&  (   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   r  s    c         C   s   t  |  d d   S(   NR   (   R   R:   (   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   s  s    c         C   s   |  j  d |  S(   NR   (   R  (   Rn  R  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   t  s    c         C   s<   | d  k	 |  _ | d  k	 |  _ d | } t |  | |  d  S(   NR  (   R:   t   verify_modeR  R   (   RM   R  R8  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _setVerifiedModev  s    
c         C   s   |  j  S(   N(   t   _mode(   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   |  s    c         C   s   t  |  d d   S(   NR  (   R   R:   (   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   }  s    c         C   s   |  j  d |  S(   NR  (   R'  (   Rn  R  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   ~  s    c         C   sv   t  j |   r d St  j |   r& d St  j |   r9 d St  j |   rL d St  j |   r_ d St  j |   rr d Sd S(   s5    Given a "mode" return the name of the type of file. R   t	   directoryR	  t   fifos   character devices   block devices	   <unknown>(   R_  t   S_ISREGR  t   S_ISLNKt   S_ISFIFOt   S_ISCHRt   S_ISBLK(   R  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _ftype  s          c         C   s   |  j  |  j  S(   N(   R0  R  (   Rn  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    N(   RR   RS   RN   R:   R  Rm   R  R  R  R
  R  R  R   R'  R  t   staticmethodR0  R   (    (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR  F  s:   										t   _RPMVerifyPackageFilec           B   s   e  Z e d   Z RS(   c         C   s  t  j |  | d  | d } | r- d } n
 | d } | t @rQ | d |  _ n  | t @t Br | d } | d k  r | d @} n  | |  _ | t @s t |  _ n  | t @s t |  _	 q n  | t
 @r | d |  _ n  | t @r | d	 |  _ n  t   |  _ } | t j @r| j d
  n  | t j @r8| j d  n  | t j @rU| j d  n  | t j @rr| j d  n  | t j @r| j d  n  | t j @r| j d  n  | t j @r| j d  n  | d }	 i d t j 6d t j 6d t j 6d t j 6d t j 6}
 |	 |
 k r'|
 |	 |  _ n	 d |  _ | t @rJ| d |  _ n  | t  @rd| d |  _! n  | t" @r| | d f |  _# n  |  j$ d k r| t% @r| j&   |  _' n | t% @rd |  _' n  d  S(   Ni    i   ii	   i   i   i  i   i   t   configurationt   documentationR   R  s
   public keyt   READMEs
   missing oki   t   normalt   replaceds   not installeds   wrong colort	   netshareds	   <unknown>i
   i   i   R	  RX   ((   R  RN   t   _RPMVERIFY_FILESIZER   t   _RPMVERIFY_RDEVt   _RPMVERIFY_MODER  R   R&  R  t   _RPMVERIFY_MTIMER  R  R   t   rpmfile_typesRQ  t   RPMFILE_CONFIGt   addt   RPMFILE_DOCt   RPMFILE_GHOSTt   RPMFILE_LICENSEt   RPMFILE_PUBKEYt   RPMFILE_READMEt   RPMFILE_MISSINGOKt   RPMFILE_STATE_NORMALt   RPMFILE_STATE_REPLACEDt   RPMFILE_STATE_NOTINSTALLEDt   RPMFILE_STATE_WRONGCOLORt   RPMFILE_STATE_NETSHAREDR  t   _RPMVERIFY_USERR
  t   _RPMVERIFY_GROUPR  t   _RPMVERIFY_DIGESTR  R   t   _RPMVERIFY_LINKTOt   FLinkR  (   RM   t   fiR  Ri  t   override_vflagsR  t   vflagsR  R=  R  t   statemap(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRN     sl    
	


	







	



(   RR   RS   R   RN   (    (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR2    s   t   YUMVerifyPackagec           B   sM   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   s,    A holder for YUMVerifyPackageFile objects. c         C   s   | |  _  i  |  _ d  S(   N(   t   pot   _files(   RM   RU  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRN     s    	c         C   s   | |  j  k S(   sp    Note that this checks if a filename is part of the package, and
            not a full YUMVerifyPackageFile(). (   RV  (   RM   t   fname(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   __contains__  s    c         c   s$   x |  j  D] } |  j  | Vq
 Wd  S(   N(   RV  (   RM   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   __iter__  s    c         C   s   | |  j  | j <d  S(   N(   RV  R  (   RM   t   vpf(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR?    s    c         C   s   |  j  | j =d  S(   N(   RV  R  (   RM   RZ  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   remove  s    c         C   s$   | j  |  k r d  S|  j |  d  S(   N(   R  R[  (   RM   RZ  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   discard  s    c         C   s   i  |  _  d  S(   N(   RV  (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   clear  s    (
   RR   RS   RT   RN   RX  RY  R?  R[  R\  R]  (    (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRT    s   						t   _RPMVerifyPackagec           B   sG   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C   s)   t  j |  |  | | | | f |  _ d  S(   N(   RT  RN   t	   _presetup(   RM   RU  RP  t   def_csum_typet   patternst   all(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRN     s    c         C   s  t  |  d  s d  S|  j \ } } } } |  ` i  } x | D] } | d } | r t } xo | D]g }	 |	 t k r} t |	 }
 n( |	 | k r | |	 }
 n t j |	  }
 |
 | |	 <|
 |  r^ t } Pq^ q^ W| s q; q n  |  j t | | | |   q; W| r| a n  d  S(   NR_  i    (	   R   R_  R   t   _last_fnmatchR=   R@   R   R?  R2  (   RM   RP  R`  Ra  Rb  t   _this_fnmatcht   ftR   RE   t   pR   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _setup  s0    

	 c         O   s   |  j    t j |  | |  S(   N(   Rg  RT  RX  (   RM   t   argst   kwargs(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRX    s    
c         O   s   |  j    t j |  | |  S(   N(   Rg  RT  RY  (   RM   Rh  Ri  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRY    s    
c         O   s   |  j    t j |  | |  S(   N(   Rg  RT  R?  (   RM   Rh  Ri  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR?  "  s    
c         O   s   |  j    t j |  | |  S(   N(   Rg  RT  R[  (   RM   Rh  Ri  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR[  %  s    
c         O   s+   t  |  d  r |  ` n  t j |  | |  S(   NR_  (   R   R_  RT  R]  (   RM   Rh  Ri  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR]  )  s    	(	   RR   RS   RN   Rg  RX  RY  R?  R[  R]  (    (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR^    s   		 				R   t   YumInstalledPackagec        	   B   s;   e  Z d  Z d d  Z g  e e e e e d e d  Z RS(   s2   super class for dealing with packages in the rpmdbc         C   s2   t  j |  t |  | r. | j |   |  _ n  d  S(   N(   R  RN   t   _installed_repot   get_packageR   (   RM   RM  t   yumdb(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRN   4  s    c	   ,   %   C   sr	  |  j  j   }	 i  }
 d } t j j |  } d } t t d  rw |  j  t j } | rw | t k rt t | } qt qw n  t	 |  |	 | | |  } | d6 k	 r | |  } n  x| D]} | j } t | j  } | j d k r | j d | j  | r t d d | d t g |
 | <q q n  d	 | j k rW| rWt d
 d | d t g |
 | <n  d	 | j k rs| rsq n  d | j k r| rt d d | d t g |
 | <n  d | j k r| rq n  g  } t j j | j  rt j | j  } | j } y t j | t j  d } Wn$ t k
 r@} d | t j } n Xy t j | t j  d } Wn$ t k
 r} d | t j } n Xt j | j  } t  } | j! r| j" j# d  s| j# d  rt } n  | r| j" | k rt d d |  } | j" | _$ | | _% | j |  q| j& d @| j' d @k rt d d |  } t( | j& d @ | _$ t( | j' d @ | _% | j |  qn  | j) rd } | d k rt j* | j  } n  | | j* k rt d d |  } | j* | _$ | | _% | j |  qn  t } d | k rt  } n  | d k rO| j" d k rOt j | j  j } n | d k rdt  } n  t } | d k rt  } n  | r| j+ rt, | j-  t, | j.  k rt d d |  } | j. | _$ t, | j-  | _% | j |  n  | rA| j/ rA| | j0 k rAt d d |  } | j0 | _$ | | _% | j |  n  | r| j1 r| | j2 k rt d d |  } | j2 | _$ | | _% | j |  n  | j } | j3 }  d  }! d | k r| |! M} |  |! M}  n  | r#| j4 r#| |  k r#t d! d" |  } |  | _$ | j | _% | j |  n  | j5 }" | rQ| rQ| | j6 k rQt  }" n  | rf| rft  }" n  | j7 sxt  }" n  | rq|" s| j8 rq| rq| | j6 k rq| j7 r| j7 d }# | j7 d d# | j7 d$ }$ n | }# d }$ y' t9 j: |# | j  }% |# d# |% }% Wn t; j< k
 r&d6 }% n X| j5 rp|% d6 k rpt d% d& |  } |$ | _$ d6 | _% | j |  n  |% |$ k r| rt= | d' | j g d( d) d* t> d+ t> d, t> d- t }& |& j? |& j@ |& jA }' }( }) tB |(  }( t9 j: |# |(  }* |( jC r|* }% |# d# |% }% |( jC } qn  | j5 rq|% |$ k rq|% rqt d. d/ |  } |$ | _$ |% | _% | j |  qqn  | rT	| j8 rT	| | j6 k rT	t d0 d1 |  } | j6 | _$ | | _% | j |  qT	n y t j | j  t }+ Wn4 tD k
 r	} t }+ | jE tE jF k r	t  }+ q	n X|+ r5	t d2 d3 |  } n t d4 d5 |  } | j |  | r | |
 | j <q q W|
 S(7   s   verify that the installed files match the packaged checksum
           optionally verify they match only if they are in the 'pattern' list
           returns a tuple s   /usr/sbin/prelinkt   md5t   RPMTAG_FILEDIGESTALGOR6  s   state=R  s   state is not normalR  s
   missing okR  s   missing but okR   s
   ghost filei    s   uid %s not founds   gid %s not foundt   deviceR  s   file type does not matchi  s   dev does not matchRX   R	  s   symlink does not matchR   R  s   mtime does not matchR
  s   user does not matchR  s   group does not matchi  R  s   mode does not matcht   :i   R  s   checksum not availables   -yt   bufsizeit   stdint   stdoutt   stderrt	   close_fdsRe  s   checksum does not matchR   s   size does not matchR  s   file is missings   permissions-missings#   file is missing (Permission denied)N(G   RM  t   fiFromHeaderRY   RZ   RO  R   RQ  Ro  t   RPM_CHECKSUM_TYPESR^  R:   R  t   listR=  R  R    R  R   t   lexistst   lstatRd  t   pwdt   getpwuidR_  t   ST_UIDR  t   grpt   getgrgidt   ST_GIDR  R0  t   st_modeR   t
   verify_devR   R\   R  R  R  Rb  R   t   verify_readlinkR  t   verify_mtimeR@  Rc  R  t   verify_userR
  t   verify_groupR  R  R&  t   verify_digestR   R  t   verify_sizeR=   Re  R   Rf  R    R   Rs  Rt  Ru  R  R   R`  t   errnot   EACCES(,   RM   Ra  t   depst   scriptt   fake_problemsRb  t   fastt   callbackt   failfastRP  R   t   prelink_cmdt   have_prelinkRi  t   csum_numt   pfst   pfR   R  t   problemst   my_stt
   my_st_sizet   my_userR'   t   my_groupt   my_ftypeR  t   probt   my_fnlt   check_contentt   check_permst   my_modet   pf_modet	   perm_maskR  t   digest_typeR   t   my_csumRf  t   igR  t   ert   tcsumt   perms_ok(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   verify9  s^   																				
							
						
	N(   RR   RS   RT   R:   RN   R   R   R  (    (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRj  2  s
   	t   YumLocalPackagec           B   s   e  Z d  Z d d d  Z d   Z d   Z d d  Z e d d    Z	 d   Z
 d   Z d	   Z e d d
    Z e d d    Z d   Z RS(   s  Class to handle an arbitrary package from a file path
       this inherits most things from YumInstalledPackage because
       installed packages and an arbitrary package on disk act very
       much alike. init takes a ts instance and a filename/path 
       to the package.c         C   s  | d  k r t j j   } n  | d  k r9 t j d  n  d |  _ | |  _ d  |  _ y t j	 j
 | |  j  } Wn, t k
 r } t j d |  j | f  n Xt |  } d | _ t j |  | |  |  j |  _ t j |  j  |  _ t |  j d  |  _ t |  j d  |  _ |  j   |  _ |  j |  j |  j |  j |  j f |  _ d  |  _ d  |  _  t! j" d |  _# d  |  _$ d |  _% d  S(   Ns;   No Filename specified for YumLocalPackage instance creationt   locals%   Could not open local rpm file: %s: %si    ii   RX   (&   R:   R   RG  RH  R   Rf  t   pkgtypeRW  R>  R   RI  R   RU   t   costR  RN   R  R4   RY   R_  t   _statR   R  R%  t   isSrpmRp   R*   R   R   R   R   t	   _hdrstartt   _hdrendR=   t   _default_checksumsRr  t   _reldirt   _baseurl(   RM   RL  R  RM  R'   t   fakerepo(    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRN   $  s6    					'			c         C   s:   |  j  d  d k s% |  j  d  r) d S|  j  d  Sd  S(   Nt   sourcepackagei   R   t   srcRp   (   R  (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR  L  s    %c         C   s   |  j  S(   N(   RW  (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRF  R  s    c         C   s_   | d  k r t j d } n  |  j sX t j | |  j  |  _ | |  j d f g |  _ n  |  j S(   Ni    i   (   R:   R=   R  R>  Re  RW  Rq   (   RM   Rr  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _do_checksumU  s    	Rk   c         C   s
   |  j    S(   N(   R  (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl   ^  s    c         C   s   |  j    |  j S(   N(   R  Rq   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR   `  s    
c         C   s   t  S(   s5    don't bother "checking" the package matches itself. (   R   (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR   d  s    c         C   s{  |  j  r" |  j r" |  j  |  j f St |  j d  } | j d  | j d  } t j d |  \ } | j d  } t j d |  \ } | d } | | } | d } | d k r d | } n  d | | }	 | j |	  | j d d	  | j d  } t j d |  \ }
 | j d  } t j d |  \ } |
 d } | | d } |	 | } | j   |	 |  _  | |  _ |	 | f S(
   sQ   takes an rpm file or fileobject and returns byteranges for location of the headerR)   ih   i   s   >Ii   i   i    ip   i   (	   R  R  t   openRW  t   seekR  t   structt   unpackt   close(   RM   t   fot   binindext   sigindext   bindatat   sigdatat   sigindexsizet   sigsizet   disttoboundaryR  t   hdrindext   hdrdatat   hdrindexsizet   hdrsizeR  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   _get_header_byte_rangeh  s6    





		c         C   s   |  j    d S(   Ni   (   R  (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j    d S(   Ni    (   R  (   RM   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRl     s    c         C   s   |  j  rV |  j j |  j   rV |  j j |  j  d  } | d d k r_ | d } q_ n	 |  j } |  j r d t j |  j d t t j | d t f } n d t j | d t } | S(   NRX   i    RV   i   s&     <location xml:base="%s" href="%s"/>
R  s     <location href="%s"/>
(   R  RW  R   R2  R  R=   R  R   (   RM   t   relpathR  (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR    s     		N(   RR   RS   RT   R:   RN   R  RF  R  Rm   Re  R   R   R  R  R  R  (    (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR    s   (						0t   YumUrlPackagec           B   s#   e  Z d  Z d d d d d  Z RS(   s   Class to handle an arbitrary package from a URL
       this inherits most things from YumLocalPackage, but will download a
       remote package to make it local.
       init takes a YumBase, a ts instance and a url to the package.c         C   s  | j    j d  r( | t d  } n|t j |  s@ | } ndd  } i  } xl | j j   D][ } | j } | j	 | j
 j	 k r\ | j | j
 j k r\ | j | j
 j k r\ | j } Pq\ q\ Wt j j |  }	 t j   }
 |
 d  k r d | j }
 n  d |
 |	 f }
 yp t d | j
 j d | j
 j d | j
 j d | d |  } | d  k	 r\| | j _ n  | j | |
 d	 |	 } Wn, t k
 r} t j d
 | | f   n Xt j |  | |  d  S(   Ns   file:s   %s/../s   %s/%st	   bandwidtht   retryt   throttlet   progress_objt   proxiesR  s   Cannot download %s: %s(   R   R   R   R=   t   re_remote_urlR:   t   repost   listEnabledR  t   proxyt   conft   proxy_usernamet   proxy_passwordt
   proxy_dictRY   RZ   R[   t   getCacheDirt   cachedirR	   R  t   retriesR  t   optst
   user_agentt   urlgrabR
   R   Rf  R  RN   (   RM   t   ybRL  R  t   uaR   t   cbt   pdR3   RW  R  t   ugR'   (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyRN     s<    				N(   RR   RS   RT   R:   RN   (    (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyR    s   (L   RT   RQ  RY   t   os.pathR=   R   t   ret   fnmatchR_  R   t
   subprocessR    R   R   R   t   rpmUtils.miscutilsR   R   R   R   R  R  t	   constantst   operatorR   R  R*  t   uses_fragmentR    t   urlgrabber.grabberR	   R
   Rl  R   R:   t   ImportErrorR|  R  R   R   R   R2   RK   RL   RU   t   objectRo   R   R  R   R   R   R  R  R  R  R  RM  R9  RN  RK  RL  R<  R;  R:  t   _RPMVERIFY_CAPSt   _RPMVERIFY_CONTEXTSR  R2  RT  Rc  R^  Rk  Rj  R  R  (    (    (    s0   /usr/lib/python2.7/site-packages/yum/packages.pyt   <module>   s   

		"88	 	1  )	 









HJ8	