
ȔMc           @   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 d  d l	 m
 Z
 m Z d  d l m Z d  d l m Z m Z m Z m Z y e j   Z Wn e j k
 r d Z n Xd   Z d	 e f d
     YZ d d d     YZ d  d l m Z m Z d S(   iN(   t   setCloseOnExec(   t   ChangeSetSorter(   t   INSTALLt   REMOVE(   t   PackageManager(   t   sysconft   ifacet   Errort   _t   asciic         C   s   |  j  d  j   d S(   Ns   %|DSAHEADER?{%{DSAHEADER:pgpsig}}:{%|RSAHEADER?{%{RSAHEADER:pgpsig}}:{%|SIGGPG?{%{SIGGPG:pgpsig}}:{%|SIGPGP?{%{SIGPGP:pgpsig}}:{(none)}|}|}|}|i(   t   sprintft   split(   t   header(    (    s9   /usr/lib/python2.7/dist-packages/smart/backends/rpm/pm.pyt   get_public_key)   s    t   RPMPackageManagerc           B   s   e  Z d    Z RS(   c   .      C   st	  t  j |  t  } | j   | j t d   | j d t |   | j   i  } i  } x+| j	   D]} | j
 |  t k rh g  | j D]5 } | j D]% } | j D] }	 |	 j r |	 ^ q q q }
 |
 j g  | j D]5 } | j D]% } | j D] } | j r | ^ q q q  |
 rxe |
 D] }	 | j
 |	  t k	 r!Pq!q!Wt | | <x1 |
 D]& }	 t | |	 <|	 | k rU| |	 =qUqUWqqh qh Wt t  } | j d  } t j
 d t  r| t j O} n  t j
 d t  r| t j O} n  t j
 d t  r
