
    &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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 Zd	 Zd
 Zd Zd Zd Zy)    N)datetime)OptionParser)gettext)
z/binz/bootz/etcz/initrdz/libz/lib32z/lib64z/sbinz/usrz/var   )DistUpgradeConfigc            	         t               } | j                  dddd       | j                  ddd       | j                  d	dd
       | j                  dddt        d             | j                  dddt        d             | j                  ddddt        d             | j                  dddt        d             | j                  dddt        d             | j                  ddd dt        d!      "       | j                         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)parsers    =/usr/lib/python3/dist-packages/DistUpgrade/DistUpgradeMain.pydo_commandliner   6   sH   ^F
*1B)5  :
&],O
)]S
lD [ \  ] hVIGH  J
k	5)YZ  \ ,\#9:  < k	3]+  -
'*EAB  D     c           
      F   |j                  ddd      }t        j                  j                  |      st        j                  |       t        j
                  |dz         rt        j                         }|d|j                  |j                  |j                  |j                  |j                  fz  z   }t        j                  j                  |      st        j                  |       t        j
                  |dz         D ]S  }t        j                  |t        j                  j                  |t        j                  j!                  |                   U t        j                  j                  |d      }| j"                  r|dz  }t%        |d      5  	 d	d	d	       t'        j(                  t&        j*                  |d
d       t'        j,                  d|j.                  z         t'        j,                  ddj                  t        j0                               z         t2        j4                  j7                  d	      }|d   j8                  j:                  }t'        j,                  d|z         t'        j,                  dt<        j>                  z         |S # 1 sw Y   xY w)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logdirr0   
backup_dirffnamecacheapt_versions	            r   setup_loggingrO   O   s   ""784LMF77>>&!
yy!lln4377SVS[S[\_\f\f7ggg
ww~~j)HHZ 6(?+ 	IAKK277<<
2773C3CA3FGH	IGGLL
+E	eS	 gmm!&F!$& LL*V-@-@@ALL*SXXbhhj-AABKKd#E,**22KLL${23LL'#++56M s   JJ c                    	 ddl m} t
        j                  j                  | d      }t        j                  d|z         t        j                  d      } |       }|j                  d|dd	       t        j                  |       	 t        j                  d
dgt        j                  d      j                         d   }t        t
        j                  j                  | d      d      5 }|j!                  |       d d d        y # t        $ r t        j                  d       Y y w xY w# 1 sw Y   y xY w# t"        $ r"}t        j                  d|z         Y d }~y d }~ww xY 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_clonerQ   ImportErrorr;   errorr+   r,   r8   debugumask
save_state
subprocessPopenPIPEcommunicater:   writeOSError)rI   rQ   rU   	old_umaskclonesrK   es           r   save_system_staterl   p   s,   ' WW\\&"ABFMM,v56  IJE	s6D   HHY.


GE?:??.244?KM!E"'',,v{3S9 	QGGAJ	 	#  12"	 	 .(1,--.sH   D A#D5 *D)<D5 D&%D&)D2.D5 2D5 5	E >EE c           	         | j                   g|j                  dd      z   D ]:  }|s	 ddlm}  |d|z   d      }t	        ||      } ||| j
                        } |S  t        j                  d       t        d       t        j                  d       S # t        $ r8}t        j                  d|d|d	       t        d
|d|d	       Y d}~d}~ww xY w)z0 setup view based on the config and commandline Viewr   )import_moduler   DistUpgrade)rI   r   zcan't import view 'z' ()zcan't load z (Nz!No view can be imported, abortingr   )r   getlist	importlibro   getattrr   	Exceptionr;   warningprintr^   rE   exit)	rG   rH   rI   requested_viewro   
view_modul
view_classinstancerk   s	            r   
setup_viewr}      s     #++,V^^F6-JJ 	>/&s>'9=IJ !^<J!IH O)" 	9:12O  	>OO^ANO.!<==	>s   2B	C.CCc                     d} 	 t        j                  ddgt         j                  d      j                         d   }t	        j
                  d|z         | |v r0t	        j                  d
       t        j                  ddddd| g       dt        j                  d<   dddddd| gt        j                  z   }t	        j                  d|z         t        j                  d|       y	# t        $ r t	        j                  d       Y y	w xY w)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-lsTrY   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')rb   rc   rd   re   r;   r_   rg   r>   r+   execvenvironrE   argv)
SCREENNAMEoutcmds      r   %run_new_gnu_screen_window_or_reattachr      s    
 8JeZ__#%%0[]16 	-34
 S@A
"hdD*%MN-0BJJ+,  !XX&C LL.45HH$%  ./s   AC% %DDc                     t               \  } }t        | j                        }t        | |      }ddlm} t        j                  d|z         t        j                  d       | j                  | j                  dk(  rHt        j                  j                  t        j                         d      }t        j                  d|       t        | ||      }|j                   r(dt        j"                  vr| j$                  s
t'                t        j(                  d      sd	t        j"                  d<   dd
lm}  ||| | j                        }t-        j.                  |j0                         | j2                  r:|j5                         st7        j8                  d       t7        j8                  d       t;        |       |j=                         ryy)z main method r   )VERSIONz%release-upgrader version '%s' startedzubuntu-release-upgraderr   mor   NEEDRESTART_SUSPENDy)DistUpgradeController)r   r   )r   r   r   rO   DistUpgradeVersionr   r;   r>   r   
textdomainr+   r,   r8   getcwdbindtextdomainr}   needs_screenr   disable_gnu_screenr   getenvr   atexitregister_enableAptCronJobr   doPartialUpgraderE   rx   rl   run)	rG   argsrH   rI   r   	localedirviewr   apps	            r   mainr      sO    %&OWdw/F7F+F+LL87BC01'//S"8GGLLd3	8)D gvv.D 	(BJJ6&&-/ 99*+,/

()<
gw
GC
OOC))* ##%HHQK f wwyr   )r)   r   r   r/   r;   r+   r6   rb   rE   r   optparser   r   SYSTEM_DIRSDistUpgradeConfigParserr   r   rO   rl   r}   r   r    r   r   <module>r      sW   ,      	   
  !  
 72B.44%B.r   