
ȔMc           @   s  d  d l  m Z m Z m Z m Z m Z m Z d  d l m Z m	 Z	 d  d l
 Td e f d     YZ d e f d     YZ d e f d	     YZ d
 e f d     YZ d e f d     YZ d e f d     YZ d Z d Z d Z d e f d     YZ d e f d     YZ e d  Z d   Z d   Z e d  Z d   Z d   Z e d  Z  e d  Z! d   Z" e e# e# e# d   Z$ e# d!  Z% d"   Z& e' j( d# e&  d$ S(%   i(   t   INSTALLt   REMOVEt   UPGRADEt   FIXt	   REINSTALLt   KEEP(   t   PreRequirest   Package(   t   *t	   ChangeSetc           B   s   e  Z d 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 e d  Z d   Z d   Z d   Z d   Z RS(   c         C   sE   | |  _  i  |  _ | r( |  j |  n  | rA |  j j |  n  d  S(   N(   t   _cachet
   _requestedt   update(   t   selft   cachet   statet	   requested(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   __init__   s    		c         C   s   t  j |   |  j j   d  S(   N(   t   dictt   clearR   (   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR   $   s    c         C   s<   t  j |  |  t |  t k r8 |  j j | j  n  d  S(   N(   R   R   t   typeR	   R   (   R   t   other(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR   (   s    c         C   s   t  |  j |  |  j  S(   N(   R	   R
   R   (   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   copy-   s    c         C   s   |  j  S(   N(   R
   (   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   getCache0   s    c         C   s   |  j    |  j j    f S(   N(   R   R   (   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   getState3   s    c         C   s*   | |  k	 r& |  j    |  j |  n  d  S(   N(   R   R   (   R   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   setState6   s    
c         C   sP   i  } xC |  D]; } | |  j  k } |  | | f | | j | j | j f <q W| S(   N(   R   t	   __class__t   namet   version(   R   R   t   pkgt   req(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   getPersistentState;   s
    *c         C   s   |  j    xs |  j j   D]b } | j | j | j | j f  } | d  k	 r | \ } } | |  | <| r| t |  j	 | <q| q q Wd  S(   N(
   R   R
   t   getPackagest   getR   R   R   t   Nonet   TrueR   (   R   R   R   t   tupt   opR   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   setPersistentStateB   s    
!
c      	   C   sJ  i  } x |  D] } |  | t  k r x | j D] } xx | j D]m } xd | j D]Y } |  j |  t k rM t | | <t j d |  r t j	 d | j
 d | j  q qM qM Wq= Wq- Wt j d | j
  q q Wxw |  D]o } |  | t k r | | k r |  j |  s#t j	 d | j
 d | j  qBt j d | j
 d | j  q q Wd S(   s    Mark all packages that have been auto-installed permanently
            and reset the flag if the package was removed again. Also
            make sure that the auto-flag is carried to the new pkg on
            upgrades/downgrades.
        t   autot   =N(   R   t   providest
   upgradedbyt   packagesR!   R    R#   t   pkgconft   testFlagt   setFlagR   R   t	   clearFlagt   getRequested(   R   t   upgradeR   t   prvt   upgt   upgpkg(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   markPackagesAutoInstalledL   s*    	
				c         C   s   | |  j  k S(   N(   R   (   R   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR0   t   s    c         C   sH   | |  k s t   | r( t |  j | <n | |  j k rD |  j | =n  d  S(   N(   t   AssertionErrorR#   R   (   R   R   t   flag(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   setRequestedw   s
    c         C   s   |  j  |  | k r d  S| t k rw | s5 | j rB t |  | <q | |  k r |  | =| |  j k rt |  j | =qt q nN | s | j r t |  | <n2 | |  k r |  | =| |  j k r |  j | =q n  d  S(   N(   R!   R    t	   installedR   R   (   R   R   R%   t   force(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   set~   s    c         C   s.   |  j  |  } | t k p- | j o- | t k	 S(   N(   R!   R    R9   R   (   R   R   R%   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR9      s    c         C   so   t  |  j  } xY |  D]Q } |  | } | | j |  k	 r | | | <| |  j k rg t | j | <qg q q W| S(   N(   R	   R
   R!   R   R#   (   R   R   t   diffR   t   sop(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt
   difference   s    

c         C   so   t  |  j  } xY |  D]Q } |  | } | | j |  k r | | | <| |  j k rg t | j | <qg q q W| S(   N(   R	   R
   R!   R   R#   (   R   R   t   isctR   R=   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt	   intersect   s    

c         C   sQ   g  } x; |  D]3 } | j  d |  | t k r2 d p5 d | f  q Wd j |  S(   Ns   %s %s
t   It   Rt    (   t   appendR    t   join(   R   t   lR   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   __str__   s    1N(   t   __name__t
   __module__R"   R   R   R   R   R   R   R   R   R&   R5   R0   R8   t   FalseR;   R9   R>   R@   RG   (    (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR	      s"   								
	(				
	
t   Policyc           B   sY   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 RS(	   c         C   s(   | |  _  i  |  _ g  |  _ i  |  _ d  S(   N(   t   _transt   _lockedt   _sysconflockedt   _priorities(   R   t   trans(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR      s    			c         C   sr   |  j  j   |  j j   } xO t j d | j    D]5 } | |  j k r5 |  j j	 |  t
 |  j | <q5 q5 Wd  S(   Nt   lock(   RO   R   RL   R   R,   t   filterByFlagR    RM   RN   RD   R#   (   R   R   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   runStarting   s    c         C   s6   |  j  j   x |  j D] } |  j | =q W|  j 2d  S(   N(   RO   R   RN   RM   (   R   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   runFinished   s    c         C   s   | |  j  k S(   N(   RM   (   R   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt	   getLocked   s    c         C   s6   | r t  |  j | <n | |  j k r2 |  j | =n  d  S(   N(   R#   RM   (   R   R   R7   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt	   setLocked   s    c         C   s   |  j  S(   N(   RM   (   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   getLockedSet   s    c         C   s   d S(   Ni    (    (   R   t	   changeset(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt	   getWeight   s    c         C   s<   |  j  j |  } | d  k r8 | j   |  j  | <} n  | S(   N(   RO   R!   R"   t   getPriority(   R   R   t   priority(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyRZ      s    c         C   s   i  } d  } xH | D]@ } |  j |  } | d  k s@ | | k  rI | } n  | | | <q Wx% | D] } | | | d | | <q^ W| S(   Ni
   (   R"   RZ   (   R   t   pkgsR;   t   lowerR   R[   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   getPriorityWeights   s    	(   RH   RI   R   RS   RT   RU   RV   RW   RY   RZ   R^   (    (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyRK      s   								t   PolicyInstallc           B   s)   e  Z d  Z d   Z d   Z d   Z RS(   s8   Give precedence for keeping functionality in the system.c   	      C   s  t  j |   i  |  _ } i  |  _ } i  |  _ } x|  j j   j   D]} x | j D] } x | j	 D] } x | j
 D] } | j rz |  j |  |  j |  k r t | | <| | k r | | j |  q| g | | <q| | k r| | j |  q| g | | <qz qz Wqj WqZ Wx | j D] } x | j D] } x | j
 D] } | j rG|  j |  |  j |  k rt | | <| | k r| | j |  q| g | | <q| | k r| | j |  q| g | | <qGqGWq7Wq'WqJ Wd  S(   N(   RK   RS   t
   _upgradingt	   _upgradedt   _downgradedRL   R   R    t   upgradest
   providedbyR+   R9   RZ   R#   RD   R)   R*   (	   R   t	   upgradingt   upgradedt
   downgradedR   R3   R2   t   prvpkgR4   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyRS      s>    	
	
c         C   s#   t  j |   |  ` |  ` |  ` d  S(   N(   RK   RT   R`   Ra   Rb   (   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyRT     s    c   	      C   s   d } |  j  } |  j } |  j } x | D] } | | t k r x | j | d  D]) } | j |  t k rQ | d 8} PqQ qQ Wxm | j | d  D]) } | j |  t k r | d 7} Pq q W| d 7} q( | | k r | d 7} q( | d 7} q( W| S(	   Ni    i   i   i   i   i   (    (    (   R`   Ra   Rb   R   R!   R    (	   R   RX   t   weightRe   Rf   Rg   R   R4   t   dwnpkg(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyRY     s&    			

(   RH   RI   t   __doc__RS   RT   RY   (    (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR_      s   	)	t   PolicyRemovec           B   s   e  Z d  Z d   Z RS(   s0   Give precedence to the choice with less changes.c         C   sB   d } x5 | D]- } | | t  k r0 | d 7} q | d 7} q W| S(   Ni    i   i   (   R   (   R   RX   Ri   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyRY   9  s    (   RH   RI   Rk   RY   (    (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyRl   6  s   t   PolicyUpgradec           B   s)   e  Z d  Z d   Z d   Z d   Z RS(   sD   Give precedence to the choice with more upgrades and smaller impact.c         C   s  t  j |   i  |  _ } i  |  _ } i  |  _ } i  |  _ } |  j j   } x|  j j   j	   D]} x | j
 D] } x | j D] } x | j D] }	 |	 j r |  j |  |  j |	  k r | j |  }
 |
 r t |
 |	 <n i t |	 6| | <| j |	  } | r| j |  q+| g | |	 <q q Wq Wqv Wx | j D] } x | j D] } x | j D] } | j ra|  j |  |  j |  k ra| j |  }
 |
 rt |
 | <n i t | 6| | <| j |  } | r| j |  q| g | | <qaqaWqQWqAWqf Wx| D]z} t j | |  } i  } i  } i  } | g g } x| rB| j d  } t |  } | d } x | j D] } x | j D] } x | j D] } | j r| | k r| | k r|  j |  |  j |  k r| d k r4d | d | | <| j | i   } x | d D] } t | | <qWn  | j | | g  qqWqWq|Wx | j
 D] } x | j D] } x | j D] }	 |	 j r|	 | k r|	 | k r|  j |  |  j |	  k  r| d k rd | d | | <| j | i   } x" | d d !D] } t | | <qWn  | j | |	 g  qqWqqWqaWqGW| rg  | D] } | | | | f ^ qP} | j   | | | <qqW|  j j j   } t | |   x/ t |  D]! \ } } d | d |  j | <qWd  S(   Ni    ii   ig      id   (   RK   RS   R`   Ra   t
   _sortbonust   _stablebonusRL   t   getQueueR   R    Rc   Rd   R+   R9   RZ   R!   R#   RD   R)   R*   R   t   fromkeyst   popt   lent
   setdefaultt   sortt   _queuet   keyst   sortUpgradest	   enumerate(   R   Re   Rf   t	   sortbonust   stablebonust   queueR   R3   R2   Rh   t   dctt   lstR4   t   bonuspkgt   upgmapt   sbt
   bonusvaluet	   bonusdepst   patht   pathlent   depst   pathpkgR\   t   i(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyRS   E  s    		 	

#
''
c         C   s   t  j |   |  ` |  ` d  S(   N(   RK   RT   R`   Ra   (   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyRT     s    c         C   s  d } |  j  } |  j } |  j } |  j } d } i  } x | D] }	 | |	 t k r | j |	 d  }
 x |
 D]) } | j |  t k rl | d 8} Pql ql W| d 7} q= | d 7} | j |	  } | r= | | j |	 d  7} | j |  q= q= Wxi | D]a }	 | j |	  } | r xC | D]8 \ } } x) | D] } | | k r+Pq+q+W| | 7} PqWq q Wt |  } | d | | | 7} | S(   Ni    i   i   i(    (	   R`   Ra   Rn   Ro   R   R!   R    R   Rs   (   R   RX   Ri   Re   Rf   Rz   R{   t   installedcountt   upgradedmapR   R~   t   lstpkgt   upgpkgsR   R   R   t   deppkgt   upgradedcount(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyRY     s@    				


(   RH   RI   Rk   RS   RT   RY   (    (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyRm   B  s   	`	t   Failedc           B   s   e  Z RS(    (   RH   RI   (    (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR     s    i   i   i   t   Transactionc           B   s   e  Z d d 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   Z d d  Z d d  Z d d  Z d d  Z d d  Z d d  Z d   Z d   Z RS(   c         C   sR   | |  _  | r | |   p$ t |   |  _ | p9 t |  |  _ | pH i  |  _ d  S(   N(   R
   RK   t   _policyR	   t
   _changesetRv   (   R   R   t   policyRX   R|   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR     s    	!c         C   s   |  j  j   |  j j   d  S(   N(   R   R   Rv   (   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR     s    c         C   s   |  j  S(   N(   R
   (   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR     s    c         C   s   |  j  S(   N(   Rv   (   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyRp     s    c         C   s   |  j  S(   N(   R   (   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt	   getPolicy  s    c         C   s   | |   |  _  d  S(   N(   R   (   R   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt	   setPolicy  s    c         C   s   |  j  j |  j  S(   N(   R   RY   R   (   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyRY     s    c         C   s   |  j  S(   N(   R   (   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   getChangeSet  s    c         C   s   | |  _  d  S(   N(   R   (   R   RX   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   setChangeSet  s    c         C   s   |  j  j   S(   N(   R   R   (   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR     s    c         C   s   |  j  j |  d  S(   N(   R   R   (   R   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR     s    c         C   s   t  |  j  S(   N(   t   boolR   (   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   __nonzero__  s    c         C   s   t  |  j  S(   N(   t   strR   (   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyRG     s    i    c      	   C   s  | d  k } | r g  } n  t | | <| j | t  | j } x | j D] } x | j D] }	 x |	 j D] }
 |
 | k r qh n  | |
  s t | |
 <qh n  |
 | k r t t	 d  | |
 f  n  |  j
 |
 | | | |  | j t |
 f  qh WqX WqH Wx | j D] }	 x |	 j D] } x | j D] } | | k r>q&n  | |  sZt | | <q&n  | | k rt t	 d  | | f  n  |  j
 | | | | |  | j t | f  q&WqWqW|  j j | j  } x | D] } | | k	 r| j |  r| |  st | | <qn  | | k r<t t	 d  | | f  n  |  j
 | | | | |  qqWx | j D] } i  } t } xX | j D]M }	 xC |	 j D]5 }
 | |
  rt } Pn  |
 | k rt | |
 <qqWqPqW| rqfn  | st t	 d  | | f  n  t |  d k r9|  j | j   d | | | |  qf| j t | | | j   f  qfW| r{|  j | | | |  n  d  S(   Ns1   Can't install %s: conflicted package %s is lockeds:   Can't install %s: it's conflicted by the locked package %ss*   Can't install %s: it can't coexist with %ss(   Can't install %s: no package provides %si   i    (   R"   R#   R;   R    R9   t	   conflictsRd   R+   R   t   _t   _removeRD   t   PENDING_UPDOWNR)   t   conflictedbyR
   R    R   t   coexistst   requiresRJ   Rs   t   _installt   popitemt   PENDING_INSTALLRw   t   _pending(   R   R   RX   t   lockedt   pendingt   deptht
   ownpendingt   isinstt   cnfR2   Rh   t   cnfpkgt   namepkgst   namepkgR   t   prvpkgst   found(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR     s    	
	


 #c      	   C   s  | j  r t t d   n  | d  k } | r6 g  } n  t | | <| j | t  | j } xy| j D]n} xe| j	 D]Z}	 x$ |	 j
 D] }
 | |
  r Pq q Wqs i  } t } xj |	 j D]_ } xU | j
 D]G } | | k r q n  | |  r t } Pn  | | k r t | | <q q Wq Pq W| r%qs n  | rS| j t | | |	 j
 | j   f  qs xw |	 j
 D]l }
 | |
  suq]n  |
 | k rt t d  | |
 f  n  |  j |
 | | | |  | j t |
 f  q]Wqs Wqc W| r|  j | | | |  n  d  S(   Ns*   Can't remove %s: it's an essential packages   Can't remove %s: %s is locked(   t	   essentialR   R   R"   R#   R;   R   R9   R)   t
   requiredbyR+   RJ   Rd   RD   t   PENDING_REMOVERw   R   R   R   (   R   R   RX   R   R   R   R   R   R2   R   t   reqpkgR   R   Rh   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR   g  sT    		
	c         C   s  | j  } |  j j } | |  } i  } x | j D]{ }	 xr |	 j D]g }
 x^ |
 j D]S } | |  rg d  S| |  | k  r qQ n  | | k rQ | | k rQ t | | <qQ qQ WqA Wq1 Wx | j D]{ }
 xr |
 j D]g }	 x^ |	 j D]S } | |  | k r q n  | |  rd  S| | k r | | k r t | | <q q Wq Wq W|  j j	 } | |  | f g } xp | D]h } y5 | j
   } | j
   } |  j | | | d  |  Wn t k
 rqaX| j | |  | f  qaWyi  } x | j D]t }
 xk |
 j D]` }	 xW |	 j D]L } | |  | k rq n  | |  r3t  n  | | k r t | | <q q WqWqWx | j D]t }	 xk |	 j D]` }
 xW |
 j D]L } | |  | k rqn  | |  rt  n  | | k rt | | <qqWqrWqbWWn t k
 rnt Xxp | D]h } y5 | j
   } | j
   } |  j | | | d  |  Wn t k
 rDqX| j | |  | f  qWt |  d k r| j   | j | d d  n  d  S(   Ni   i    (   R9   R   RZ   R)   R*   R+   R#   Rc   Rd   RY   R   R   R"   R   RD   t   StopIterationRs   Ru   R   (   R   R   RX   R   R   R   t   getpriorityt   pkgpriorityR   R2   R3   R4   Rh   t	   getweightt   alternativest   cst   lkt   dwnpkgsRj   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   _updown  s    			
c         C   s\  | j  } |  j j } g  } x| r,| j d  } | d }	 |	 t k r] | j | d  q |	 t k r| \ }	 }
 } } t } xZ t t	 |  d d d  D]< } | | } | |  r t
 } Pn  | | k r | | =q q W| r q n  | st t d  |
 | f  n  t	 |  d k rgg  } g  } t |  d } |  j j |  } x | D] } y5 | j   } | j   } |  j | | | d  |  Wn& t k
 r} | j t |   qSX| j | |  | | | | | f  | d 7} qSW| st t d  |
 | d j |  f  n  | j   | j | d d  t	 |  d k r| j | d d  qq)|  j | d | | | |  q |	 t k r | \ }	 }
 } } } g  | D] } | |  r| ^ q} | sq n  t } x$ | D] } | |  rt
 } PqqW| rq n  g  | D] } | | k r| ^ q} | rg  } g  } |  j j |  } x | D] } y5 | j   } | j   } |  j | | | d  |  Wn& t k
 r} | j t |   qbX| j | |  | | | | f  qbWn  | s| rxB | D]: } | | k r| |  rt t d	  |
 | f  qqWxa | D]Y } | |  scqKn  | | k rt t d	  |
 | f  n  |  j | | | | |  qKWq n  | j   } | j   } y x< | D]4 } | | k r| |  rt t d
  |  qqWx^ | D]V } | j  |  s*qn  | | k rLt t d
  |  n  |  j | | | d  |  qWWn& t k
 r} | j t |   n X| j | |  | | f  | st t d  |
 | d j |  f  n  | j   | j | d d  t	 |  d k r)| j | d d  q)q q Wx$ | D] }
 |  j |
 | | |  q4W| 2d  S(   Ni    i   is(   Can't install %s: no package provides %sgư>sA   Can't install %s: all packages providing %s failed to install:
%ss   
i   s/   Can't remove %s: requiring package %s is lockeds   %s is locked(   R9   R   RY   Rr   R   RD   R   RJ   t   rangeRs   R#   R   R   Rx   R^   R   R   R"   t   unicodeRE   Ru   R   R   R   R   R   (   R   RX   R   R   R   R   R   t   updownt   itemt   kindR   R   R   R   R   Rh   R   t   failurest	   keepordert   pwR   R   t   eR2   t   reqpkgst   xR   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR     s    		
#


%%!
c      
   C   sZ  | j  } |  j j } t | |  j  i  } | j   }	 | |  }
 x | D] } | | k ro | |  ro qJ n  y5 | j   } | j   } |  j | | | d  |  Wn t k
 r } qJ X| | | <| |  } | |
 k  rJ | }
 | j |  qJ qJ Wi  } xK | D]C } | j	 |  t
 k r| j	 |  } | rF| j |  qFqqWx	| j   D] } | j	 |  } | rW| |	 j	 |  k rW| | k rW| | k rWyl | j   } | j   } | t k r|  j | | | d  |  n( | t
 k r
|  j | | | d  |  n  Wn t k
 r } qRX| |  } | |
 k  rR| }
 | j |  qRqWqWWd  S(   N(   R9   R   RY   Rx   R   R   R"   R   R   R!   R    R   Rw   R   R   (   R   R\   RX   R   R   R   R   R   t   lockedstatet   origchangesetRi   R   R   R   R   t   csweightt   lockedstatesR   R%   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   _upgrade  sV    	
 c         C   s  |  j  j } | j } t |  x| D]x} | |  s> q& n  yxp | j D]e }	 x\ |	 j D]. }
 x$ |
 j D] } | |  rk Pqk qk Wq[ Pq[ Wt j t	 d  | |	 f  t
  qK Wx} | j D]r } xi | j D]^ }
 xU |
 j D]J } | | k r q n  | |  r t j t	 d  | | f  t
  q q Wq Wq Wx} | j D]r }
 xi |
 j D]^ } xU | j D]J } | | k rvq^n  | |  r^t j t	 d  | | f  t
  q^q^WqNWq>W|  j j | j  } x\ | D]T } | |  r| | k	 r| j |  rt j t	 d  | | f  t
  qqWWq& t
 k
 r<n Xq& g  } g  } y5 | j   } | j   } |  j | | | d  |  Wn& t k
 r} | j t |   n X| j | |  d | f  yK | j   } | j   } |  j | | | d  |  |  j | | | |  Wn& t k
 r:} | j t |   n X| j | |  | f  | st t	 d  | d j |  f  n  | j   | j | d d  q& Wd  S(	   Ns&   Unsatisfied dependency: %s requires %ss,   Unsatisfied dependency: %s conflicts with %ss    Package %s can't coexist with %sgư>s   Can't fix %s:
%ss   
i    i   (   R   RY   R9   Rx   R   Rd   R+   t   ifacet   debugR   R   R   R)   R   R
   R    R   R   R   R   R"   R   RD   R   R   R   RE   Ru   R   (   R   R\   RX   R   R   R   R   R   R   R   R2   Rh   R   R   R   R   R   R   R   R   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   _fix  s    	


c   
      C   sZ  | t  k rI|  j j } i  } y | j   } xp | j D]e } x\ | j D]Q } xH | j D]= } | j   | k  ru qW n  | |  r t  n  t | | <qW WqG Wq7 Wxp | j	 D]e } x\ | j
 D]Q } xH | j D]= }	 |	 j   | k r q n  | |	  r t  n  t | |	 <q Wq Wq WWn t k
 r'qVXx+ | D] } | |  j | <q/Wn | |  j | <d  S(   N(   R   R   R9   RZ   R)   R*   R+   R   R#   Rc   Rd   Rv   (
   R   R   R%   R   t   _upgpkgsR   R2   R3   R4   Rh   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   enqueueF  s4    		c   	      C   s0  |  j  j   z|  j j   } | j } |  j  j   j   } g  } x\|  j D]Q} |  j | } | t k r | | k r | | =n  t | | <qM | t	 k r | |  r | | k r t
 t d  |  n  | j | t	  t | | <qM | t k r>| |  r!| | k r!t
 t d  |  n  | j | t  t | | <qM | t k r| | k rlt
 t d  |  n  | j | t	 d t t | | <qM | t k rM qM qM Wg  } g  } x |  j D] } |  j | } | t k r| j rt	 } qt } n  | t	 k s
| t k rB|  j | | | |  | | k r| j | t  qq| t k rg|  j | | | |  q| t k r| j |  q| t k r| j |  qqW| r|  j | | |  n  | r|  j | | | |  n  | r|  j | | | |  n  |  j j |  Wd  |  j j   |  j  j   Xd  S(   Ns   Can't install %s: it's lockeds   Can't remove %s: it's lockeds   Can't reinstall %s: it's lockedR:   (   R   RS   R   R   R9   RW   Rv   R   R#   R    R   R   R;   R   R   R   R   R8   R   RD   R   R   R   R   R   R   RT   (	   R   RX   R   R   R   R   R%   R   t   fixpkgs(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   rund  sp    	
			N(   RH   RI   R"   R   R   R   Rp   R   R   RY   R   R   R   R   R   RG   R   R   R   R   R   R   R   R   (    (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR     s*   												`DZ;`	t   ChangeSetSplitterc           B   s   e  Z d  Z e d  Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z d	   Z d d
  Z d d  Z d   Z d   Z RS(   i    c         C   s   | |  _  | |  _ i  |  _ d  S(   N(   R   t   _forcerequiresRM   (   R   RX   t   forcerequires(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR     s    		c         C   s   |  j  S(   N(   t   _userequires(   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   getForceRequires  s    c         C   s   | |  _  d  S(   N(   R   (   R   R7   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   setForceRequires  s    c         C   s   | |  j  k S(   N(   RM   (   R   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyRU     s    c         C   s6   | r t  |  j | <n | |  j k r2 |  j | =n  d  S(   N(   R#   RM   (   R   R   R7   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyRV     s    c         C   s!   |  j  j   |  j  j |  d  S(   N(   RM   R   R   (   R   R;   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   setLockedSet  s    c         C   s   |  j  j   d  S(   N(   RM   R   (   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   resetLocked  s    c         C   sq  |  j  } x| j D]} x| j D]} g  | j D]? } | j |  t k sl | j |  t k	 r3 | j r3 | ^ q3 } | s q# n  t }	 xf | j	 D][ } xQ | j D]C }
 | j |
  t k s |
 j r | j |
  t k	 r t
 }	 Pq q Wq Pq W|	 r q# n  t }	 x | j	 D]t } xj | j D]\ }
 | j |
  t k r|
 | k ry |  j | |
 |  Wn t k
 rpq{Xt
 }	 PqqWqPqW|	 rq# n  t }	 t
 } x | j	 D] } xv | j D]h }
 | j |
  t k	 rqn  t } |
 | k ry |  j | |
 |  Wn t k
 rq!Xt
 }	 PqqWqPqW|	 r9q# n  | oU|  j pUt | t  } x | D] } | j |  } | r| | k ry9 | t k r|  j | | |  n |  j | | |  Wq_t k
 r| r  qqXq_n  | r_t t d  | | f  q_q_Wq# Wq Wg  | j D], } | j D] } | j D] } | ^ q7q*q} | j g  | j D], } | j	 D] } | j D] }
 |
 ^ qyqlq_ | | t k rx | D]S } | j |  t k r| | k rt t d  |  n  |  j | | |  qqWnj xg | D]_ } | j |  t k r
| | k r
| | k rSt t d  |  n  |  j | | |  q
q
Wd  S(   Ns'   No providers for '%s', required by '%s's   Package '%s' is locked(   R   R)   R   R+   R!   R    R   R9   RJ   Rd   R#   t   includet   Errort   excludeR   t
   isinstanceR   R   R*   t   extendRc   (   R   t   subsetR   R   R;   R2   R   R   R   R   Rh   t	   wasbrokent   neededt   reqpkgopR3   R4   t   relpkgst   relpkg(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR     s    			 
 !c      	   C   s  |  j  } x | j D]} t } xf | j D][ } xQ | j D]C } | j |  t k sr | j r9 | j |  t k	 r9 t	 } Pq9 q9 Wq) Pq) W| r q n  t } x | j D]t } xj | j D]\ } | j |  t k r | | k r y |  j
 | | |  Wn t k
 rqXt	 } Pq q Wq Pq W| r(q n  t } t	 }	 x | j D] } xv | j D]h } | j |  t k	 roqNn  t }	 | | k rNy |  j | | |  Wn t k
 rqXt	 } PqNqNWq>Pq>W| s |	 rq n  |  j st | t  r t t d  | | f  q q Wg  | j D]8 }
 |
 j D]( } | j D] } | | k	 r0| ^ q0q#q} | j g  | j D]8 } | j D]( }
 |
 j D] } | | k	 r~| ^ q~qqqd x | D] } | j |  t k s| j r| j |  t k	 r| | k rt t d  | | f  n  | | t k r1|  j | | |  qG|  j
 | | |  qqWg  | j D], } | j D] } | j D] } | ^ qoqbqU} | j g  | j D], } | j D] } | j D] } | ^ qqq | | t k rGx | D]_ } | j |  t k r| | k r| | k r*t t d  |  n  |  j
 | | |  qqWn^ x[ | D]S } | j |  t k rN| | k rt t d  |  n  |  j | | |  qNqNWd  S(   Ns'   No providers for '%s', required by '%s's(   Can't remove %s, which conflicts with %ss   Package '%s' is locked(   R   R   RJ   Rd   R+   R!   R    R9   R   R#   R   R   R   R   R   R   R   R   R   R)   R   R*   Rc   (   R   R   R   R   R;   R   R   R2   Rh   R   R   t   cnfpkgsR   R3   R4   R   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR   N  s    			 !c         C   sY  |  j  } | d  k r6 |  j } |  j rB d d GHqB n | j   } |  j r~ | j |  t k rf d pi d } d | | f GHn  | | k r t t d  |  n  | | k r t t d  |  n  t	 | | <| | } | | <y9 | t k r|  j
 | | |  n |  j | | |  Wn; t k
 rT} |  j rGd | | | f GHn  | | =  n Xd  S(	   Nt   -iO   R    R   s   Including %s of %ss    Package '%s' is not in changesets   Package '%s' is lockeds   FAILED: Including %s of %s: %s(   R   R"   RM   t   DEBUGR   R!   R    R   R   R#   R   R   (   R   R   R   R   R;   t   stropR%   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR     s0    			 	!
	c         C   sy  |  j  } | d  k r6 |  j } |  j rB d d GHqB n | j   } |  j r~ | j |  t k rf d pi d } d | | f GHn  | | k r t t d  |  n  | | k r t t d  |  n  t	 | | <| | k r | | =n  | | } yH | t k r|  j
 | | |  n" | t k r3|  j | | |  n  Wn> t k
 rt} |  j rdd | | | f GHn  | | | <  n Xd  S(	   NR   iO   R    R   s   Excluding %s of %ss    Package '%s' is not in changesets   Package '%s' is lockeds   FAILED: Excluding %s of %s: %s(   R   R"   RM   R   R   R!   R    R   R   R#   R   R   R   (   R   R   R   R   R;   R   R%   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR     s6    			 	!


	
c         C   sR   |  j  j   } x< | j   D]. } y |  j | |  Wq t k
 rI q Xq Wd  S(   N(   R   R!   Rw   R   R   (   R   R   R;   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt
   includeAll  s    c         C   sR   |  j  j   } x< | j   D]. } y |  j | |  Wq t k
 rI q Xq Wd  S(   N(   R   R!   Rw   R   R   (   R   R   R;   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt
   excludeAll  s    N(   RH   RI   R   R#   R   R   R   RU   RV   R   R   R   R   R"   R   R   R   R   (    (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR     s   								x"		c         C   s9  i  } x4 |  D], } i  } t  | |  } | | =| | | <q W|  j   |  j   g  } i  } | r xE |  D] } | j |  | | <qj Wn! x |  D] } | j   | | <q Wx |  D]x } | | } xe t t |   D]D }	 | |	 }
 |
 | k s| | | |
 k r | j |	 |  Pq q W| j |  q W| |  (d  S(   N(   t   recursiveUpgradesRu   t   reverseRZ   R   Rs   t   insertRD   (   R\   R   R   R   R}   t   rupgt   newpkgsR[   t   pkgupgsR   t   newpkg(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyRx     s0    



 c         C   sf   t  | |  <xU |  j D]J } xA | j D]6 } x- | j D]" } | | k r4 t | |  q4 q4 Wq$ Wq Wd  S(   N(   R#   Rc   Rd   R+   R   (   R   R;   R3   R2   Rh   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR   5  s    
c         C   s   g  } i  } t  j |  t  } x- |  D]% } | j t | | |  | f  q% W| j   | j   g  | D] } | d ^ qi |  (d  S(   Ni   (   R   Rq   R#   RD   t   recursiveInternalRequiresRu   R   (   R\   t   rellstt   numrelt   pkgmapR   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   sortInternalRequires=  s    #

c      
   C   s   | d  k r i  } n  t | | <| | k r3 | | Sd } x | j D] } x | j D]u } xl | j D]a } | |  k rc | | k rc | d 7} | | k r | | | 7} q | t |  | | |  7} qc qc WqS WqC W| | | <| S(   Ni    i   (   R"   R#   R)   R   R+   R   (   R   R   R   t   donet   nR2   R   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR   G  s"    	


c         C   s   x |  j  D] } | | k r
 t | | <xg | j D]Y } | | k r0 t | | <x: | j D], } | | k rV t | | <t | |  qV qV Wq0 q0 Wq
 q
 Wd  S(   N(   R   R#   Rd   R+   t   forwardRequires(   R   t   mapR   R2   Rh   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR   [  s    


c         C   s   x |  j  D] } | | k r
 t | | <xg | j D]Y } | | k r0 t | | <x: | j D], } | | k rV t | | <t | |  qV qV Wq0 q0 Wq
 q
 Wd  S(   N(   R)   R#   R   R+   t   backwardRequires(   R   R   R2   R   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR   g  s    


c         C   sV   | d  k r i  } n  t |  |  x- | j   D] } t | t  s/ | | =q/ q/ W| S(   N(   R"   R   Rw   R   R   (   R   R   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   forwardPkgRequiress  s    	c         C   sV   | d  k r i  } n  t |  |  x- | j   D] } t | t  s/ | | =q/ q/ W| S(   N(   R"   R   Rw   R   R   (   R   R   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   backwardPkgRequires|  s    	c      
   C   s  i  } xI | j  |  j  D]5 } | |  k	 r |  j |  r t | |  | f <q q WxX |  j D]M } xD | j D]9 } x0 | j D]% } | |  k	 r| t | |  | f <q| q| Wql Wq\ WxX |  j D]M } xD | j D]9 } x0 | j D]% } | |  k	 r t | |  | f <q q Wq Wq W|  g } i  }	 x| r| j	   }
 t |	 |
 <x|
 j
 D]} i  } x| j D]D } x: | j D], } | |
 k s| |  k rPn  t | | <qfWqVPqVWx]| D]U} | |	 k rqn  t |	 | <| j |  xU | j  | j  D]A } | | k r| |  k	 r| j |  rt | | | f <qqWxd | j D]Y } xP | j D]E } x< | j D]1 } | |  k	 rV| | k rVt | | | f <qVqVWqFWq6Wxd | j D]Y } xP | j D]E } x< | j D]1 } | |  k	 r| | k rt | | | f <qqWqWqWqWq@WqWi  } x | D] \ } } | G| GHt | | <x} | j D]r } xi | j D]^ } xU | j D] } | | j k r\Pq\q\Wx. | j D]# } t | | <| j t |   qWqLWq<WqW| S(   s!  
    For a given package, return every package that *might* get
    removed if the given package was installed. The alternate
    packages are every package that conflicts with any of the
    required packages, or require any package conflicting with
    any of the required packages.
    (   R    R   R   R#   R   Rd   R+   R)   R   Rr   R   RD   R   R   R   (   R   R   R   R   R   R2   Rh   R   R|   R   t   qpkgR   R   t   _prvpkgt
   alternatesR   t   _prvt   _reqpkg(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   getAlternates  s~    		

+	

#c         C   s   | r | r |  j    } n | rL g  |  j    D] } | j r. | ^ q. } ny | r g  } xj |  j    D]P } | j s | j |  qe x. | j D]# } | j   s | j |  Pq q Wqe Wn	 t d  | d  k r | } n  t |  | | |  S(   Ns4   checkPackagesSimple() called with invalid parameters(   R    R9   RD   t   loaderst   getInstalledR   R"   t   checkPackages(   R   t   checksett   reportR9   t	   availablet	   relatesetR   t   loader(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   checkPackagesSimple  s"    +			c      
   C   s  t  |  } | j   t j | t  } t } i  } x| D]} xz | j D]o } xf | j D]. } x$ | j D] }	 |	 | k rk Pqk qk Wq[ Pq[ W| s t St } t	 j
 t d  | | f  qK W| j s q; n  x | j D] }
 xv |
 j D]k } xb | j D]W }	 |	 | k	 r |	 j r |	 | k r | s(t St } t	 j
 t d  | |	 f  q q Wq Wq W|  j | j  } x | D] } | | k	 rs| j rs| | k rs| | f | k rst | | | f <| j |  s| st St } t	 j
 t d  | | f  qqsqsWq; W| S(   Ns&   Unsatisfied dependency: %s requires %ss,   Unsatisfied dependency: %s conflicts with %ss    Package %s can't coexist with %s(   t   listRu   R   Rq   R#   RJ   R   Rd   R+   R   t   infoR   R9   R   R    R   R   (   R   R
  R  R  t   problemst   coexistcheckedR   R   R2   Rh   R   R   R   (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyR	    sZ    
			c         C   s   |  j  t j  |  j  t j  |  j  t j  |  j  t j  |  j  t j  |  j  t j  |  j  t j	  |  j  t j
  |  j  t j  |  j  t  |  j  t  |  j  t  d  S(   N(   t   bindR_   RY   Rl   Rm   R   R   R   R   R   R   R   Rx   R   R	  (   t   psyco(    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   enablePsyco$  s    s   enable-psycoN()   t   smart.constR    R   R   R   R   R   t   smart.cacheR   R   t   smartR   R	   t   objectRK   R_   Rl   Rm   R   R   R   R   R   R   R   R"   Rx   R   R   R   R   R   R   R   R  RJ   R  R	  R  t   hookst   register(    (    (    s5   /usr/lib/python2.7/dist-packages/smart/transaction.pyt   <module>   s<   .
8N   p		
					S6	