
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 m Z d  d l m Z m	 Z	 m
 Z
 d  d l j Z d  d l Z d  d l Td  d l m Z m Z m Z d  d l m Z m Z d  d l m Z d Z i d	 e 6d
 e 6d e 6d e 6d e 6d e 6d e 6Z  i e d	 6e d
 6e d 6e d 6e d 6e d 6e d 6e d 6e d 6e d 6e d 6Z! e" e# d  Z$ d f  d     YZ% d e f d     YZ& d e& f d     YZ' d f  d     YZ( d f  d     YZ) d e) f d      YZ* d! f  d"     YZ+ d# Z, d S($   iN(   t   proxy(   t   sqlitet
   executeSQLt   sql_esc_glob(   t   *(   t   YumInstalledPackaget   YumAvailablePackaget   PackageObject(   t
   to_unicodet   to_utf8(   t   getBaseArchs   /var/lib/yum/historyt   Updatet   Updatedt   Eraset   Installs   True-Installt	   Obsoletedt
   Obsoletings   Dep-Installt	   Reinstallt	   Downgradet
   Downgradedc         C   sF  |  d
 k r g  }  n  d d d d d d d g } t } x* |  D]" } t j j |  r= t } Pq= q= Wt } | s d g } t } n  t |   | k r g  }  n  | r t	 |   }  n g  } t } xL |  D]D } t j
 |  r | j | d f  t } q | j | d	 f  q W| r0| r0|  r0| |  | t f S| }  | |  | t f S(   sv   Setup need_full and patterns for _yieldSQLDataList, also see if
       we can get away with just using searchNames(). t   namet   sql_nameArcht   sql_nameVerRelArcht   sql_nameVert   sql_nameVerRelt	   sql_envrat	   sql_nevrat   globt   =N(   t   Nonet   Falset   yumt   misct   re_full_search_neededt   Truet   PATTERNS_MAXt   PATTERNS_INDEXED_MAXt   lenR   t   re_globt   append(   t   patternst   ignore_caset   fieldst	   need_fullt   patt   pat_maxt   tmpt	   need_glob(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _setupHistorySearchSQL>   s:    						t   _YumHistPackageYumDBc        	   B   sY   e  Z d  Z d   Z e d d d d d d d d	 g  Z d
   Z d   Z d d  Z	 RS(   s9    Class to pretend to be yumdb_info for history packages. c         C   s   | |  _  d  S(   N(   t   _pkg(   t   selft   pkg(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   __init__h   s    t   command_linet	   from_repot   from_repo_revisiont   from_repo_timestampt   installed_byt
   changed_byt   reasont
   releaseverc         C   s   |  j  } | j d  r. t d | | f  n  | |  j k rS t d | | f  n  | j j | |  } t r | d k r t d | | f  n  | d k r d St |  p d } t	 |  | |  | S(   s0    Load yumdb attributes from the history sqlite. t   _s   %s has no yum attribute %st    N(
   R2   t
   startswitht   AttributeErrort   _valid_yumdb_keyst   _historyt   _load_yumdb_keyR   R   t   strt   setattr(   R3   t   attrR4   t   val(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   __getattr__p   s    	c         C   s   |  j  |  } | d  k	 S(   N(   t   getR   (   R3   RG   t   x(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   __contains__   s    c         C   s,   y t  |  |  } Wn t k
 r' | SX| S(   s   retrieve an add'l data obj(   t   getattrRA   (   R3   RG   t   defaultt   res(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRJ      s
    N(
   t   __name__t
   __module__t   __doc__R5   t   setRB   RI   RL   R   RJ   (    (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR1   e   s   			t   YumHistoryPackagec           B   se   e  Z d d d   Z e d d d d d d d d d	 d
 g
  Z d   Z d   Z e d d    Z	 RS(   c   	      C   s   | |  _  | |  _ | |  _ | |  _ | |  _ |  j  |  j |  j |  j |  j f |  _ | d  k rl g  |  _ n, | j d  } | d | d d f g |  _ d |  _	 | |  _
 t |   |  _ d  S(   Nt   :i    i   s	   <history>(   R   t   versiont   releaset   epocht   archt   pkgtupR   t
   _checksumst   splitt   repoidRC   R1   t
   yumdb_info(	   R3   R   RY   RX   RV   RW   t   checksumt   historyt   chk(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR5      s    							t	   buildtimet	   buildhostt   licenset   packagert   sizet	   sourcerpmt   urlt   vendort	   committert
   committimec         C   s   | j  d  r% t d |  | f  n  | |  j k rJ t d |  | f  n  |  j j |  |  } t r | d k r t d |  | f  n  | d k r d St |  p d } t |  | |  | S(   s0    Load rpmdb attributes from the history sqlite. R>   s   %s has no attribute %sR?   N(	   R@   RA   t   _valid_rpmdb_keysRC   t   _load_rpmdb_keyR   R   RE   RF   (   R3   RG   RH   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRI      s    c         C   s   d |  j  k r} |  j j d } |  j j d k	 rk d |  j  k rk |  j  j |  j j k rk 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". R7   R?   R=   t   /t   @N(   R^   RC   R=   R   R7   R]   (   R3   t   end(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _ui_from_repo   s    	
t   fgetc         C   s
   |  j    S(   N(   Rq   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   <lambda>   s    N(
   RP   RQ   R   R5   RS   Rl   RI   Rq   t   propertyt   ui_from_repo(    (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRT      s   			t   YumHistoryPackageStatec           B   s   e  Z d d d   Z RS(   c	   	   	   C   s8   t  j |  | | | | | | |  d  |  _ | |  _ d  S(   N(   RT   R5   R   t   donet   state(	   R3   R   RY   RX   RV   RW   Rx   R_   R`   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR5      s    
	N(   RP   RQ   R   R5   (    (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRv      s   t   YumHistoryRpmdbProblemc           B   sD   e  Z d  Z d   Z d   Z d   Z d   Z e d d    Z RS(   sZ    Class representing an rpmdb problem that existed at the time of the
        transaction. c         C   s7   t  |  |  _ | |  _ | |  _ | |  _ d  |  _ d  S(   N(   t   weakrefRC   t   rpidt   problemt   textR   t	   _loaded_P(   R3   R`   R{   R|   R}   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR5      s
    			c         C   sI   | d  k r d St |  j | j  } | r0 | St |  j | j  } | S(   Ni   (   R   t   cmpR|   R{   (   R3   t   othert   ret(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   __cmp__   s     c         C   s   t  |  j  S(   N(   t   hashR{   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   __hash__   s    c         C   s7   |  j  d  k r0 t |  j j |  j   |  _  n  |  j  S(   N(   R~   R   t   sortedRC   t   _old_prob_pkgsR{   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _getProbPkgs   s    !Rr   c         C   s
   |  j    S(   N(   R   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRs      s    (	   RP   RQ   RR   R5   R   R   R   Rt   t   packages(    (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRy      s   					t   YumHistoryTransactionc           B   s   e  Z d  Z d   Z d   Z d   Z d   Z d   Z e d d    Z	 e d d    Z
 e d d	    Z d
   Z e d d    Z d   Z e d d    Z d   Z d   Z e d d    Z e d d    Z RS(   s#    Holder for a history transaction. c         C   s   t  |  |  _ | d |  _ | d |  _ | d |  _ | d |  _ | d |  _ | d |  _ | d |  _ d  |  _
 d  |  _ d  |  _ d  |  _ t |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  S(   Ni    i   i   i   i   i   i   (   Rz   RC   t   tidt   beg_timestampt   beg_rpmdbversiont   end_timestampt   end_rpmdbversiont   loginuidt   return_codeR   t
   _loaded_TWt
   _loaded_TDt
   _loaded_TSt   _loaded_PROBR   t   _have_loaded_CMDt   _loaded_CMDt
   _loaded_ERt
   _loaded_OTt   altered_lt_rpmdbt   altered_gt_rpmdb(   R3   R`   t   row(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR5     s$    									c         C   si   | d  k r d St |  j | j  } | r0 | St |  j | j  } | rO | St |  j | j  } | S(   Ni   (   R   R   R   R   R   (   R3   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR     s      c         C   s7   |  j  d  k r0 t |  j j |  j   |  _  n  |  j  S(   N(   R   R   R   RC   t   _old_with_pkgsR   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _getTransWith)  s    !c         C   s7   |  j  d  k r0 t |  j j |  j   |  _  n  |  j  S(   N(   R   R   R   RC   t   _old_data_pkgsR   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _getTransData-  s    !c         C   s7   |  j  d  k r0 t |  j j |  j   |  _  n  |  j  S(   N(   R   R   R   RC   t   _old_skip_pkgsR   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _getTransSkip1  s    !Rr   c         C   s
   |  j    S(   N(   R   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRs   6  s    c         C   s
   |  j    S(   N(   R   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRs   7  s    c         C   s
   |  j    S(   N(   R   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRs   8  s    c         C   s7   |  j  d  k r0 t |  j j |  j   |  _  n  |  j  S(   N(   R   R   R   RC   t   _old_problemsR   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _getProblems:  s    !c         C   s
   |  j    S(   N(   R   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRs   ?  s    c         C   s4   |  j  s- t |  _  |  j j |  j  |  _ n  |  j S(   N(   R   R"   RC   t   _old_cmdlineR   R   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _getCmdlineA  s    		c         C   s
   |  j    S(   N(   R   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRs   G  s    c         C   s1   |  j  d  k r* |  j j |  j  |  _  n  |  j  S(   N(   R   R   RC   t   _load_errorsR   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt
   _getErrorsI  s    c         C   s1   |  j  d  k r* |  j j |  j  |  _  n  |  j  S(   N(   R   R   RC   t   _load_outputR   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt
   _getOutputM  s    c         C   s
   |  j    S(   N(   R   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRs   R  s    c         C   s
   |  j    S(   N(   R   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRs   S  s    (   RP   RQ   RR   R5   R   R   R   R   Rt   t
   trans_witht
   trans_datat
   trans_skipR   t   rpmdb_problemsR   t   cmdlineR   R   t   errorst   output(    (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR     s"   		
							t   YumMergedHistoryTransactionc           B   s   e  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 e d
    Z e d    Z e d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C   s   t  | j g  |  _ | g |  _ | j |  _ | j |  _ | j |  _ | j |  _ d  |  _	 d  |  _
 g  |  _ d  |  _ t |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  S(   N(   RS   R   t   _merged_tidst   _merged_objsR   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   (   R3   t   obj(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR5   V  s     									c         C   s   t  |  j  S(   N(   R   R   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _getAllTidsq  s    Rr   c         C   s
   |  j    S(   N(   R   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRs   s  s    c         C   sC   t  d   |  j D  } t |  d k r9 t |  d St |  S(   Nc         s   s   |  ] } | j  Vq d  S(   N(   R   (   t   .0R   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pys	   <genexpr>v  s    i   i    (   RS   R   R%   t   listR   (   R3   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _getLoginUIDsu  s    c         C   s
   |  j    S(   N(   R   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRs   z  s    c         C   sa   t  d   |  j D  } t |  d k r; d | k r; d Sd | k rW | j d  n  t |  S(   Nc         s   s   |  ] } | j  Vq d  S(   N(   R   (   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pys	   <genexpr>}  s    i   i    (   RS   R   R%   t   removeR   (   R3   t	   ret_codes(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _getReturnCodes|  s    c         C   s
   |  j    S(   N(   R   (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRs     s    c         C   ss   g  } t    } xW |  j D]L } xC | j D]8 } | j | k rD q) n  | j | j  | j |  q) Wq Wt |  S(   N(   RS   R   R   RZ   t   addR'   R   (   R3   R   t   filtR   R4   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR     s    	c         C   s1   | d k r |  j } n  |  j t |  j  | f S(   s6    Take a pkg and return the key for it's state lookup. N(   R   Rx   R   R
   RY   (   R4   Rx   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _p2sk  s    c         C   sM   i  } i  } x4 |  D], } t  j |  } | | | j <| | | <q W| | f S(   N(   R   R   RZ   (   t   pkgst
   pkgtup2pkgt   pkgstate2pkgR4   t   key(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt
   _list2dict  s    c      	   C   s   t  |  j |  j |  j |  j |  j | d |  j } |  j | _ |  j | _ t	 | j
 t k rj t | _ n  t	 | j
 t k r t | _ n  | S(   NR`   (   Rv   R   RY   RX   RV   RW   RC   R[   Rw   t   _sttxt2stcodeRx   t   TS_INSTALL_STATESR"   t   state_installedt   TS_REMOVE_STATESR   (   R4   Rx   t   npkg(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _conv_pkg_state  s    c         C   sB   t  |   t  d  k r* t j |   }  n  |  | k r: d  S| |  S(   Ni    i   (   i    i   (   t   typeR   R   R   (   t   skR   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _get_pkg  s
    c         C   sh   |  j  | |  } | d  k r" d  S| |  j |  =|  j | |  } | | | j <| | |  j |  <d  S(   N(   R   R   R   R   RZ   (   R3   R   t   nstateR   R   t   xpkg(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt	   _move_pkg  s    c      	      sP    f d   }   f d   }    f d   }    f d   }    f d       f d        f d   } i   i   x j  D]}  j | j  \   x t  j    D]} | \ } }	 }
 |
 d k r q n   | } x9 d D]. } |  j | |   } | d  k	 r	Pq	q	Wq t rGq | | k r| | d  | d k r| | d  qq | | k  r| | d  | d k r| | d  qq   |  | d k r | | d  q q Wt  j    j	  j    } x| D]} |  k s	|  k r-q	n   | }  | } t rJq	| j
 d k rx| j
 d k r  |  qq	| j
 d k rd } | j
 | k st  q	| j
 d k rUt rq| j
 d k r| | |  q| j
 d k r| | |  |  j | d  | j
  q| j
 d k r| | |  |  j | d  | j
  qq	| j
 d k r	t rmq| j
 d k r |  q| j
 d k r| | |  |  j | d  | j
  |  j | d  | j
  q| j
 d k r|  j | d   } | d  k r.|  j | d   } n  | d  k rX| j
 d k rOq	n  | } n  |  j | d   } | d  k r|  j | d   } n  | d  k r|  j | d   } n  | d  k rq	n  | | |  | | k r9d } d | j
 | j
 f k rd } n  | | k r,| | |  n   |  q| | k  rd } d } d | j
 | j
 f k rrd } n  | | k r| | |  n  | | |  qd } d } d | j
 | j
 f k rd } n  | | k r| | |  n  | | |  qq	q	Wx  D] }  |  | <qWx  D] }  |  | <q$Wq Wt  j    S(   Nc            s    j  |     S(   N(   R   (   R   (   t   fpkgstate2pkgR3   (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt
   _get_pkg_f  s    c            s    j  |     S(   N(   R   (   R   (   t   npkgstate2pkgR3   (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt
   _get_pkg_n  s    c            s    j  |  |     d  S(   N(   R   (   R   R   (   R   t   fpkgtup2pkgR3   (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _move_pkg_f  s    c            s    j  |  |     d  S(   N(   R   (   R   R   (   R   t   npkgtup2pkgR3   (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _move_pkg_n  s    c            s3    |  j  = j |   } |   k r/   | =n  d  S(   N(   RZ   R   (   R4   R   (   R   R   R3   (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _del1_n  s    
c            s3    |  j  = j |   } |   k r/   | =n  d  S(   N(   RZ   R   (   R4   R   (   R   R   R3   (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _del1_f  s    
c            s0   |  j  | j  k s t    |    |  d  S(   N(   RZ   t   AssertionError(   t   fpkgR   (   R   R   (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _del2  s    
R   R   R   s   True-Installs   Dep-InstallR   R   R   R   R   R   (   R   R   (   R   s   True-Installs   Dep-InstallR   (   R   R   R   R   R   (   R   R   (   R   s   True-Installs   Dep-InstallR   (   R   s   True-Installs   Dep-Install(   R   R   (   R   R   R   (   R   R   (   R   R   (   R   R   R   R   t   keysR   R   R   RS   t   intersectionRx   R   R   t   values(   R3   R   R   R   R   R   R   R   R   RY   Rx   R   t   xstateR   t   sametupsRZ   t   good_statest   xfpkgt   xnpkgt   nfstatet   nnstateRK   (    (   R   R   R   R   R   R   R3   s/   /usr/lib/python2.7/site-packages/yum/history.pyR     s    

 
!

 	  " 				c         C   sH   t    } x2 |  j D]' } x | j D] } | j |  q# Wq Wt |  S(   N(   RS   R   R   R   R   (   R3   t   probsR   t   prob(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR   d  s
    	c         C   sf   g  } xO |  j  D]D } | j s% q n  | rD | d | j k rD q n  | j | j  q W| sb d  S| S(   Ni(   R   R   R'   R   (   R3   t   cmdlinesR   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR   k  s    	c         C   s.   g  } x! |  j  D] } | j | j  q W| S(   N(   R   t   extendR   (   R3   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR   w  s    c         C   s.   g  } x! |  j  D] } | j | j  q W| S(   N(   R   R   R   (   R3   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR   |  s    c         C   s   | j  |  j k r d  S|  j j | j   |  j j |  |  j j d t  |  j | j k ry | j |  _ | j |  _ n  |  j	 | j	 k  r | j	 |  _	 | j
 |  _
 n  d  S(   Nt   reverse(   R   R   R   R   R'   t   sortR"   R   R   R   R   (   R3   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   merge  s    N(   RP   RQ   R5   R   Rt   R   R   R   R   R   R   t   staticmethodR   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR   U  s(   													t
   YumHistoryc           B   s?  e  Z d  Z d e d@ d  Z d   Z d   Z d   Z d   Z	 d   Z
 d@ e d  Z e d	  Z e d
  Z e d  Z e d  Z e d    Z d   Z d   Z d   Z d   Z d   Z d   Z g  g  d@ 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' g  d@ e d"  Z( e d#  Z) d$   Z* d%   Z+ d&   Z, d'   Z- d(   Z. d)   Z/ d*   Z0 d+   Z1 d,   Z2 d-   Z3 d.   Z4 d/   Z5 e d0  Z6 d1 d2 d3 d4 g Z7 d5   Z8 d6 d7 d8 d9 d: d; d< d= g Z9 d>   Z: d?   Z; RS(A   s,    API for accessing the history sqlite data. Rn   c   	      C   s  d  |  _ t j j   |  _ t j j |  j	 |  sY t j j | d |  |  j _
 n t j j d |  |  j _
 t |  j _ t |  j _ | |  _ d  |  _ t j j |  j j
  s y t j |  j j
  Wn t t f k
 r } d  SXt |  j _ n* t j |  j j
 t j  r$t |  j _ n  t j d |  j j
  } x t t |   D] } t j j |  } | t d  t d  !} | j d d  } t |  d k rqPn  y t t |  Wn t k
 rqPn Xd | d	 | d
 | d f |  _  | |  _ PqPW|  j d  k r&|  j!   s&d  Sn  |  j j
 d |  j  |  j _" t j j |  j j"  sy t j |  j j"  Wqt t f k
 r} d  SXn* t j |  j j" t j  rt |  j _ n  d  S(   NRn   s   %s/history-*-*-*.sqlites   history-s   .sqlitet   -i   i   s   %s-%s-%si    i   i   (#   R   t   _connR   R    t   GenericHoldert   conft   ost   patht   normpathR@   t   db_pathR   t   writableR"   t   readableR=   t   _db_filet   existst   makedirst   IOErrort   OSErrort   accesst   W_OKR   t   reversedR   t   basenameR%   R\   t   mapt   intt
   ValueErrort   _db_datet   _create_db_filet
   addon_path(	   R3   t   rootR   R=   t   et   DBst   dt   fnamet   pieces(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR5     sT    	#		"	c         C   s   |  j    d  S(   N(   t   close(   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   __del__  s    c         C   s   |  j  d  k r~ |  j j s d  Sy t j |  j  |  _  Wn* t j t j f k
 rd t	 |  j _ d  SXt
 |  j  j   d  n  |  j  j   S(   Ns   PRAGMA locking_mode = EXCLUSIVE(   R   R   R   R   R   t   connectR   t   OperationalErrort   DatabaseErrorR   R   t   cursor(   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _get_cursor  s    c         C   s   |  j  j   S(   N(   R   t   commit(   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _commit  s    c         C   s   |  j  j   S(   N(   R   t   rollback(   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt	   _rollback  s    c         C   s,   |  j  d  k	 r( |  j  j   d  |  _  n  d  S(   N(   R   R   R  (   R3   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR    s    c      	   C   s?  |  j    } t | d |  xd | D]\ \ } } | d  k rK | d  k rK | S| d  k r] q# n  | d  k ro q# n  | | k r# | Sq# W| s d  S| \ } } }	 }
 } t |  t |  t |	  t |
  t |  f \ } } }	 }
 } | d  k	 rt | d | | |	 |
 | | f  } n! t | d | | |	 |
 | f  } | j S(   Ns   SELECT pkgtupid, checksum FROM pkgtups
                           WHERE name=? AND arch=? AND
                                 epoch=? AND version=? AND release=?s   INSERT INTO pkgtups
                                (name, arch, epoch, version, release, checksum)
                                VALUES (?, ?, ?, ?, ?, ?)s   INSERT INTO pkgtups
                                (name, arch, epoch, version, release)
                                VALUES (?, ?, ?, ?, ?)(   R  R   R   R   t	   lastrowid(   R3   RZ   R_   t   createt   curt   sql_pkgtupidt   sql_checksumt   nt   aR
  t   vt   rRO   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _pkgtup2pid  s0    
0c         C   sU   | j    } | d  k	 r? d t | d  t | d  f } n  |  j | j | |  S(   Ns   %s:%si    i   (   t   returnIdSumR   RE   R#  RZ   (   R3   t   poR  t   csum(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt	   _apkg2pid  s    'c         C   sV   d  } | j } d | k r@ d | k r@ d | j | j f } n  |  j | j | |  S(   Nt   checksum_typet   checksum_datas   %s:%s(   R   R^   R(  R)  R#  RZ   (   R3   R%  R  R&  t   yumdb(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt	   _ipkg2pid  s
    	c         C   s   |  j  | |  S(   N(   R'  (   R3   R%  R  (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt	   _hpkg2pid  s    c         C   ss   t  | t  r |  j | |  St  | t  r> |  j | |  St  | t  r] |  j | |  S|  j | j d  |  S(   N(
   t
   isinstanceR   R+  R   R'  RT   R,  R#  RZ   R   (   R3   R%  R  (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   pkg2pid"  s    c         C   s   d  } |  j t t f k rB |  j r- d } qB |  j rB d } qB n  |  j t k rf |  j rf d } qf n  | d  k r t j	 |  j  } | d k r |  j
 r d } q n  | S(   NR   R   R   R   s   Dep-Install(   R   t   output_statet
   TS_INSTALLt   TS_TRUEINSTALLt	   reinstallt
   downgradest   TS_ERASEt   downgraded_byt   _stcode2sttxtRJ   t   isDep(   t   txmbrRx   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   txmbr2state+  s    				c         C   s>   |  j    } | d  k r d  St | d |  j | f  } | j S(   Nsk   INSERT INTO trans_with_pkgs
                         (tid, pkgtupid)
                         VALUES (?, ?)(   R  R   R   t   _tidR  (   R3   t   pidR  RO   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   trans_with_pid<  s    c         C   sK   |  j    } | d  k s% |  j   r) d  St | d |  j | f  } | j S(   Nsk   INSERT INTO trans_skip_pkgs
                         (tid, pkgtupid)
                         VALUES (?, ?)(   R  R   t   _update_db_file_2R   R:  R  (   R3   R;  R  RO   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   trans_skip_pidF  s    c         C   ss   | d  k	 s t  t |  d  s. | d  k r2 d  S|  j   } | d  k rN d  St | d |  j | | f  } | j S(   NR:  su   INSERT INTO trans_data_pkgs
                         (tid, pkgtupid, state)
                         VALUES (?, ?, ?)(   R   R   t   hasattrR  R   R:  R  (   R3   R;  Rx   R  RO   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   trans_data_pid_begQ  s    c         C   sk   t  |  d  s | d  k r  d  S|  j   } | d  k r< d  St | d d |  j | | f  } |  j   d  S(   NR:  s   UPDATE trans_data_pkgs SET done = ?
                         WHERE tid = ? AND pkgtupid = ? AND state = ?
                         t   TRUE(   R?  R   R  R   R:  R  (   R3   R;  Rx   R  RO   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   trans_data_pid_end]  s    c   
      C   s_  t  |  d  s d  S|  j   } | d  k s8 |  j   r< d  St | j    } t | d |  j | j | f  } | j	 } | s | Si  } | j
 } | | | j <| j d k r x! | j D] } | | | j <q Wn  | j d k r | j | | j j <n  xb | j   D]T } |  j |  } | j | j
 j k r6d }	 n d }	 t | d | | |	 f  } qW| S(   NR:  sw   INSERT INTO trans_rpmdb_problems
                         (tid, problem, msg)
                         VALUES (?, ?, ?)t	   conflictst
   duplicatesRA  t   FALSEs}   INSERT INTO trans_prob_pkgs
                             (rpid, pkgtupid, main)
                             VALUES (?, ?, ?)(   R?  R  R   R=  R   t   __str__R   R:  R|   R  R4   RZ   RC  t	   duplicateR   R.  (
   R3   R|   R  t   uproblemRO   R{   R   R4   R;  t   main(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _trans_rpmdb_problemk  s:    				c         C   sd   t  |  d  s d  S|  j   } | d  k s8 |  j   r< d  St | d |  j t |  f  } | j S(   NR:  sh   INSERT INTO trans_cmdline
                         (tid, cmdline)
                         VALUES (?, ?)(   R?  R  R   R=  R   R:  R   R  (   R3   R   R  RO   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _trans_cmdline  s    c         C   s<  |  j    } | d  k r d  St | d t t j    t |  t j j   f  } | j	 |  _
 x* | D]" }	 |  j |	  }
 |  j |
  qe Wx? | D]7 } |  j | j  }
 |  j |  } |  j |
 |  q Wx* | D]" }	 |  j |	  }
 |  j |
  q Wx | D] } |  j |  qW| r.|  j |  n  |  j   d  S(   Ns   INSERT INTO trans_beg
                            (timestamp, rpmdb_version, loginuid)
                            VALUES (?, ?, ?)(   R  R   R   R  t   timeRE   R   R    t   getloginuidR  R:  R+  R<  R.  R%  R9  R@  R>  RJ  RK  R  (   R3   t   rpmdb_versiont
   using_pkgst   txmbrst   skip_packagesR   R   R  RO   R4   R;  R8  Rx   R|   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   beg  s.    	c         C   s`   |  j    } | d  k r d  Sx3 | D]+ } t |  } t | d |  j | f  q# W|  j   d  S(   NsJ   INSERT INTO trans_error
                          (tid, msg) VALUES (?, ?)(   R  R   R   R   R:  R  (   R3   R   R  t   error(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _log_errors  s    c         C   s   | d k s t |  d  r  d S|  j   } | d k r< d Sx9 | j   D]+ } t |  } t | d |  j | f  qI W|  j   d S(   s6    Note that data can be either a real pkg. ... or not. R:  NsS   INSERT INTO trans_script_stdout
                          (tid, line) VALUES (?, ?)(   R   R?  R  t
   splitlinesR   R   R:  R  (   R3   t   datat   msgR  RS  (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   log_scriptlet_output  s    c         C   sK   |  j    } t | d | f  g  } x | D] } | j | d  q, W| S(   Nsf   SELECT msg FROM trans_error
                      WHERE tid = ?
                      ORDER BY mid ASCi    (   R  R   R'   (   R3   R   R  R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR     s    c         C   sK   |  j    } t | d | f  g  } x | D] } | j | d  q, W| S(   Nso   SELECT line FROM trans_script_stdout
                      WHERE tid = ?
                      ORDER BY lid ASCi    (   R  R   R'   (   R3   R   R  R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR     s    c         C   s   | s | s t   t |  d  s& d  S|  j   } | d  k rB d  St | d |  j t t j    t |  | f  } |  j	   | s t | d d |  j f  |  j	   n  | d  k	 r |  j
 |  n  |  ` d  S(   NR:  s   INSERT INTO trans_end
                            (tid, timestamp, rpmdb_version, return_code)
                            VALUES (?, ?, ?, ?)sK   UPDATE trans_data_pkgs SET done = ?
                          WHERE tid = ?RA  (   R   R?  R  R   R   R:  R  RL  RE   R  RT  (   R3   RN  R   R   R  RO   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRp     s$    	
c         C   s  t  |  d  s t S| s t S| s' t S|  j j d t |  j  } |  j j r t j j	 |  r y t j
 | d d Wq t t f k
 r } t SXn  | j d d  } | d | } y: t | d  } | j t |   | j   | j   Wn t t f k
 r} t SXt S(   s   append data to an arbitrary-named file in the history 
           addon_path/transaction id location,
           returns True if write succeeded, False if notR:  Rn   t   modei  R>   s   w+(   R?  R   R   R  RE   R:  R   R   R   R   R   R   R   t   replacet   opent   writeR	   t   flushR  R"   (   R3   t   datanameRV  t   tid_dirR
  t   safenamet   data_fnt   fo(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   write_addon_data  s,    
c   	      C   s   |  j  j d t |  d } t j | d  } g  | D] } | j | d  ^ q8 } | s` | S| | k rp d  St | | d  } | j   } | j   | S(   NRn   R   R?   R"  (	   R   R  RE   R   RZ  R   R[  t   readR  (	   R3   R   t   itemt   hist_and_tidt
   addon_infot   it   addon_namesRb  RV  (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   return_addon_data6  s    %
c      
   C   s   |  j    } t | d | f  g  } xT | D]L } t | d | d | d | d | d | d d |  } | j |  q, W| S(	   Ns   SELECT name, arch, epoch, version, release, checksum
                      FROM trans_with_pkgs JOIN pkgtups USING(pkgtupid)
                      WHERE tid = ?
                      ORDER BY name ASC, epoch ASCi    i   i   i   i   i   R`   (   R  R   RT   R'   (   R3   R   R  R   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR   F  s    0	c         C   s   |  j    } t | d | f  g  } x | D] } t | d | d | d | d | d | d | d d	 |  } | d
 d k | _ d  | _ t | j t k r t	 | _ n  t | j t
 k r t | _ n  | j |  q, W| S(   Ns	  SELECT name, arch, epoch, version, release,
                             checksum, done, state
                      FROM trans_data_pkgs JOIN pkgtups USING(pkgtupid)
                      WHERE tid = ?
                      ORDER BY name ASC, epoch ASC, state DESCi    i   i   i   i   i   i   R`   i   RA  (   R  R   Rv   Rw   R   R   R   Rx   R   R"   R   R   R'   (   R3   R   R  R   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR   S  s    &	c         C   s   |  j    } | d  k s% |  j   r) g  St | d | f  g  } xT | D]L } t | d | d | d | d | d | d d |  } | j |  qI W| S(	   Ns   SELECT name, arch, epoch, version, release, checksum
                      FROM trans_skip_pkgs JOIN pkgtups USING(pkgtupid)
                      WHERE tid = ?
                      ORDER BY name ASC, epoch ASCi    i   i   i   i   i   R`   (   R  R   R=  R   RT   R'   (   R3   R   R  R   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR   g  s    0	c         C   s   |  j    } | d  k s% |  j   r) g  St | d | f  g  } xg | D]_ } t | d | d | d | d | d | d d |  } | d	 d
 k | _ | j |  qI W| S(   Ns   SELECT name, arch, epoch, version, release, checksum, main
                      FROM trans_prob_pkgs JOIN pkgtups USING(pkgtupid)
                      WHERE rpid = ?
                      ORDER BY name ASC, epoch ASCi    i   i   i   i   i   R`   i   RA  (   R  R   R=  R   RT   RI  R'   (   R3   R{   R  R   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR   v  s    0	c         C   s   |  j    } | d  k s% |  j   r) g  St | d | f  g  } x< | D]4 } t |  | d | d | d  } | j |  qI W| S(   Ns   SELECT rpid, problem, msg
                      FROM trans_rpmdb_problems
                      WHERE tid = ?
                      ORDER BY problem ASC, rpid ASCi    i   i   (   R  R   R=  R   Ry   R'   (   R3   R   R  R   R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR     s    !c         C   s\   |  j    } | d  k s% |  j   r) d  St | d | f  g  } x | D] } | d SWd  S(   Ns[   SELECT cmdline
                      FROM trans_cmdline
                      WHERE tid = ?i    (   R  R   R=  R   (   R3   R   R  R   R   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR     s    	c         C   s  |  j    } | d k r g  Sd } | s1 d } n  d } | r t |  t j j k r t t |   } } | d d j d g t |   7} n  | d 7} | d k	 r | d t	 |  7} n  t
 | | |  g  } i  } xo | D]g }	 | rt |  t j j k r|	 d | k rq qn  t |  |	  }
 |
 | |	 d <| j |
  q Wd	 } | j   } t |  t j j k rt
 | |  n4 | d d j d g t |   7} t
 | | |  xc | D][ }	 |	 d | k rqn  |	 d
 | |	 d _ |	 d | |	 d _ |	 d | |	 d _ qWd } x t |  D] }
 |
 j } d } | d k	 ra| j } n  | d k s| d k s| j d
 |
 j k rn3 | | k rt |
 _ t | _ n t |
 _ t | _ |
 } q4W| S(   s    Return a list of the last transactions, note that this includes
            partial transactions (ones without an end transaction). s]  SELECT tid,
                         trans_beg.timestamp AS beg_ts,
                         trans_beg.rpmdb_version AS beg_rv,
                         trans_end.timestamp AS end_ts,
                         trans_end.rpmdb_version AS end_rv,
                         loginuid, return_code
                  FROM trans_beg JOIN trans_end USING(tid)s  SELECT tid,
                             trans_beg.timestamp AS beg_ts,
                             trans_beg.rpmdb_version AS beg_rv,
                             NULL, NULL,
                             loginuid, NULL
                      FROM trans_begs    WHERE tid IN (%s)s   , t   ?s    ORDER BY tid DESCs    LIMIT i    s   SELECT tid,
                         trans_end.timestamp AS end_ts,
                         trans_end.rpmdb_version AS end_rv,
                         return_code
                  FROM trans_endi   i   i   N(   R  R   R%   R   t	   constantsR$   R   RS   t   joinRE   R   R   R'   R   R   R   R   R  R   R   R"   R   R   R   (   R3   t   tidst   limitt   complete_transactions_onlyR  t   sqlt   paramsR   t   tid2objR   R   t   last   cur_rvt   las_rv(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   old  sd    	'
	$	.			
c         C   s?   |  j  g  d |  } | s d St |  d k s7 t  | d S(   si    This is the last full transaction. So any incomplete transactions
            do not count, by default. i   i    N(   Rw  R   R%   R   (   R3   Rp  R   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   last  s
    c         C   s   |  j    } | d  k s% |  j   r) d  S|  j | d t } | d  k rN d  Sd i | d 6} t | | | | f  x | D] } | d SWd  S(   NR  s\   SELECT %(db)sdb_val FROM pkg_%(db)sdb
                  WHERE pkgtupid=? and %(db)sdb_key=? t   dbi    (   R  R   t   _update_db_file_3R.  R   R   (   R3   R4   Ry  RG   R  R;  Rq  R   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _load_anydb_key  s    	c         C   s   |  j  | d |  S(   Nt   rpm(   R{  (   R3   R4   RG   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRm     s    c         C   s   |  j  | d |  S(   NR   (   R{  (   R3   R4   RG   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRD     s    c         C   s   |  j    } | d  k s% |  j   r) d  S|  j | d t } | d  k rN d  Sd i | d 6} t | | | | t |  f  | j S(   NR  sh   INSERT INTO pkg_%(db)sdb (pkgtupid, %(db)sdb_key, %(db)sdb_val)
                        VALUES (?, ?, ?)Ry  (   R  R   Rz  R.  R   R   R   R  (   R3   R4   Ry  RG   RH   R  R;  Rq  (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _save_anydb_key  s    c         C   s   |  j  | d | |  S(   NR|  (   R}  (   R3   R4   RG   RH   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _save_rpmdb_key"  s    c         C   s   |  j  | d | |  S(   NR   (   R}  (   R3   R4   RG   RH   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _save_yumdb_key$  s    c         C   sX   xQ t  j D]F } t | | d  } | d k r4 q
 n  |  j | d | |  s
 t Sq
 Wt S(   se    Save all the data for rpmdb for this installed pkg, assumes
            there is no data currently. R|  N(   RT   Rl   RM   R   R}  R   R"   (   R3   t   ipkgRG   RH   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _save_rpmdb'  s    c         C   sX   xQ t  j D]F } | j j |  } | d k r4 q
 n  |  j | d | |  s
 t Sq
 Wt S(   se    Save all the data for yumdb for this installed pkg, assumes
            there is no data currently. R   N(   R1   RB   R^   RJ   R   R}  R   R"   (   R3   R  RG   RH   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _save_yumdb2  s    c         C   sv   |  j    } | d k s% |  j   r) t S|  j | d t } | d k rN t Sd i | d 6} t | | | f  t S(   s=    Delete all the data for rpmdb/yumdb for this installed pkg. R  s)   DELETE FROM pkg_%(db)sdb WHERE pkgtupid=?Ry  N(   R  R   Rz  R   R.  R   R"   (   R3   R4   Ry  R  R;  Rq  (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _wipe_anydb=  s    c         C   sb   |  j  | d  s t S|  j  | d  oC |  j |  oC |  j |  sT |  j   t S|  j   t S(   s<    Sync. all the data for rpmdb/yumdb for this installed pkg. R|  R   (   R  R   R  R  R  R  R"   (   R3   R  (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt
   sync_alldbL  s    

c      	   C   s   i d d 6d d 6d d 6d d 6d d 6d d 6} |  j    } | d k sU |  j   rY t Sd d d d d d f } xM | D]E \ } } } t | d | | f  x | D] } | d | | <q Wqx W| S(   s&    Some stats about packages in the DB. i    t   nevract   nevrat   nevrt   nat   rpmdbR*  s   COUNT(*)t   pkgtupss   COUNT(DISTINCT(name || arch))s4   COUNT(DISTINCT(name||version||epoch||release||arch))s.   COUNT(DISTINCT(name||version||epoch||release))s   COUNT(DISTINCT(pkgtupid))t	   pkg_rpmdbt	   pkg_yumdbs   SELECT %s FROM %sN(   R  s   COUNT(*)R  (   R  s   COUNT(DISTINCT(name || arch))R  (   R  s4   COUNT(DISTINCT(name||version||epoch||release||arch))R  (   R  s.   COUNT(DISTINCT(name||version||epoch||release))R  (   R  s   COUNT(DISTINCT(pkgtupid))R  (   s   yumdbs   COUNT(DISTINCT(pkgtupid))R  (   R  R   Rz  R   R   (   R3   R   R  RV  R   t   bsqlt   esqlR   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt
   _pkg_statsY  s,    

  	c         c   s   |  j    } t } g  } g  } xi | D]a \ } }	 xR | D]J }
 | r^ | j d |
 |	 f  n | j d |
 |	 f  | j |  q8 Wq% W| s t  | d j |  7} t | | |  x | D] } | Vq Wd S(   s2   Yields all the package data for the given params. s   %s LIKE ?%ss   %s %s ?s    OR N(   R  t   _FULL_PARSE_QUERY_BEGR'   R   Rm  R   (   R3   R(   R*   R)   R  t   qsqlt   pat_sqlst   pat_datat   patternt   restt   fieldRK   (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   _yieldSQLDataListv  s    c         C   s-  |  j    } | d k r t   Sg  | D]' } t j d d |  j d d  ^ q& } t | |  } | \ } } } }	 g  }
 t   } | r x |  j | | |  D] } | j | d  q Wn t	 } | s t
 } n  x{ t j j | |  D]d } t | |  } | \ } } } }	 | st  x. |  j | | |  D] } | j | d  q1Wq Wd } | d d j d g t |   7} t |  } t   } t |  t j j
 k rt | d	  x2 | D]* } | d
 | k r| j | d  qqW| S| s| St | | |  x | D] } | j | d  qW| S(   s{    Search for history transactions which contain specified
            packages al. la. "yum list". Returns transaction ids. s	   \[[^]]+\]Rk  t   [t   !i    s2   SELECT tid FROM trans_data_pkgs WHERE pkgtupid IN s   (%s)t   ,s(   SELECT tid,pkgtupid FROM trans_data_pkgsi   N(   R  R   RS   t   ret   subRZ  R0   R  R   R#   R$   R   R    t   seq_max_splitR   Rm  R%   R   Rl  R   (   R3   R(   R)   R  RK   RV  R+   t	   npatternsR*   t   namesR   t	   pkgtupidsR   R-   t   npsRq  Rr  Rn  (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   search  sJ    
1		$	s    CREATE TABLE pkg_rpmdb (
     pkgtupid INTEGER NOT NULL REFERENCES pkgtups,
     rpmdb_key TEXT NOT NULL,
     rpmdb_val TEXT NOT NULL);
sA    CREATE INDEX i_pkgkey_rpmdb ON pkg_rpmdb (pkgtupid, rpmdb_key);
s    CREATE TABLE pkg_yumdb (
     pkgtupid INTEGER NOT NULL REFERENCES pkgtups,
     yumdb_key TEXT NOT NULL,
     yumdb_val TEXT NOT NULL);
sA    CREATE INDEX i_pkgkey_yumdb ON pkg_yumdb (pkgtupid, yumdb_key);
c         C   s   |  j    s t St |  d  r& |  j S|  j   } | d k rB t St | d  x: | D] } PqV Wx |  j D] } | j |  qk W|  j	   t
 |  _ t
 S(   s3    Update to version 3 of history, rpmdb/yumdb data. t   _cached_updated_3s   PRAGMA table_info(pkg_yumdb)N(   R=  R   R?  R  R  R   R   t   _update_ops_3t   executeR  R"   (   R3   R  t   obt   op(    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyRz    s    
	s    CREATE TABLE trans_skip_pkgs (
     tid INTEGER NOT NULL REFERENCES trans_beg,
     pkgtupid INTEGER NOT NULL REFERENCES pkgtups);
sk    CREATE TABLE trans_cmdline (
     tid INTEGER NOT NULL REFERENCES trans_beg,
     cmdline TEXT NOT NULL);
s    CREATE TABLE trans_rpmdb_problems (
     rpid INTEGER PRIMARY KEY,
     tid INTEGER NOT NULL REFERENCES trans_beg,
     problem TEXT NOT NULL, msg TEXT NOT NULL);
s    CREATE TABLE trans_prob_pkgs (
     rpid INTEGER NOT NULL REFERENCES trans_rpmdb_problems,
     pkgtupid INTEGER NOT NULL REFERENCES pkgtups,
     main BOOL NOT NULL DEFAULT FALSE);
s'   CREATE VIEW vtrans_data_pkgs AS
     SELECT tid,name,epoch,version,release,arch,pkgtupid,
            state,done,
            name || '-' || epoch || ':' ||
            version || '-' || release || '.' || arch AS nevra
     FROM trans_data_pkgs JOIN pkgtups USING(pkgtupid)
     ORDER BY name;
s   CREATE VIEW vtrans_with_pkgs AS
     SELECT tid,name,epoch,version,release,arch,pkgtupid,
            name || '-' || epoch || ':' ||
            version || '-' || release || '.' || arch AS nevra
     FROM trans_with_pkgs JOIN pkgtups USING(pkgtupid)
     ORDER BY name;
s   CREATE VIEW vtrans_skip_pkgs AS
     SELECT tid,name,epoch,version,release,arch,pkgtupid,
            name || '-' || epoch || ':' ||
            version || '-' || release || '.' || arch AS nevra
     FROM trans_skip_pkgs JOIN pkgtups USING(pkgtupid)
     ORDER BY name;
s   CREATE VIEW vtrans_prob_pkgs2 AS
     SELECT tid,rpid,name,epoch,version,release,arch,pkgtups.pkgtupid,
            main,problem,msg,
            name || '-' || epoch || ':' ||
            version || '-' || release || '.' || arch AS nevra
     FROM (SELECT * FROM trans_prob_pkgs,trans_rpmdb_problems WHERE
           trans_prob_pkgs.rpid=trans_rpmdb_problems.rpid)
           JOIN pkgtups USING(pkgtupid)
     ORDER BY name;
c         C   s   |  j  j s t St |  d  r& |  j S|  j   } | d k rB t St | d  x: | D] } PqV Wx |  j D] } | j	 |  qk W|  j
   t |  _ t S(   s;    Update to version 2 of history, includes trans_skip_pkgs. t   _cached_updated_2s"   PRAGMA table_info(trans_skip_pkgs)N(   R   R   R   R?  R  R  R   R   t   _update_ops_2R  R  R"   (   R3   R  R  R  (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR=  /  s    
	c         C   sy  t  j d  |  _ d |  j j d |  j d f } |  j | k r t j | | d  t j j	 | d  r t j | d | d  q n  | |  _ |  j j
 s t St j j	 |  j  s t j |  j t j d  } t j |  n  |  j   } d	 d
 d d d d d d g } x | D] } | j |  qWx |  j D] } | j |  q3Wx |  j D] } | j |  qTW|  j   t S(   s6    Create a new history DB file, populating tables etc. s   %Y-%m-%ds   %s/%s-%s.%sR`   R   s   .olds   -journals   -journal.oldi  s    CREATE TABLE trans_beg (
     tid INTEGER PRIMARY KEY,
     timestamp INTEGER NOT NULL, rpmdb_version TEXT NOT NULL,
     loginuid INTEGER);
s    CREATE TABLE trans_end (
     tid INTEGER PRIMARY KEY REFERENCES trans_beg,
     timestamp INTEGER NOT NULL, rpmdb_version TEXT NOT NULL,
     return_code INTEGER NOT NULL);
s    CREATE TABLE trans_with_pkgs (
     tid INTEGER NOT NULL REFERENCES trans_beg,
     pkgtupid INTEGER NOT NULL REFERENCES pkgtups);
s    CREATE TABLE trans_error (
     mid INTEGER PRIMARY KEY,
     tid INTEGER NOT NULL REFERENCES trans_beg,
     msg TEXT NOT NULL);
s    CREATE TABLE trans_script_stdout (
     lid INTEGER PRIMARY KEY,
     tid INTEGER NOT NULL REFERENCES trans_beg,
     line TEXT NOT NULL);
s    CREATE TABLE trans_data_pkgs (
     tid INTEGER NOT NULL REFERENCES trans_beg,
     pkgtupid INTEGER NOT NULL REFERENCES pkgtups,
     done BOOL NOT NULL DEFAULT FALSE, state TEXT NOT NULL);
s    CREATE TABLE pkgtups (
     pkgtupid INTEGER PRIMARY KEY,     name TEXT NOT NULL, arch TEXT NOT NULL,
     epoch TEXT NOT NULL, version TEXT NOT NULL, release TEXT NOT NULL,
     checksum TEXT);
sO    CREATE INDEX i_pkgtup_naevr ON pkgtups (name, arch, epoch, version, release);
(   RL  t   strftimeR  R   R   R   R   t   renameR   R   R   R   R[  t   O_CREATR  R  R  R  R  R  R"   (   R3   R   Rb  R  t   opsR  (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR  I  s@    
		
N(<   RP   RQ   RR   t   _history_dirR   R5   R  R  R  R  R  R"   R#  R'  R+  R   R,  R.  R   R9  R<  R>  R@  RB  RJ  RK  RR  RT  RX  R   R   Rp   Rc  Rj  R   R   R   R   R   R   Rw  Rx  R{  Rm   RD   R}  R~  R  R  R  R  R  R  R  R  R  Rz  R  R=  R  (    (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyR     s   <					!		
				*	!					)						Q													@					s  
SELECT pkgtupid,name,epoch,version,release,arch,
  name || "." || arch AS sql_nameArch,
  name || "-" || version || "-" || release || "." || arch AS sql_nameVerRelArch,
  name || "-" || version AS sql_nameVer,
  name || "-" || version || "-" || release AS sql_nameVerRel,
  epoch || ":" || name || "-" || version || "-" || release || "." || arch AS sql_envra,
  name || "-" || epoch || ":" || version || "-" || release || "." || arch AS sql_nevra
  FROM pkgtups
  WHERE 
(-   RL  R   t   os.pathR   R  Rz   R    t   sqlutilsR   R   R   t   yum.miscR    t   yum.constantsR   t   yum.packagesR   R   R   t   yum.i18nR   R	   t   rpmUtils.archR
   R  t	   TS_UPDATEt
   TS_UPDATEDR4  R0  R1  t   TS_OBSOLETEDt   TS_OBSOLETINGR6  R   R   R   R0   R1   RT   Rv   Ry   R   R   R   R  (    (    (    s/   /usr/lib/python2.7/site-packages/yum/history.pyt   <module>   sX   




'0D	 S ?    