ó
Qº’Nc           @   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
 m
 Z
 d  d l m Z d  d l m 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   gettext(   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   sx  | 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 j d t j d	 | d
 d d d ƒ t j d | j ƒ t j d d j t j ƒ  ƒ ƒ | S(   s    setup the logging t   Filest   LogDirs   /var/log/dist-upgrade/s   /*.logs   /%04i%02i%02i-%02i%02is   main.logs   .partialt   levelt   filenamet   formats%   %(asctime)s %(levelname)s %(message)st   filemodet   ws   Using config files '%s's   uname information: '%s't    (   t   getWithDefaultt   ost   patht   existst   mkdirt   globR   t   nowt   yeart   montht   dayt   hourt   minutet   shutilt   movet   joint   basenameR   t   loggingt   basicConfigt   DEBUGt   infot   config_filest   uname(   t   optionst   configt   logdirR*   t
   backup_dirt   ft   fname(    (    s?   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeMain.pyt   setup_loggingC   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 | ƒ | ƒ  } | j	 d d d | d	 t
 ƒ 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't	   sourcedirt   /t   targett   with_dpkg_statust   lspcis   -nnt   stdouti    s	   lspci.txtR"   s   lspci failed: %s(   t	   apt_cloneRA   t   ImportErrorR4   t   errorR%   R&   R2   t   debugt
   save_statet   Truet
   subprocesst   Popent   PIPEt   communicatet   opent   writet   OSError(   R<   RA   RD   t   clonet   st   e(    (    s?   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeMain.pyt   save_system_state^   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   ViewR<   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	   ExceptionR4   t   warningRJ   t   syst   exit(   R:   R;   R<   t   requested_viewt
   view_modult
   view_classt   instanceRW   (    (    s?   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeMain.pyt
   setup_viewp   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   -lsRG   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'(   RN   RO   RP   RQ   R4   RK   RT   R7   R%   t   execvt   environR_   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ÿÿÿÿ(   t   VERSIONs%   release-upgrader version '%s' startedRh   R   i   i    (   R   R   R@   t   DistUpgradeVersionRr   R4   R7   Re   t   needs_screenR%   Rk   t   disable_gnu_screenRp   R   R   t   atexitt   registert   _enableAptCronJobR   t   doPartialUpgradeR_   R`   RX   t   run(   R:   t   argsR;   R<   Rr   t   viewt   app(    (    s?   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeMain.pyt   main¦   s(    	

	
(   t   warningst   filterwarningst   DeprecationWarningRv   R)   R4   R%   R0   RN   R_   R   t   optparseR   R   R   R   t   DistUpgradeConfigParserR   R   R@   RX   Re   Rp   R~   (    (    (    s?   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeMain.pyt   <module>   s&   					!