Ë
    &£Ëe&6  ã                   ó(  — 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	Z	d dl
Z
d dlZ d dlmZmZ d dl	mZmZ ddlmZmZmZ ddlmZ ddlmZ  G d„ d	e«      Z G d
„ de«      Z G d„ de«      Zedk(  r– e«       Z e«       Z e«       ZejA                  dd«        e jB                  «       Z"ejF                  dd D ]  Z$e"e$   jK                  «        Œ e"jM                  ee«        ejN                  d«        ejP                  d «       yy)é    N)ÚNoSectionErrorÚNoOptionError)ÚPIPEÚPopené   )ÚDistUpgradeViewÚInstallProgressÚAcquireProgress)Úget)ÚDistUpgradeConfigc                   ó   — e Zd Zd„ Zy)ÚNonInteractiveAcquireProgressc           
      óZ  — t        j                  | ||||«       |t        j                  k(  rt	        d|| j
                  t        j                  t        | j                  «      «      fz  «       t        j                  j                  «       rt        j                  j                  «        y y y )Nzfetched %s (%.2f/100) at %sb/s)r
   Úupdate_statusÚapt_pkgÚ	STAT_DONEÚprintÚpercentÚsize_to_strÚintÚcurrent_cpsÚsysÚstdoutÚisattyÚflush)ÚselfÚuriÚdescrÚ
shortDescrÚstatuss        úK/usr/lib/python3/dist-packages/DistUpgrade/DistUpgradeViewNonInteractive.pyr   z+NonInteractiveAcquireProgress.update_status,   s‰   € Ü×%Ñ% d¨C°¸
ÀFÔKà”W×&Ñ&Ò&ÜÐ2Ø�T—\‘\¤7×#6Ñ#6´s¸4×;KÑ;KÓ7LÓ#Mð6Oñ Oô Pä�z‰z× Ñ Ô"Ü—
‘
× Ñ Õ"ð #ð 'ó    N)Ú__name__Ú
__module__Ú__qualname__r   © r"   r!   r   r   +   s   „ ó#r"   r   c                   ó@   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)ÚNonInteractiveInstallProgresszÂ 
    Non-interactive version of the install progress class
    
    This ensures that conffile prompts are handled and that
    hanging scripts are killed after a (long) timeout via ctrl-c
    c                 ó@  — t        j                  | «       t        j                  d«       dt        j
                  vrdt        j
                  d<   dt        j
                  d<   dt        j
                  d<   t        d«      | _        || _        d	| _	        	 | j                  j                  d
dd«      r t        j                  j                  dd«       d| _        	 | j                  j!                  d
d«      | _        y # t        t        f$ r Y Œ;w xY w# t"        $ r Y y w xY w)Nz*setting up environ for non-interactive useÚDEBIAN_FRONTENDÚnoninteractiveÚnoneÚAPT_LISTCHANGES_FRONTENDÚ1ÚRELEASE_UPRADER_NO_APPORTú.r   ÚNonInteractiveÚForceOverwriteFzDPkg::Options::z--force-overwritei`	  ÚTerminalTimeout)r	   Ú__init__ÚloggingÚdebugÚosÚenvironr   ÚconfigÚlogdirÚinstall_run_numberÚgetWithDefaultr   Úsetr   r   ÚtimeoutÚgetintÚ	Exception)r   r:   s     r!   r4   z&NonInteractiveInstallProgress.__init__>   sø   € Ü× Ñ  Ô&Ü�‰ÐBÔCØ¤B§J¡JÑ.Ø,<ŒB�J‰JÐ(Ñ)Ø17Œ�
‰
Ð-Ñ.Ø25Œ�
‰
Ð.Ñ/Ü'¨Ó,ˆŒØˆŒØ"#ˆÔð	Ø�{‰{×)Ñ)Ð*:Ð;KÈUÔSÜ—‘×"Ñ"Ð#4Ð5HÔIð ˆŒð	ØŸ;™;×-Ñ-Ð.>Ð?PÓQˆD�Løô ¤Ð.ò 	Ùð	ûô ò 	Ùð	ús$   Â=C< Ã!D Ã<DÄDÄ	DÄDc                 ó   — t        j                  d|›d|›d�«       | j                  j                  ddd«      sy t	        j                  t
        j                  «      }d|d<   g }d	|v rd
}d}d}|›d|›d|›�}nOd|v rd}d}d}|›d|›�}n=d|v rd
}d}d}|›d|›d|›�}n(d|v rd
}d}d}|›d|›d|›�}nt        d|›d|›d�«       y t
        j                  j                  |«      st        j                  d|z  «       y t        |«      5 }	|	j                  «       dd  j                  «       j                  «       d   }
