ó
È”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 Z d  d l Z d  d l m Z m	 Z	 m
 Z
 d  d l m Z d  d l m Z d  d l m Z d  d l m Z m Z m Z e d ƒ Z e d ƒ Z d	 Z d
 Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   iÿÿÿÿN(   t   Enumt   INSTALLt   REMOVE(   t   ElementSorter(   t   PackageManager(   t   PreRequires(   t   sysconft   ifacet   _t   UNPACKt   CONFIGt   DEBIAN_FRONTENDt   APT_LISTCHANGES_FRONTENDt	   DebSorterc           B   s   e  Z d d  „ Z d „  Z RS(   c         C   s'   t  j |  ƒ | r# |  j | ƒ n  d  S(   N(   R   t   __init__t   setChangeSet(   t   selft	   changeset(    (    s9   /usr/lib/python2.7/dist-packages/smart/backends/deb/pm.pyR   /   s    c            sÃ  t  d ƒ \ } } } |  j ƒ  x| D]•} | | } | t k rp | t f } | t f } |  j | | | ƒ n | t f }	 |  j |	 ƒ xz| j D]o}
 t	 |
 t
 ƒ r± | } n | } g  ‰  | ‡  f d † } x0|
 j D]} xý | j D]ï } | j | ƒ t k r{| t k rO| | t f | ƒ | | t f | ƒ | | t f | | ƒ qØ| | t f |	 ƒ | | t f |	 | ƒ qé | j ré | j | ƒ t k	 rPn  | t k r¿| | | t f ƒ qØ| |	 | t f | ƒ qé qé WqÙ PqÙ Wx ˆ  D] } |  j | Œ  qëWq“ W| t k r& g  | j D], } | j D] } | j D] } | ^ q6q)q} | j g  | j D], } | j D] } | j D] } | ^ qxqkq^ƒ x? | D]7 } | j | ƒ t k r˜|  j | | t f | ƒ q˜q˜Wg  | j D]> } | j D]. } | j D] } | j | j k r÷| ^ q÷qêqÝ} | j g  | j D]> } | j D]. } | j D] } | j | j k rK| ^ qKq>q1ƒ xB | D]7 } | j | ƒ t k r}|  j | t f | | ƒ q}q}Wq& q& Wd  S(   Ni   c            s   ˆ  j  |  | | f ƒ d  S(   N(   t   append(   t   predt   succt   priority(   t	   relations(    s9   /usr/lib/python2.7/dist-packages/smart/backends/deb/pm.pyt   add_relationO   s    (   t   ranget   resetR   R	   R
   t   addSuccessorR   t
   addElementt   requirest
   isinstanceR   t
   providedbyt   packagest   gett	   installedt   providest
   upgradedbyt   extendt   upgradest	   conflictst   namet   conflictedby(   R   R   t   HIGHt   MEDIUMt   LOWt   pkgt   opt   unpackt   configt   removet   reqt   req_type_priorityR   t   prvt   prvpkgt   relationt   upgt   upgpkgt   upgpkgst   cnft   cnfpkgst   cnfpkg(    (   R   s9   /usr/lib/python2.7/dist-packages/smart/backends/deb/pm.pyR   4   sv    

	


	

  $%N(   t   __name__t
   __module__t   NoneR   R   (    (    (    s9   /usr/lib/python2.7/dist-packages/smart/backends/deb/pm.pyR   -   s   t   DebPackageManagerc           B   s    e  Z d  Z d „  Z d „  Z RS(   i2   c         C   sÇ  t  j |  ƒ } | j ƒ  | j t d ƒ ƒ | j ƒ  i  } x*| j ƒ  D]} | | t k rI g  | j D]5 } | j	 D]% } | j
 D] } | j rƒ | ^ qƒ qv qi }	 |	 j g  | j D]5 } | j D]% } | j
 D] }
 |
 j rÎ |
 ^ qÎ qÁ q´ ƒ |	 rexi |	 D]^ } | j | ƒ t k s+t d | | f ‚ | | k sQt d | | | | f ‚ | | | <qý WqeqI qI Wt | ƒ } | j ƒ  } | j d t | ƒ ƒ t j t j d d ƒ ƒ } t j d ƒ } | rÛ| j d | ƒ n  t j d ƒ } | r| j d	 | ƒ n  t j d
 ƒ } | r-| j d | ƒ n  t j d ƒ } | rR| j d ƒ n  t ƒ  } t j d ƒ rÉx\ t t | ƒ ƒ D]E } | | \ } } | t k r}| j | ƒ r}| | f | | <q}q}Wn  t j d ƒ r&t j j t ƒ } t j j t ƒ } d t j t <d t j t <| j d ƒ n  t j d ƒ rDt  j! ƒ  } n	 t" j# } | Ji  } d  } xp| rÏg  } | d d } xÇ | rC| d d | k rCt | ƒ |  j% k  rC| j& d ƒ \ } } | t k rè| j | ƒ | k rèq}n  t' | | <i d t 6d | 6d t( 6d t) 6d t 6} | d | | | f IJ| j | ƒ q}W| sPq`n  | } | t k r| j d ƒ | j d ƒ | j d ƒ n{ | | k r¶| j d ƒ | j d ƒ nR | t) k rÒ| j d ƒ n6 | t( k r| j d ƒ | j d ƒ | j d  ƒ n  | t) k r=xG | D] } | j | | d ƒ qWn! x | D] } | j | j* ƒ qDWt+ j, ƒ  j- ƒ  } | d! k r¯t. j. t. j/ t. j0 ƒ } t. j. t. j1 t. j0 ƒ } n  | j2 ƒ  |  j3 | | ƒ } | d! k r t. j. t. j/ | ƒ t. j. t. j1 | ƒ n  t j4 | ƒ s%t j5 | ƒ d k r§t j6 | ƒ rZt j7 | ƒ rZt d" ƒ | d } nI t j4 | ƒ rt d# ƒ | d t j5 | ƒ f } n t d$ ƒ | d } Pn  | J| j8 t | ƒ ƒ | j ƒ  | Jq`W| t" j# k r;| j2 ƒ  | j9 d ƒ | j: d% ƒ } x& | r-t  j; | ƒ | j: d% ƒ } qW| j< ƒ  n  t j d ƒ r™| d  k rct j t =n | t j t <| d  k r‰t j t =q™| t j t <n  | r¯t  j= | ƒ n  | j> ƒ  | j? ƒ  d  S(&   Ns   Committing transaction...s   Installing %s while %s is kept?sD   Two packages (%s and %s) upgrading the same installed package (%s)!?i    t   dpkgs   deb-roots	   --root=%ss   deb-admindirs   --admindir=%ss   deb-instdirs   --instdir=%ss   deb-simulates
   --simulates	   deb-purges   deb-non-interactivet   noninteractivet   nones   --force-confolds   pm-iface-outputi   R0   t   purgeR/   R.   t   installs   [%s] %ss   --force-dependss   --force-remove-essentials   --removes   --purges   --unpacks   --configuret
   MainThreads0   Sub-process %s has received a segmentation faults*   Sub-process %s returned an error code (%d)s"   Sub-process %s exited unexpectedlyi    (@   R   t   getProgresst   startt   setTopicR   t   showt   keysR   R"   R#   R   R!   R$   R%   R   R    R   t   AssertionErrorR   t	   getSortedt   sett   lent   shlext   splitR   R   t   objectR   t   ost   environR   R   t   tempfilet   TemporaryFilet   syst   stdoutR>   t   MAXPKGSPEROPt   popt   TrueR
   R	   R'   t	   threadingt   currentThreadt   getNamet   signalt   SIGQUITt   SIG_IGNt   SIGINTt   flushR@   t	   WIFEXITEDt   WEXITSTATUSt   WIFSIGNALEDt   WTERMSIGt   addt   seekt   readt
   showOutputt   closet   errort   setDonet   stop(   R   R   t   pkgpathst   progt   upgradedR,   R3   R6   R7   R8   R4   t   sortert   sortedt   baseargst   optt   PURGEt   iR-   t   old_debian_frontendt   old_apt_lc_frontendt   outputt   doneRl   t   pkgst   opnamet   argst   thread_namet   quithandlert
   inthandlert   statust   data(    (    s9   /usr/lib/python2.7/dist-packages/smart/backends/deb/pm.pyt   commitµ   s
   

			!

%		

	
c         C   s$  t  j ƒ  } | s¯ | t j k rP | j ƒ  } t  j | d ƒ t  j | d ƒ n  y t  j | d | ƒ Wn4 t k
 rž } | j d | d t	 | ƒ f ƒ n Xt  j
 d ƒ n  | j ƒ  xd t ry t  j | d ƒ \ } } Wn+ t k
 r} | j t j k r‚  qq¼ X| | k r¼ Pq¼ q¼ W| S(   Ni   i   i    s   %s: %s
(   RR   t   forkRV   RW   t   filenot   dup2t   execvpt   OSErrort   writet   strt   _exitRb   RZ   t   waitpidt   errnot   EINTR(   R   t   argvRz   t   pidt	   output_fdt   et   _pidR‚   (    (    s9   /usr/lib/python2.7/dist-packages/smart/backends/deb/pm.pyR@   _  s*    %
	
(   R<   R=   RX   R„   R@   (    (    (    s9   /usr/lib/python2.7/dist-packages/smart/backends/deb/pm.pyR?   ±   s   	ª(   R[   RT   RV   RR   R^   RŽ   RO   t   smart.constR    R   R   t   smart.sorterR   t   smart.pmR   t   smart.cacheR   t   smartR   R   R   R	   R
   R   R   R   R?   (    (    (    s9   /usr/lib/python2.7/dist-packages/smart/backends/deb/pm.pyt   <module>   s    „