ó
üRôSc        
   @   s-  d  d l  Z  e  j d d e ƒ d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 Z
 d  d l m Z d  d l m Z d  d l m Z d d d	 d
 d d d d d d g
 Z d  d l m Z d  d l m Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d S(   iÿÿÿÿNt   ignores   Accessed deprecated(   t   datetime(   t   OptionParser(   t   gettexts   /bins   /boots   /etcs   /initrds   /libs   /lib32s   /lib64s   /sbins   /usrs   /var(   t   DistUpgradeController(   t   DistUpgradeConfigc          C   sy  t  ƒ  }  |  j d d d d d t d d d t d	 ƒ ƒ|  j d
 d d d d d# d t d ƒ ƒ|  j d d d d d d t ƒ|  j d d d d d ƒ|  j d d d d d ƒ|  j d d d d d# d t d ƒ ƒ|  j d d d d d d t d ƒ ƒ|  j d d d d t d d d t d ƒ ƒ|  j d d d d t d t d ƒ ƒ|  j d  d d! d d# d t d" ƒ ƒ|  j ƒ  S($   s/    setup option parser and parse the commandline s   -ss	   --sandboxt   destt   useAufst   defaultt   actiont
   store_truet   helps   Sandbox upgrade using aufss   -cs   --cdromt	   cdromPathsA   Use the given path to search for a cdrom with upgradable packagess   --have-prerequistst   havePrerequistss   --with-networkt   withNetworks   --without-networkt   store_falses
   --frontendt   frontends_   Use frontend. Currently available: 
DistUpgradeViewText, DistUpgradeViewGtk, DistUpgradeViewKDEs   --modet   modet   desktops(   *DEPRECATED* this option will be ignoreds	   --partialt   partials:   Perform a partial upgrade only (no sources.list rewriting)s   --disable-gnu-screens   Disable GNU screen supports	   --datadirt   datadirs   Set datadirN(   R   t
   add_optiont   Falset   _t   Nonet
   parse_args(   t   parser(    (    s?   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeMain.pyt   do_commandline:   s.    	c      
   C   s¥  | j  d d d ƒ } t j j | ƒ s7 t j | ƒ n  t j | d ƒ rð t j ƒ  } | d | j | j	 | j
 | j | j f } t j j | ƒ s¤ t j | ƒ n  xI t j | d ƒ D]1 } t j | t j j | t j j | ƒ ƒ ƒ q¸ Wn  t j j | d ƒ } |  j r| d 7} n  t | d ƒ  Wd	 QXt j d
 t j d | d d d d ƒ t j d | j ƒ t j d d j t j ƒ  ƒ ƒ t j d t j j ƒ | S(   s    setup the logging t   Filest   LogDirs   /var/log/dist-upgrade/s   /*.logs   /%04i%02i%02i-%02i%02is   main.logs   .partialt   aNt   levelt   filenamet   formats%   %(asctime)s %(levelname)s %(message)st   filemodet   ws   Using config files '%s's   uname information: '%s't    s   apt version: '%s'(   t   getWithDefaultt   ost   patht   existst   mkdirt   globR   t   nowt   yeart   montht   dayt   hourt   minutet   shutilt   movet   joint   basenameR   t   opent   loggingt   basicConfigt   DEBUGt   infot   config_filest   unamet   aptt   apt_pkgt   VERSION(   t   optionst   configt   logdirR+   t
   backup_dirt   ft   fname(    (    s?   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeMain.pyt   setup_loggingU   s.    ,2	 c      	   C   s  y d d l  m } Wn t k
 r5 t j d ƒ d  SXt j j |  d ƒ } t j d | ƒ t j	 d ƒ } | ƒ  } | j
 d d d	 | d
 t d t ƒ t j	 | ƒ yQ t j d d g d t j ƒj ƒ  d } t t j j |  d ƒ d ƒ j | ƒ Wn$ t k
 r} t j d | ƒ n Xd  S(   Niÿÿÿÿ(   t   AptClones   failed to import AptClones   apt-clone_system_state.tar.gzs   creating statefile: '%s'i6   t	   sourcedirt   /t   targett   with_dpkg_statust   scrub_sourcest   lspcis   -nnt   stdouti    s	   lspci.txtR#   s   lspci failed: %s(   t	   apt_cloneRF   t   ImportErrorR6   t   errorR&   R'   R3   t   debugt   umaskt
   save_statet   Truet
   subprocesst   Popent   PIPEt   communicateR5   t   writet   OSError(   RA   RF   RI   t	   old_umaskt   clonet   st   e(    (    s?   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeMain.pyt   save_system_states   s"    	()c         C   sÁ   xº |  j  g | j d d ƒ D]} } | s/ q n  y/ t | ƒ } t | | ƒ } | d | ƒ } PWq t k
 r™ } t j d | | f ƒ d | | f GHq Xq Wt j d ƒ d GHt j	 d ƒ | S(   s0    setup view based on the config and commandline t   ViewRA   s   can't import view '%s' (%s)s   can't load %s (%s)s!   No view can be imported, abortingi   (
   R   t   getlistt
   __import__t   getattrt	   ExceptionR6   t   warningRP   t   syst   exit(   R?   R@   RA   t   requested_viewt
   view_modult
   view_classt   instanceR^   (    (    s?   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeMain.pyt
   setup_view‹   s    #c          C   s÷   d }  y= t  j d d g d t  j ƒj ƒ  d } t j d | ƒ Wn t k
 rd t j d ƒ d SX|  | k r  t j d	 ƒ t j	 d
 d d d d |  g ƒ n  d t j
 d <d d d d d d d |  g t j } t j d | ƒ t j	 d
 | ƒ d S(   s…    check if there is a upgrade already running inside gnu screen,
        if so, reattach
        if not, create new screen window
    s$   ubuntu-release-upgrade-screen-windowt   screens   -lsRM   i    s   screen returned: '%s's   screen could not be runNs)   found active screen session, re-attachings   /usr/bin/screens   -ds   -rs   -pt   1t   RELEASE_UPGRADER_NO_SCREENs   -es   \0\0s   -Ls   -ct   screenrcs   -Ss   re-exec inside screen: '%s'(   RU   RV   RW   RX   R6   RQ   RZ   R9   R&   t   execvt   environRf   t   argv(   t
   SCREENNAMEt   outt   cmd(    (    s?   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeMain.pyt%   run_new_gnu_screen_window_or_reattach    s&    ""c          C   s  t  ƒ  \ }  } t d ƒ } t |  | ƒ } d d l m } t j d | ƒ t |  | | ƒ } | j r‰ d t	 j
 k r‰ |  j r‰ t ƒ  n  t | |  d |  j ƒ} t j | j ƒ |  j ræ | j ƒ  sÖ t j d ƒ n  t j d ƒ n  t | ƒ | j ƒ  r d Sd S(	   s    main method t   .iÿÿÿÿ(   R>   s%   release-upgrader version '%s' startedRo   R   i   i    (   R   R   RE   t   DistUpgradeVersionR>   R6   R9   Rl   t   needs_screenR&   Rr   t   disable_gnu_screenRw   R   R   t   atexitt   registert   _enableAptCronJobR   t   doPartialUpgradeRf   Rg   R_   t   run(   R?   t   argsR@   RA   R>   t   viewt   app(    (    s?   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeMain.pyt   mainÁ   s(    	

	
(   t   warningst   filterwarningst   DeprecationWarningR<   R|   R*   R6   R&   R1   RU   Rf   R   t   optparseR   R   R   t   SYSTEM_DIRSR   t   DistUpgradeConfigParserR   R   RE   R_   Rl   Rw   R„   (    (    (    s?   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeMain.pyt   <module>   s<   						!