d d d «       d
v sd|
v rd g}n%d!|
v r	d"g}d#|d$<   nt        j                  d%|
z  «       t        |«      5 }	|	j                  «       }d d d «       d&v rd'|d(<   d)|d*<   d+}
d,d g}|j!                  |
«       |j#                  «       |j!                  |«       |j!                  |«       |dk(  r\t%        d-|z  d.t&        d.¬/«      j)                  «       d   }|rÆ|j!                  |j                  d0d1«      d1   j                  «       «       n“|dk(  rŽt
        j                  j+                  |«      }|j                  d2«      d   }t%        d3|z  d.t&        d.¬/«      j)                  «       d   }|r2|j!                  |j                  d0d1«      d1   j                  «       «       t        j,                  d4|›d5|›d6�«       t/        j0                  ||¬7«      }t        j,                  |›d8|›�«       y # 1 sw Y   �ŒùxY w# 1 sw Y   �Œ±xY w)9Nz got a error from dpkg for pkg: 'z': 'ú'r1   ÚDebugBrokenScriptsFr6   Ú	PYCENTRALzpost-installationz/var/lib/dpkg/info/ÚpostinstÚ	configureú/r0   zpre-installationz/var/lib/dpkg/tmp.ci/ÚpreinstÚinstallzpre-removalÚprermÚremovezpost-removalÚpostrmz+UNKNOWN (trigger?) dpkg/script failure for ú (z) z+can not find failed maintainer script '%s' é   r   Úbashz/bin/shz-exÚperlz-dzAutoTrace NonStopÚPERLDB_OPTSzunknown interpreter: '%s'z. /usr/share/debconf/confmoduleÚ	developerÚDEBCONF_DEBUGr.   ÚDEBIAN_HAS_FRONTENDz/usr/share/debconf/frontendÚshz%dpkg-query -s %s|grep ^Config-VersionT)Úshellr   Úuniversal_newlinesú:r   Ú_zdpkg-query -s %s|grep ^Versionzre-running 'z' (ú))Úenvz script returned: )r5   Úerrorr9   r<   Úcopyr7   r8   r   ÚpathÚexistsÚopenÚreadlineÚstripÚsplitÚwarningÚreadÚappendÚextendr   r   ÚcommunicateÚbasenamer6   Ú
