o
    >Ic$                     @   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 g d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)gettext)
z/binz/bootz/etcz/initrdz/libz/lib32z/lib64z/sbinz/usrz/var   )DistUpgradeConfigc                  C   s   t  } | jddddd | jdddd | jd	dd
d | jdddtdd | jdddtdd | jddddtdd | jdddtdd | jdddtdd | jddd dtd!d" |  S )#z/ setup option parser and parse the commandline z--have-prerequistshavePrerequists
store_trueF)destactiondefaultz--with-networkwithNetwork)r	   r
   z--without-networkstore_falsez
--frontendfrontendNz_Use frontend. Currently available: 
DistUpgradeViewText, DistUpgradeViewGtk, DistUpgradeViewKDE)r	   r   helpz--modemodedesktopz(*DEPRECATED* this option will be ignoredz	--partialpartialz:Perform a partial upgrade only (no sources.list rewriting))r	   r   r
   r   z--disable-gnu-screenzDisable GNU screen support)r
   r   r   z	--datadirdatadir.zSet datadirz--devel-releasedevel_releasez"Upgrade to the development release)r
   r	   r   r   )r   
add_option_
parse_args)parser r   =/usr/lib/python3/dist-packages/DistUpgrade/DistUpgradeMain.pydo_commandline6   s8   



r   c           	   
   C   s^  | ddd}tj|st| t|d rQt }|d|j|j	|j
|j|jf  }tj|s8t| t|d D ]}t|tj|tj| q?tj|d}| jr_|d7 }t|d W d	   n1 sow   Y  tjtj|d
dd td|j  tddt   tjd	}|d jj}td|  tdtj  |S )z setup the logging FilesLogDirz/var/log/dist-upgrade/z/*.logz/%04i%02i%02i-%02i%02izmain.logz.partialaNz%%(asctime)s %(levelname)s %(message)sw)levelfilenameformatfilemodezUsing config files '%s'zuname information: '%s' aptzapt version: '%s'zpython version: '%s') getWithDefaultospathexistsmkdirglobr   nowyearmonthdayhourminuteshutilmovejoinbasenamer   openloggingbasicConfigDEBUGinfoconfig_filesunamer&   apt_pkgCachecurrent_verver_strsysversion)	optionsconfiglogdirr-   
backup_dirffnamecacheapt_versionr   r   r   setup_loggingO   s8   
 
 rL   c              
   C   s  zddl m} W n ty   td Y d S w tj| d}td|  t	d}| }|j
d|ddd	 t	| z3tjd
dgtjdd d }ttj| dd}|| W d    W d S 1 shw   Y  W d S  ty } ztd|  W Y d }~d S d }~ww )Nr   )AptClonezfailed to import AptClonezapt-clone_system_state.tar.gzzcreating statefile: '%s'6   /T)	sourcedirtargetwith_dpkg_statusscrub_sourceslspciz-nnstdoutuniversal_newlinesr   z	lspci.txtr    zlspci failed: %s)	apt_clonerM   ImportErrorr8   errorr(   r)   r5   debugumask
save_state
subprocessPopenPIPEcommunicater7   writeOSError)rF   rM   rQ   	old_umaskclonesrH   er   r   r   save_system_statep   s6   



&rh   c           	      C   s   | j g|dd D ]E}|sq
zddlm} |d| d}t||}||| jd}W  |S  tyO } ztd||f  t	d||f  W Y d	}~q
d	}~ww t
d
 t	d
 td |S )z0 setup view based on the config and commandline Viewr   )import_moduler   DistUpgrade)rF   r   zcan't import view '%s' (%s)zcan't load %s (%s)Nz!No view can be imported, abortingr   )r   getlist	importlibrj   getattrr   	Exceptionr8   warningprintrZ   rB   exit)	rD   rE   rF   requested_viewrj   
view_modul
view_classinstancerg   r   r   r   
setup_view   s&   


rw   c                  C   s   d} zt jddgt jdd d }td|  W n ty)   td Y d	S w | |v r>td
 t	ddddd| g dtj
d< dddddd| gtj }td|  t	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-windowscreenz-lsTrU   r   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-cscreenrcz-Szre-exec inside screen: '%s')r^   r_   r`   ra   r8   r[   rc   r;   r(   execvenvironrB   argv)
SCREENNAMEoutcmdr   r   r   %run_new_gnu_screen_window_or_reattach   s4   



r   c            	      C   s  t  \} }t| j}t| |}ddlm} td|  t	d | jdu s+| jdkr:t
jt
 d}td| t| ||}|jrNdt
jvrN| jsNt  t
d	sXd
t
jd	< ddlm} ||| | jd}t|j | jr}| sxtd td t| | rdS dS )z main method r   )VERSIONz%release-upgrader version '%s' startedzubuntu-release-upgraderNr   morz   NEEDRESTART_SUSPENDy)DistUpgradeController)r   r   )r   r   r   rL   DistUpgradeVersionr   r8   r;   r   
textdomainr(   r)   r5   getcwdbindtextdomainrw   needs_screenr}   disable_gnu_screenr   getenvr   atexitregister_enableAptCronJobr   doPartialUpgraderB   rr   rh   run)	rD   argsrE   rF   r   	localedirviewr   appr   r   r   main   s8   








r   )r&   r   r   r,   r8   r(   r3   r^   rB   r   optparser   r   SYSTEM_DIRSDistUpgradeConfigParserr   r   rL   rh   rw   r   r   r   r   r   r   <module>   s(   !!