
Y]B%              
   @   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 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   Z d d   Z d d   Z d d   Z d d   Z d d   Z d S)    N)datetime)OptionParser)gettextz/binz/bootz/etcz/initrdz/libz/lib32z/lib64z/sbinz/usrz/var   )DistUpgradeConfigc              C   s  t    }  |  j d d d d d d d d d	 t d
  |  j d d d d d d d	 t d  |  j d d d d d d d |  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 d d d d	 t d  |  j d  d d d d d	 t d!  |  j d" d d# d d$ d	 t d%  |  j d& d d d d' d d d	 t d(  |  j   S))z/ setup option parser and parse the commandline z-sz	--sandboxdestZuseAufsdefaultFaction
store_truehelpzSandbox upgrade using aufsz-cz--cdromZ	cdromPathNzAUse the given path to search for a cdrom with upgradable packagesz--have-prerequistsZhavePrerequistsz--with-networkZwithNetworkz--without-networkZstore_falsez
--frontendfrontendz_Use frontend. Currently available: 
DistUpgradeViewText, DistUpgradeViewGtk, DistUpgradeViewKDEz--modemodeZdesktopz(*DEPRECATED* this option will be ignoredz	--partialpartialz:Perform a partial upgrade only (no sources.list rewriting)z--disable-gnu-screenzDisable GNU screen supportz	--datadirdatadir.zSet datadirz--devel-releaseZdevel_releasez"Upgrade to the development release)r   Z
add_option_
parse_args)parser r   =/usr/lib/python3/dist-packages/DistUpgrade/DistUpgradeMain.pydo_commandline6   s4    	r   c       	      C   s  | j  d d d  } t j j |  s4 t j |  t j | d  r t j   } | d | j | j	 | j
 | j | j f } t j j |  s t j |  xF t j | d  D]1 } t j | t j j | t j j |    q Wt j j | d  } |  j r| d 7} t | d   Wd	 QRXt j d
 t j d | d d d d  t j d | j  t j d d j t j     t j j d	  } | d j j } t j d |  t j d t j  | S)z setup the logging ZFilesZLogDirz/var/log/dist-upgrade/z/*.logz/%04i%02i%02i-%02i%02izmain.logz.partialaNlevelfilenameformatz%%(asctime)s %(levelname)s %(message)sfilemodewzUsing config files '%s'zuname information: '%s' aptzapt version: '%s'zpython version: '%s') ZgetWithDefaultospathexistsmkdirglobr   nowZyearZmonthZdayZhourZminuteshutilZmovejoinbasenamer   openloggingZbasicConfigDEBUGinfoZconfig_filesunamer   Zapt_pkgZCacheZcurrent_verZver_strsysversion)	optionsconfiglogdirr$   Z
backup_dirffnamecacheZapt_versionr   r   r   setup_loggingT   s4    ,/	
 r5   c             C   sK  y d d l  m } Wn# t k
 r9 t j d  d  SYn Xt j j |  d  } t j d |  t j	 d  } |   } | j
 d d d	 | d
 d d d  t j	 |  yg t j d d g d t j d d j   d } t t j j |  d  d   } | j |  Wd  QRXWn6 t k
 rF} z t j d |  WYd  d  } ~ Xn Xd  S)Nr   )AptClonezfailed to import AptClonezapt-clone_system_state.tar.gzzcreating statefile: '%s'6   Z	sourcedir/targetZwith_dpkg_statusTZscrub_sourcesZlspciz-nnstdoutuniversal_newlinesr   z	lspci.txtr   zlspci failed: %s)Z	apt_cloner6   ImportErrorr)   errorr   r    r&   debugumaskZ
save_state
subprocessPopenPIPEcommunicater(   writeOSError)r1   r6   r9   Z	old_umaskZclonesr2   er   r   r   save_system_stateu   s&    		!rH   c       	      C   s   x |  j  g | j d d  D] } | s, q yO d d l m } | d | d  } t | |  } | d | d |  j  } PWq t k
 r } z0 t j d | | f  t	 d	 | | f  WYd
 d
 } ~ Xq Xq Wt j
 d  t	 d  t j d  | S)z0 setup view based on the config and commandline ZViewr   )import_moduler   ZDistUpgrader1   r   zcan't import view '%s' (%s)zcan't load %s (%s)Nz!No view can be imported, abortingr   )r   Zgetlist	importlibrI   getattrr   	Exceptionr)   Zwarningprintr=   r-   exit)	r/   r0   r1   Zrequested_viewrI   Z
view_modulZ
view_classinstancerG   r   r   r   
setup_view   s     #+
rP   c              C   s   d }  yC t  j d d g d t  j d d j   d } t j d |  Wn# t k
 rn t j d	  d
 SYn X|  | k r t j d  t j	 d d d d d |  g  d t j
 d <d d d d d d d |  g t j } t j d |  t j	 d |  d
 S)z check if there is a upgrade already running inside gnu screen,
        if so, reattach
        if not, create new screen window
    z$ubuntu-release-upgrade-screen-windowZscreenz-lsr:   r;   Tr   zscreen returned: '%s'zscreen could not be runNz)found active screen session, re-attachingz/usr/bin/screenz-dz-rz-p1RELEASE_UPGRADER_NO_SCREENz-ez\0\0z-Lz-cZscreenrcz-Szre-exec inside screen: '%s')r@   rA   rB   rC   r)   r>   rE   r+   r   execvenvironr-   argv)Z
SCREENNAMEoutcmdr   r   r   %run_new_gnu_screen_window_or_reattach   s(    	rX   c        	      C   sd  t    \ }  } t |  j  } t |  |  } d d l m } t j d |  t j	 d  |  j d k sy |  j d k r t
 j j t
 j   d  } t j d |  t |  | |  } | j r d t
 j k r |  j r t   d d	 l m } | | |  d
 |  j } t j | j  |  j rF| j   s9t j d  t j d  t |  | j   r`d Sd S)z main method r   )VERSIONz%release-upgrader version '%s' startedzubuntu-release-upgraderNr   ZmorR   )DistUpgradeControllerr   r   )r   r   r   r5   ZDistUpgradeVersionrY   r)   r+   r   
textdomainr   r    r&   getcwdbindtextdomainrP   Zneeds_screenrT   Zdisable_gnu_screenrX   rZ   atexitregisterZ_enableAptCronJobr   ZdoPartialUpgrader-   rN   rH   Zrun)	r/   argsr0   r1   rY   Z	localedirZviewrZ   Zappr   r   r   main   s2    	
	
ra   )r   r^   r   r#   r)   r   r%   r@   r-   r   Zoptparser   r   ZSYSTEM_DIRSZDistUpgradeConfigParserr   r   r5   rH   rP   rX   ra   r   r   r   r   <module>   s8   	!"