subprocessÚcall)r   ÚpkgÚerrormsgr8   ÚcmdÚprefixÚnameÚargumentÚmaintainer_scriptÚfÚinterpÚ
debug_optsÚmaintainer_script_textÚversionÚrets                  r!   r\   z#NonInteractiveInstallProgress.errorW   sE  € Ü�ŠÂSÊ(ÐSÔTà�{‰{×)Ñ)ØÐ1°5ô:àô —)‘)œBŸJ™JÓ'ˆØ&ˆ�ÑØˆð  (Ñ*Ø*ˆFØˆDØ"ˆHÚ.4²c¹4Ð @ÑØ 8Ñ+Ø,ˆFàˆDØ ˆHÚ+1±4Ð 8ÑØ˜hÑ&Ø*ˆFØˆDØˆHÚ.4²c¹4Ð @ÑØ˜xÑ'Ø*ˆFØˆDØˆHÚ.4²c¹4Ð @ÑåÊ3ÒPXÐYÔZØô �w‰w�~‰~Ð/Ô0Ü�M‰MÐGÐJ[Ñ[Ô\ØÜÐ#Ó$ð 	9¨Ø—Z‘Z“\ ! "Ð%×+Ñ+Ó-×3Ñ3Ó5°aÑ8ˆF÷	9à�fÑ )¨vÑ"5Ø˜‰JØ˜ÑØ˜ˆJØ%8ˆG�MÒ"ä�O‰OÐ7¸&Ñ@ÔAô Ð#Ó$ð 	.¨Ø%&§V¡V£XÐ"÷	.à,Ð0FÑFØ'2ˆG�OÑ$Ø-0ˆGÐ)Ñ*Ø2ˆFØ˜u˜ˆJð 	�
‰
�6ÔØ�
‰
�:ÔØ�
‰
Ð$Ô%Ø�
‰
�8Ôð �:ÒÜÐCÀcÑIØ"&¬tØ/3ô5ç5@±[³]À1ñFˆGñ Ø—
‘
˜7Ÿ=™=¨¨QÓ/°Ñ2×8Ñ8Ó:Õ;Ø�YÒÜ—'‘'×"Ñ" 3Ó'ˆCØ—)‘)˜C“. Ñ#ˆCÜÐ<¸sÑBØ"&¬tØ/3ô5ç5@±[³]À1ñFˆGñ Ø—
‘
˜7Ÿ=™=¨¨QÓ/°Ñ2×8Ñ8Ó:Ô;ä�Š²²WÐ=Ô>Ü�o‰o˜c wÔ/ˆÜ�‰²$±sÐ;Õ<÷W	9ñ 	9ú÷	.ñ 	.ús   Ä3L6ÆMÌ6M ÍMc                 ó,  — t        j                  d|z  «       t        j                  d«       	 t	        j
                  | j                  d«       t        j                  d|z  «       y # t        $ r"}t        j                  d|z  «       Y d }~y d }~ww xY w)Nz.got a conffile-prompt from dpkg for file: '%s'é   s   n