| t j O} n  t j
 d t  s.t j
 d t  r>| t j O} n  t j
 d t  r`| t j O} n  t j
 d	 t  r| t j O} n  t j
 d
 t  r| t j O} n  t j
 d t  r| t j  O} n  t j
 d t  r| t j! O} n  | j |  t j
 d  } i t j" d 6t j# d 6t j$ d 6t j% d 6t j& d 6t j' d 6t j( d 6t j) d 6j
 |  } | d  k	 rt j+ |  n  t j
 d  } | d  k	 ry  t, | d  } t j- |  Wqt. t/ f k
 r} t0 d | t1 |  f  qXn  y" t2 |  } | j3   } t } Wn t4 k
 rt d  g } xr | j5 | j6    D][ } g  | D]. \ } } d | | t k rzd p}d f ^ qV} | j7 d d j8 |   qIW| j7 t d   t  j9 d  j8 |   g  | D] } | | | f ^ q} t } n X~ d } t } x| D]\ } } | t k rx| j r>t } n  g  | j: D] } | j;   sH| ^ qHd } | j< |  } | | k rd! pd" } | | d } t= j, | t= j>  } yL | j? |  }  t j
 d# t  rt@ |   d$ k rt j9 d%   qn  WnB t j9 k
 rD} t= jA |  t0 d t= jB jC |  | f  n Xt= jA |  | jD |  | | f |  | d& 7} qg  | j: D] } | j;   r| ^ qd } | j: | }! y | jE |!  Wqt j9 k
 r} t0 d' | jF | jG t1 |  f  qXqWi  }" x | D] } t |" | jF <qW~ ~ ~ t j
 d( t  }# |# ss| jH   }$ |$ rsg  }% x |$ D] }& d) |& d }' |& d& \ }( }) |) r|& d* }* |( d+ 7}( |* t jI @r|( d, 7}( n |* t jJ @r|( d- 7}( n  |* t jK @r|( d. 7}( n  |( d+ 7}( |( |) 7}( n  |& d/ t jL k r4t d0  |' |( f }+ n t d1  |' |( f }+ |% j7 |+  qeWt0 d  j8 |%   qsn  t j
 d2  r| jM   n  t jN }, |# s| r|, t jO O}, |, t jP O}, |, t jQ O}, n  | jR |,  tS | |"  }- |- jT t  d  }$ z | jU |- d   }$ Wd  t `V |- jT t  | jW   |$ re	t0 d  j8 g  |$ D] } | d ^ qI	  n  | jX   Xd  S(3   Ns   Committing transaction...i    s   rpm-allfiless
   rpm-justdbs   rpm-noconfigss
   rpm-nodocss   rpm-excludedocss	   rpm-nomd5s   rpm-noscriptss   rpm-notriggerss   rpm-repackages   rpm-tests   rpm-log-levelt   emergt   alertt   critt   errt   warningt   noticet   infot   debugs   rpm-log-filet   ws   %s: %ss   Found unbreakable loops:s   %s [%s]t   It   Rs       s    -> s   Will ask RPM to order it.s   
t   ut   is   rpm-check-signaturess   (none)s   package is not signedi   s	   %s-%s: %ss	   rpm-forces   %s-%s-%si   t    t   <t   >t   =i   s   %s requires %ss   %s conflicts with %ss	   rpm-order(Y   R   t   getProgresst   Truet   startt   setTopicR   t   sett   lent   showt   keyst   getR   t   providest
   upgradedbyt   packagest	   installedt   extendt   upgradest
   providedbyR   t   getTSt   setFlagsR   t   Falset   rpmt   RPMTRANS_FLAG_ALLFILESt   RPMTRANS_FLAG_JUSTDBt   RPMTRANS_FLAG_NOCONFIGSt   RPMTRANS_FLAG_NODOCSt   RPMTRANS_FLAG_NOMD5t   RPMTRANS_FLAG_NOSCRIPTSt   RPMTRANS_FLAG_NOTRIGGERSt   RPMTRANS_FLAG_REPACKAGEt   RPMTRANS_FLAG_TESTt   RPMLOG_EMERGt   RPMLOG_ALERTt   RPMLOG_CRITt
   RPMLOG_ERRt   RPMLOG_WARNINGt   RPMLOG_NOTICEt   RPMLOG_INFOt   RPMLOG_DEBUGt   Nonet   setVerbosityt   opent
   setLogFilet   IOErrort   OSErrorR   t   unicodeR   t	   getSortedt	   LoopErrort   getLoopPathst   getLoopst   appendt   joint   errort   loaderst   getInstalledt   getInfot   ost   O_RDONLYt   hdrFromFdnoR   t   closet   patht   basenamet
   addInstallt   addEraset   namet   versiont   checkt   RPMSENSE_LESSt   RPMSENSE_GREATERt   RPMSENSE_EQUALt   RPMDEP_SENSE_REQUIRESt   ordert   RPMPROB_FILTER_OLDPACKAGEt   RPMPROB_FILTER_REPLACEPKGt   RPMPROB_FILTER_REPLACEOLDFILESt   RPMPROB_FILTER_REPLACENEWFILESt   setProbFiltert   RPMCallbackt
   grabOutputt   runt   tst   setDonet   stop(.   t   selft	   changesett   pkgpathst   progt	   upgradingt   upgradedt   pkgt   prvt   upgt   upgpkgt   upgpkgst   prvpkgRn   t   flagst	   levelnamet   levelt
   rpmlogfilet   rpmlogt   et   sortert   sortedt   forcerpmordert   linesRZ   t   opR+   t	   reinstallt   xt   loaderR   t   modet   fdt   ht   offsett   upgradednamest   forcet   probst	   problinest   probt   name1t   name2R_   t   senset   linet
   probfiltert   cb(    (    s9   /usr/lib/python2.7/dist-packages/smart/backends/rpm/pm.pyt   commit3   sB   










	 
8#
		,#,$


	
,(   t   __name__t
   __module__R   (    (    (    s9   /usr/lib/python2.7/dist-packages/smart/backends/rpm/pm.pyR   1   s   Rk   c           B   s/   e  Z d    Z d   Z e d  Z d   Z RS(   c         C   sS   | |  _  | |  _ i d d 6|  _ d  |  _ d  |  _ d |  _ d  |  _ d  |  _ d  S(   Ni    s   item-numbert    (	   Rt   R   t   dataRE   R   t   rpmoutt   rpmoutbuffert	   lasttopict   topic(   Rq   Rt   R   (    (    s9   /usr/lib/python2.7/dist-packages/smart/backends/rpm/pm.pyt   __init__   s    						c         C   s  | r|  j  st j |  _ t j |  _ t j t  } t j t  } | t j	 t j
 d  d  d d t _ | t j	 t j
 d  d  d d t _ t j d  \ } } t j | d  t j | d  t j |  | t |   |  _  t j |  qn |  j  r|  j   t j t j j   d  t j t j j   d  |  j t _ |  j t _ |  ` |  ` |  j  j   d  |  _  d |  _ n  d  S(   Ni   R   t   errorst   replacei   s   -smart-rpm-out.txtR   (   R   t   syst   stdoutt   stderrt   codecst	   getwritert   ENCODINGt	   getreaderRV   t   fdopent   dupt   tempfilet   mkstempt   dup2RY   RG   t   unlinkt   _process_rpmoutt   filenoRE   R   (   Rq   t   flagt   writert   readerR   t
   rpmoutpath(    (    s9   /usr/lib/python2.7/dist-packages/smart/backends/rpm/pm.pyRl      s6    		
	c         C   s   |  j  r |  j  j   } | s. | r |  j r | rF |  j | 7_ q |  j | } d |  _ |  j r |  j |  j k r |  j |  _ t j |  j  n  t j |  q n  d  S(   NR   (   R   t   readR   R   R   R   R   (   Rq   t   tobuffert   output(    (    s9   /usr/lib/python2.7/dist-packages/smart/backends/rpm/pm.pyR     s    		c         C   s  |  j  r |  j   n  | t j k r | \ } } t | j    } t j t d  | | f  t d  | |  _	 t
 j | t
 j  |  _ t |  j  |  j S| t j k r |  j d  k	 rt
 j |  j  d  |  _ qn
| t j k ru| \ } } | j   }	 |  j d c d 7<|  j j d  |  j j | t d  |	 j  |  j j | d d d |  j |  j j   nq| t j k s| t j k r|  j j | pd | | d |  j |  j j   n| t j k r|  j j d t d	   |  j j d d d  |  j j   n| t j k rE|  j j d  |  j j   n| t j k rt d  | |  _	 d
 | }
 |  j d c d 7<|  j j d  | |  j  k rt d  | } n t d  | } |  j j |
 |  |  j j |
 d d d |  j |  j j   n | t j! k rd  |  _	 d
 | }
 |  j j" |
  s|  j d c d 7<|  j j d  | |  j  k rt d  | } n t d  | } |  j j |
 |  |  j j |
 d d d |  j n |  j j |
  |  j j   n  d  S(   Ns   Processing %s in %ss   Output from %s:s   item-numberi   s   Installing %si    t   subdatat   transs   Preparing...s   R*s   Cleaning %ss   Removing %s(#   R   R   R3   t   RPMCALLBACK_INST_OPEN_FILEt   strt
   getPackageR   R   R   R   RV   RG   RW   R   R    t   RPMCALLBACK_INST_CLOSE_FILERE   RY   t   RPMCALLBACK_INST_STARTR   Rt   t   addt   setSubTopicR^   t   setSubR&   t   RPMCALLBACK_TRANS_PROGRESSt   RPMCALLBACK_INST_PROGRESSt   RPMCALLBACK_TRANS_STARTt   RPMCALLBACK_TRANS_STOPt
   setSubDonet   RPMCALLBACK_UNINST_STARTR   t   RPMCALLBACK_UNINST_STOPt   getSub(   Rq   t   whatt   amountt   totalt   infopathR   R   RZ   t   pkgstrRw   t   subkeyR   (    (    s9   /usr/lib/python2.7/dist-packages/smart/backends/rpm/pm.pyt   __call__$  st    	 

	
"(   R   R   R   Rl   R2   R   R   (    (    (    s9   /usr/lib/python2.7/dist-packages/smart/backends/rpm/pm.pyRk      s   	
	(   R3   R0   (    (   R   R   RV   R   t   localet   smart.util.filetoolsR    t   smart.sorterR   t   smart.constR   R   t   smart.pmR   t   smartR   R   R   R   t   getpreferredencodingR   R   R   Rk   t   smart.backends.rpm.baseR3   R0   (    (    (    s9   /usr/lib/python2.7/dist-packages/smart/backends/rpm/pm.pyt   <module>   s    "
	