z0replied no to the conffile-prompt for file: '%s'z/error '%s' when trying to write to the conffile)	r5   rd   ÚtimeÚsleepr7   ÚwriteÚ	master_fdr@   r\   )r   ÚcurrentÚnewÚes       r!   Úconffilez&NonInteractiveInstallProgress.conffile·   s|   € Ü�‰ÐHØñ ô 	!ô 	�
‰
�1Œð	Mä
�(‰(�4—>‘> 6Ô
*Ü
�/‰/ÐLØ!ñ"õ #øäò 	MÜ
�-‰-ÐIÈ!ÑK×
LÑ
Lûð	Mús   ¯8A( Á(	BÁ1BÂBc                 óþ  — t        j                  | «       t        j                  «       | _        | j                  j                  ddd«      }|rat        j                  j                  | j                  d| j                  z  «      }t        j                  d|z  «       t        |d«      | _        nt        t        j                  d«      | _        | j                  j!                  dt        j                  «       z  «       y )Nr1   ÚDpkgProgressLogFzdpkg-progress.%s.logz!writing dpkg progress log to '%s'Úwz
%s: Start
)r	   Ústart_updater{   Úlast_activityr9   r<   r7   r^   Újoinr:   r;   r5   r6   r`   Údpkg_progress_logÚdevnullr}   )r   Úprogress_logÚfullpaths      r!   r†   z*NonInteractiveInstallProgress.start_updateÄ   s³   € Ü×$Ñ$ TÔ*Ü!ŸY™Y›[ˆÔØ—{‘{×1Ñ1Ð2BÐCTÐV[Ó\ˆÙÜ—w‘w—|‘| D§K¡KÐ1GÈ$×JaÑJaÑ1aÓbˆHÜ�M‰MÐ=ÀÑHÔIÜ%)¨(°CÓ%8ˆDÕ"ä%)¬"¯*©*°cÓ%:ˆDÔ"Ø×Ñ×$Ñ$ ]´T·Y±Y³[Ñ%@ÕAr"   c                 óì   — t        j                  | «       | j                  j                  dt	        j                  «       z  «       | j                  j                  «        | xj                  dz  c_        y )Nz%s: Finished
r   )r	   Úfinish_updater‰   r}   r{   Úcloser;   ©r   s    r!   rŽ   z+NonInteractiveInstallProgress.finish_updateÏ   sS   € Ü×%Ñ% dÔ+Ø×Ñ×$Ñ$Ð%5¼¿	¹	»Ñ%CÔDØ×Ñ×$Ñ$Ô&Ø×Ò 1Ñ$Ör"   c           
      óv   — | j                   j                  t        j                  «       ›d|›d|›d|›d�«       y )NrX   ú
)r‰   r}   r{   )r   rl   r   Ú
status_strs       r!   Ústatus_changez+NonInteractiveInstallProgress.status_changeÔ   s.   € Ø×Ñ×$Ñ$¼¿	¹	½Ú8?Ú8;Ú8Bð&Dõ 	Er"   c                 ó†  — t        j                  | «       | j                  d k(  ry | j                  | j                  z   t        j
                  «       k  rYt        j                  d| j                  ›d| j                  ›d�«       t        j                  | j                  t        d«      «       t        j                  | j                  gg g d«      }t        |d   «      dkD  r´t        j
                  «       | _        	 t        j                  | j                  d«      }t         j"                  j                  d|j%                  t'        j(                  «       d	¬
«      z  «       t        j                  | j                  gg g d«      }t        |d   «      dkD  rŒ´t         j"                  j-                  «        y # t*        $ r Y y w xY w)Nzno activity z
 seconds (z) - sending ctrl-cé   gš™™™™™¹?r   r   z%sÚignore)Úerrors)r	   Úupdate_interfaceÚstatusfdr‡   r>   r{   r5   rd   r    r7   r}   r~   ÚchrÚselectÚlenre   r   r   ÚdecodeÚlocaleÚgetpreferredencodingÚOSErrorr   )r   ÚresÚss      r!   r™   z.NonInteractiveInstallProgress.update_interfaceÙ   sS  € Ü×(Ñ(¨Ô.Ø�=‰=˜DÒ ØØ×Ñ §¡Ñ-´·±³Ò<Ü�OŠOØ—L“L $§+£+ð/ô 0ô �H‰H�T—^‘^¤C¨£FÔ+ô �m‰m˜TŸ^™^Ð,¨R°°3Ó7ˆÜ�#�a‘&‹k˜AŠoÜ $§	¡	£ˆ4ÔðÜ—7‘7˜4Ÿ>™>¨1Ó-ˆqÜ�z‰z×Ñ  q§x¡xÜ×/Ñ/Ó1¸(ð (0ó (Dñ !Dô Eô
 —‘ §¡Ð/°°2°cÓ:ˆ3ô �#�a‘&‹k˜A‹oô 	�
‰
×ÑÕøô	 ò áðús   Ã;A%F4 Æ4	G Æ?G c                 ó4  — t        j                  d«       dt        j                  d<   dt        j                  d<   t	        j
                  «       \  | _        | _        | j                  dk7  r"t        j                  d| j                  z  «       | j                  S )Nzdoing a pty.fork()ÚdumbÚTERMÚtrueÚPAGERr   z
pid is: %s)r5   r6   r7   r8   ÚptyÚforkÚpidr~   r�   s    r!   rª   z"NonInteractiveInstallProgress.forkò   sh   € Ü�‰Ð*Ô+à#Œ�
‰
�6Ñà$Œ�
‰
�7ÑÜ%(§X¡X£ZÑ"ˆŒ�4”>Ø�8‰8�qŠ=Ü�M‰M˜,¨¯©Ñ1Ô2Ø�x‰xˆr"   N)r#   r$   r%   Ú__doc__r4   r\   r‚   r†   rŽ   r”   r™   rª   r&   r"   r!   r(   r(   6   s4   „ ñòò2^=ò@Mò
Bò%ò
Eò
ó2	r"   r(   c                   óx   ‡ — e Zd ZdZdd„Zd„ Zd„ Zd„ Zdd„Zd„ Z	ˆ fd„Z
	 dd	„Zdd
„Zdd„Zd„ Zdd„Zd„ Zˆ xZS )ÚDistUpgradeViewNonInteractivez- non-interactive version of the upgrade view c                 óB  — t        j                  | «       t        «       j                  d«       t	        d«      | _        t        «       | _        t        |«      | _	        t        j                  j                  j                  «       | _        | j                  t         _        y )Nr1   r0   )r   r4   Úget_telemetryÚset_updater_typer   r9   r   Ú_acquireProgressr(   Ú_installProgressÚaptÚprogressÚbaseÚ
OpProgressÚ_opProgressÚ
excepthookr   Ú__excepthook__)r   Údatadirr:   s      r!   r4   z&DistUpgradeViewNonInteractive.__init__   sl   € Ü× Ñ  Ô&Ü‹×(Ñ(Ð)9Ô:Ü'¨Ó,ˆŒÜ =Ó ?ˆÔÜ =¸fÓ EˆÔÜŸ<™<×,Ñ,×7Ñ7Ó9ˆÔØ!Ÿ_™_ŒÕr"   c                 óØ   — ddl }t        j                  d|›d|›d�«       |j                  |||«      }t        j                  ddj                  |«      z  «       | j                  «        y)z2 on uncaught exceptions -> print error and reboot r   Nzgot exception 'z': ú znot handled exception:
%sÚ )Ú	tracebackr5   Ú	exceptionÚformat_exceptionr\   rˆ   ÚconfirmRestart)r   ÚtypeÚvalueÚtbr¿   Úliness         r!   r¹   z(DistUpgradeViewNonInteractive.excepthook  sR   € ãÜ×Ò²tºUÐCÔDØ×*Ñ*¨4°¸Ó;ˆÜ�‰Ð2°R·W±W¸U³^ÑCÔDà×ÑÕr"   c                 ó   — | j                   S )z5 return a OpProgress() subclass for the given graphic)r¸   r�   s    r!   ÚgetOpCacheProgressz0DistUpgradeViewNonInteractive.getOpCacheProgress  s   € à×ÑÐr"   c                 ó   — | j                   S )z# return an acquire progress object )r²   r�   s    r!   ÚgetAcquireProgressz0DistUpgradeViewNonInteractive.getAcquireProgress  ó   € à×$Ñ$Ð$r"   c                 ó   — | j                   S )z" return a install progress object )r³   )r   Úcaches     r!   ÚgetInstallProgressz0DistUpgradeViewNonInteractive.getInstallProgress  rË   r"   c                  ó   — y)z\ update the current status of the distUpgrade based
            on the current view
        Nr&   )r   Úmsgs     r!   ÚupdateStatusz*DistUpgradeViewNonInteractive.updateStatus  s   € ð 	r"   c                 ó,   •— t         t        | �  |«       y)zÏ we have 5 steps current for a upgrade:
        1. Analyzing the system
        2. Updating repository information
        3. Performing the upgrade
        4. Post upgrade stuff
        5. Complete
        N)Úsuperr®   ÚsetStep)r   ÚstepÚ	__class__s     €r!   rÔ   z%DistUpgradeViewNonInteractive.setStep  s   ø€ ô 	Ô+¨TÑ:¸4Ô@Ør"   c                 ó²  — t        j                  | |||||«       t        j                  d| j                  D �cg c]  }|j
                  ‘Œ c}z  «       t        j                  d| j                  D �cg c]  }|j
                  ‘Œ c}z  «       t        j                  d| j                  D �cg c]  }|j
                  ‘Œ c}z  «       yc c}w c c}w c c}w )Nztoinstall: '%s'ztoupgrade: '%s'ztoremove: '%s'T)r   ÚconfirmChangesr5   r6   Ú	toInstallrp   Ú	toUpgradeÚtoRemove)r   ÚsummaryÚchangesÚ	demotionsÚdownloadSizeÚactionsÚremoval_boldÚps           r!   rØ   z,DistUpgradeViewNonInteractive.confirmChanges(  s›   € ä×&Ñ& t¨W°g¸yØ'3°Wô	>ä�‰Ð'¸4¿>¹>Ö*J°a¨1¯6«6Ò*JÑJÔKÜ�‰Ð'¸4¿>¹>Ö*J°a¨1¯6«6Ò*JÑJÔKÜ�‰Ð&¸$¿-¹-Ö)H°Q¨!¯&«&Ò)HÑHÔIØùò +KùÚ*JùÚ)Hs   ¹C

Á3C
Â-C
c                  ó   — y)z0 ask a Yes/No question and return True on 'Yes' Tr&   ©r   rÜ   rÐ   Údefaults       r!   ÚaskYesNoQuestionz.DistUpgradeViewNonInteractive.askYesNoQuestion0  s   € ð r"   c                  ó   — y©NTr&   rä   s       r!   ÚaskCancelContinueQuestionz7DistUpgradeViewNonInteractive.askCancelContinueQuestion7  s   € Ør"   c                 óf   — t        j                  d«       | j                  j                  ddd«      S )z2 generic ask about the restart, can be overridden zconfirmRestart() calledr1   Ú
RealRebootF)r5   r6   r9   r<   r�   s    r!   rÂ   z,DistUpgradeViewNonInteractive.confirmRestart9  s)   € ä�‰Ð/Ô0à�{‰{×)Ñ)Ð*:¸<ÈÓOÐOr"   c                 ó@   — t        j                  |›d|›d|›d�«       y)z display a error r½   rM   rZ   N©r5   r\   )r   rÜ   rÐ   Úextended_msgs       r!   r\   z#DistUpgradeViewNonInteractive.error>  s   € ä�‰¢gªs²LÐAÕBr"   c                 ó.   — t        j                  d«       y )Nzview.abort calledrí   r�   s    r!   Úabortz#DistUpgradeViewNonInteractive.abortA  s   € Ü�‰Ð)Õ*r"   )NN)Nrè   )ÚNo)ÚCancel)r#   r$   r%   r¬   r4   r¹   rÈ   rÊ   rÎ   rÑ   rÔ   rØ   ræ   ré   rÂ   r\   rð   Ú__classcell__)rÖ   s   @r!   r®   r®   þ   sN   ø„ Ù3ó-òò ò%ó%òô
	ð 37óóóòPó
Cö+r"   r®   Ú__main__zxserver-xorgzpre-installation script failedrN   ))r´   r   r5   rŸ   r{   r   r7   r©   rœ   rj   r]   Úapt.progressÚconfigparserr   r   r   r   r   r	   r
   Ú	telemetryr   r°   ÚDistUpgradeConfigParserr   r   r(   r®   r#   ÚviewÚapÚipr\   ÚCacherÍ   Úargvrl   Úmark_installÚcommitr|   Úexitr&   r"   r!   ú<module>r     s  ðó, Û Û Û Û Û 
Û 	Û 
Û Û Û Û ç 6ß "ç NÑ NÝ +Ý 6ô# Oô #ôE Oô EôPD+ Oô D+ðN ˆzÒá	&Ó	(€$Ù$Ó&€"Ù$Ó&€"ð ‡(�(ˆ>Ð:Ô;à
ˆ#�)‰)‹+€%Ø�X‰X�a�bˆ\ò €cð 
ˆ#�J×ÑÕð	ð
 ‡,�,ˆr�2ÔØ€$‡*�*ˆQ„-Ø
€#‡(�(ˆ1…+ð# r"   