Ë
    QKfóC  ã                   ó  — d dl Z d dlZd dlZd dlZd dlm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mZ d dlmZmZ ddlmZmZmZmZmZ  G d„ d	e«      Z G d
„ de«      Z G d„ de«      Z e!dk(  r
 e dd«      Z"yy)é    N)ÚBadStatusLine)Úquote)ÚRequestÚurlopen)Ú	HTTPErrorÚURLErroré   )Úget_langÚget_distÚget_dist_versionÚget_ubuntu_flavorÚget_ubuntu_flavor_namec                   ó   — e Zd Zy)ÚMetaReleaseParseErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    ú9/usr/lib/python3/dist-packages/DistUpgrade/MetaRelease.pyr   r   2   s   „ Ør   r   c                   ó   — e Zd Zd„ Zy)ÚDistc                 ó‚   — || _         || _        || _        || _        d | _        d | _        d | _        d | _        d | _        y ©N)	ÚnameÚversionÚdateÚ	supportedÚreleaseNotesURIÚreleaseNotesHtmlUriÚupgradeToolÚupgradeToolSigÚupgrade_broken)Úselfr   r   r   r   s        r   Ú__init__zDist.__init__7   sF   € ØˆŒ	ØˆŒØˆŒ	Ø"ˆŒØ#ˆÔØ#'ˆÔ ØˆÔØ"ˆÔà"ˆÕr   N)r   r   r   r%   r   r   r   r   r   6   s   „ ó
#r   r   c                   ó‚   — e Zd ZdZdej
                  v ZdZdZ	 	 	 	 	 	 dd„Z	d„ Z
d„ Zd	„ Zd
„ Zd„ Zed„ «       Zd„ Zd„ Zy)ÚMetaReleaseCorezT
    A MetaReleaseCore object abstracts the list of released
    distributions.
    ÚDEBUG_UPDATE_MANAGERz$/etc/update-manager/release-upgradesz /etc/update-manager/meta-releaseNc           	      ó|  — |rd| _         | j                  d|›d|›�«       || _        || _        t	        j
                  «       | _        d | _        d | _        |€t        j                  «       }t        |¬«      | _        t        |¬«      | _        t        «       | _        t#        «       | _        d | _        d | _        d}|dz   | _        |dz   | _        d| _        d	| _        t3        j4                  «       }t6        j8                  j;                  | j<                  «      rœ	 |j?                  | j<                  «       |jI                  d«      rod}
dD ]h  }|jK                  |
|«      sŒ| j                  | j<                  ›d|jM                  |
|«      ›d�«       tO        | |
›d|›�|jM                  |
|«      «       Œj t3        j4                  «       }t6        j8                  j;                  | jP                  «      rà	 |j?                  | jP                  «       |jK                  dd«      r²|jM                  dd«      jS                  «       }|dk(  s|dk(  r"d| _        | j                  jU                  «        y |dk(  rZd| _        tW        jX                  «       }|j[                  | j                   «      r| j,                  | _        n| j                  d«       nd| _        |r| j,                  | _        |r | xj*                  | j.                  z  c_        n!|r| xj*                  | j0                  z  c_        | j                  d| j*                  z  «       d | _.        | j_                  «       s| j                  d«       y t	        j`                  | jb                  ¬«      je                  «        y # t2        j@                  $ r9}	tB        jD                  jG                  d
| j<                  ›d|	›�«       Y d }	~	y d }	~	ww xY w# t2        j@                  $ r9}	tB        jD                  jG                  d
| jP                  ›d|	›�«       Y d }	~	y d }	~	ww xY w)NTz MetaRelease.__init__() useDevel=z useProposed=)Úcachezhttps://changelogs.ubuntu.com/zmeta-releasezmeta-release-ltsz-developmentz	-proposedzERROR: failed to read 'z':
ÚMETARELEASE)ÚURIÚURI_LTSÚURI_UNSTABLE_POSTFIXÚURI_PROPOSED_POSTFIXz: ú Ú_ÚDEFAULTÚPromptÚneverÚnoÚltsz Prompt=lts for non-LTS, ignoringÚnormalzmetarelease-uri: %sz_buildMetaReleaseFile failed)Útarget)3ÚDEBUGÚ_debugÚforceDownloadÚuseDevelopmentReleaseÚ	threadingÚEventÚ
downloadedÚupgradable_toÚnew_distÚaptÚCacher   Úflavorr   Úflavor_namer   Úcurrent_dist_namer   Úcurrent_dist_versionÚno_longer_supportedÚpromptÚMETARELEASE_URIÚMETARELEASE_URI_LTSÚ METARELEASE_URI_UNSTABLE_POSTFIXÚ METARELEASE_URI_PROPOSED_POSTFIXÚconfigparserÚConfigParserÚosÚpathÚexistsÚCONF_METARELEASEÚreadÚErrorÚsysÚstderrÚwriteÚhas_sectionÚ
has_optionÚgetÚsetattrÚCONFÚlowerÚsetÚdistro_infoÚUbuntuDistroInfoÚis_ltsÚmetarelease_informationÚ_buildMetaReleaseFileÚThreadÚdownloadÚstart)r$   r<   ÚuseProposedÚdebugÚforceLTSr;   r*   Úbase_uriÚparserÚeÚsecÚkrI   Údis                 r   r%   zMetaReleaseCore.__init__P   s…  € ñ ØˆDŒJØ�Šâ$¡kð3ô	
ð
 +ˆÔØ%:ˆÔ"ä#Ÿ/™/Ó+ˆŒØ!ˆÔØˆŒØˆ=Ü—I‘I“KˆEÜ'¨eÔ4ˆŒÜ1¸Ô>ˆÔÜ!)£ˆÔÜ$4Ó$6ˆÔ!Ø#'ˆÔ ØˆŒð 4ˆØ'¨.Ñ8ˆÔØ#+Ð.@Ñ#@ˆÔ Ø0>ˆÔ-Ø0;ˆÔ-ô ×*Ñ*Ó,ˆÜ�7‰7�>‰>˜$×/Ñ/Ô0ðØ—‘˜D×1Ñ1Ô2ð ×!Ñ! -Ô0Ø#�ðò N�Að ×(Ñ(¨¨aÕ0ØŸ™à#×4Ó4°f·j±jÀÀaÕ6HðJôô   ²±aÐ&8¸&¿*¹*ÀSÈ!Ó:LÕMðNô ×*Ñ*Ó,ˆÜ�7‰7�>‰>˜$Ÿ)™)Ô$ðØ—‘˜DŸI™IÔ&ð × Ñ  ¨HÔ5ØŸ™ I¨xÓ8×>Ñ>Ó@�Ø˜WÒ$¨°$ªØ")�D”Kð —O‘O×'Ñ'Ô)ØØ˜u’_Ø"'�D”Kô %×5Ñ5Ó7�BØ—y‘y ×!7Ñ!7Ô8Ø/3×/GÑ/G˜Õ,àŸ™Ð$FÕGà"*�D”KáØ#'×#;Ñ#;ˆDÔ á Ø× Ò  D×$IÑ$IÑIÖ ÙØ× Ò  D×$IÑ$IÑIÕ à�‰Ð)¨D×,@Ñ,@Ñ@ÔAØ'+ˆÔ$Ø×)Ñ)Ô+Ø�K‰KÐ6Ô7Øä×Ñ §¡Ô.×4Ñ4Õ6øôK  ×%Ñ%ò Ü—
‘
× Ò à×,Ó,©að1ôô ûðûô8  ×%Ñ%ò Ü—
‘
× Ò Ø9=¿»ÁAÐFôô ûð	ús0   ÄN  Ç5O/ Î O,Î3/O'Ï'O,Ï/P;Ð/P6Ð6P;c                 óÜ  — t         j                  j                  dt         j                  j                  | j                  «      «      | _        	 t        | j
                  d«      j                  «        	 t         j                  j'                  | j
                  «      dk(  rt        j(                  | j
                  «       y
# t        $ �r t        j                  dt         j                  j                  d«      «      }t         j                  j                  |«      d   }t         j                  j                  |«      sP	 t        j                  |«       n9# t        $ r-}t        j                   j#                  d|z  «       Y d }~Y yd }~ww xY wt         j                  j                  |«      sQ	 t        j$                  |d«       n9# t        $ r-}t        j                   j#                  d|z  «       Y d }~Y yd }~ww xY wt         j                  j                  |d	«      }t         j                  j                  |«      sP	 t        j$                  |«       n9# t        $ r-}t        j                   j#                  d|z  «       Y d }~Y yd }~ww xY wt         j                  j                  |t         j                  j                  | j                  «      «      | _        Y �Œiw xY w# t*        $ r Y y
w xY w)Nz/var/lib/update-manager/ÚaÚXDG_CACHE_HOMEz~/.cacher   zmkdir() failed: '%s'FiÀ  zupdate-manager-coreT)rP   rQ   ÚjoinÚbasenamerJ   ÚMETARELEASE_FILEÚopenÚcloseÚIOErrorÚgetenvÚ
expanduserÚsplitrR   ÚmakedirsÚOSErrorrV   rW   rX   ÚmkdirÚgetsizeÚunlinkÚ	Exception)r$   Ú	cache_dirÚcache_parent_dirrm   rQ   s        r   rd   z%MetaReleaseCore._buildMetaReleaseFileÃ   s  € ä "§¡§¡Ø&¬¯©×(8Ñ(8¸×9MÑ9MÓ(Nó!
ˆÔð
	Ü�×&Ñ&¨Ó,×2Ñ2Ô4ð@	Ü�w‰w�‰˜t×4Ñ4Ó5¸Ò:Ü—	‘	˜$×/Ñ/Ô0ð øôI ó 	ÜŸ	™	Ø ¤"§'¡'×"4Ñ"4°ZÓ"@óˆIô  "Ÿw™wŸ}™}¨YÓ7¸Ñ:ÐÜ—7‘7—>‘>Ð"2Ô3ð!Ü—K‘KÐ 0Õ1øÜò !Ü—J‘J×$Ñ$Ð%;¸aÑ%?Ô@Ý ûð!úô —7‘7—>‘> )Ô,ð!Ü—H‘H˜Y¨Õ.øÜò !Ü—J‘J×$Ñ$Ð%;¸aÑ%?Ô@Ý ûð!úô —7‘7—<‘< 	Ð+@ÓAˆDÜ—7‘7—>‘> $Ô'ð!Ü—H‘H˜T•NøÜò !Ü—J‘J×$Ñ$Ð%;¸aÑ%?Ô@Ý ûð!úô %'§G¡G§L¡LØ”b—g‘g×&Ñ& t×';Ñ';Ó<ó%ˆD×!ð7	ûôD ò 	ØØð	ús¦   Á$B? Á3AK Â?A>KÄ>EÅKÅ	F
Å"FÅ?KÆF
Æ
"KÆ-GÇKÇ	G:Ç"G5Ç/KÇ5G:Ç:AKÈ=IÉKÉ	J	É"JÉ>KÊJ	Ê	AKËKË	K+Ë*K+c                 ó   — || _         y)zWvirtual function that is called when the distro is no longer
        supported
        N)rH   ©r$   Údists     r   Údist_no_longer_supportedz(MetaReleaseCore.dist_no_longer_supportedò   s   € ð $(ˆÕ r   c                 ó   — || _         y)zWvirtual function that is called when a new distro release
        is available
        N)rA   r†   s     r   Únew_dist_availablez"MetaReleaseCore.new_dist_availableø   s   € ð ˆ�r   c                 ó´  — | j                  d«       | j                  }| j                  d|z  «       d }g }t        j                  | j                  «      }	 |j                  «       �rõdD ]  }||j                  vsŒt        d|z  «      ‚ |j                  d   }| j                  d|z  «       |j                  d   }t        t        j                  j                  |«      «      }d|d	<   t        j                  t        |«      «      }	t        |j                  d
   «      }
|j                  d   }t!        |||	|
«      }d|j                  v r8|j                  d   |_        t%        «       }|r|xj"                  d|z  z  c_        d|j                  v r<|j                  d   |_        | j)                  |«      }|r|xj&                  |z  c_        d|j                  v r|j                  d   |_        d|j                  v r|j                  d   |_        d|j                  v r|j                  d   |_        |j1                  |«       ||k(  r|}|j                  «       r�Œõ| j                  j7                  «        d | _        |€| j                  d«       yd}|D ]L  }|j8                  |j8                  kD  sŒ|j:                  s| j<                  sŒ6|}| j                  d|z  «        n |dk7  r$|j:                  s|| _        | jA                  |«       |dk7  r|| _        | jC                  |«       y# t        j2                  $ r t        d| j4                  z  «      ‚w xY w)NzMetaRelease.parse()zcurrent dist name: '%s')r   ÚVersionÚ	SupportedÚDatezRequired key '%s' missingr   zfound distro name: '%s'rŽ   r   é   r�   rŒ   ÚReleaseNotesz?lang=%sÚReleaseNotesHtmlÚUpgradeToolÚUpgradeToolSignatureÚUpgradeBrokenzUnable to parse %sz,current dist not found in meta-release file
FÚ znew dist: %sT)"r:   rF   Úapt_pkgÚTagFilerc   ÚstepÚsectionr   ÚlistÚemailÚutilsÚ	parsedateÚtimeÚmktimeÚtupleÚintr   r   r
   r    Ú#_get_release_notes_uri_query_stringr!   r"   r#   ÚappendrU   rJ   rx   r   r   r<   r@   rˆ   rŠ   )r$   rF   Úcurrent_distÚdistsÚ	index_tagÚrequired_keyr   ÚrawdateÚ
parseddater   r   r   r‡   ÚlangÚqueryr@   s                   r   ÚparsezMetaReleaseCore.parseþ   sM  € Ø�‰Ð)Ô*Ø ×2Ñ2ÐØ�‰Ð-Ð0AÑAÔBØˆØˆô —O‘O D×$@Ñ$@ÓAˆ	ð+	Ø—.‘.Õ"Ø$Lò �LØ#¨9×+<Ñ+<Ò<Ü3Ø7¸,ÑFóð ðð
 !×(Ñ(¨Ñ0�Ø—‘Ð5¸Ñ<Ô=Ø#×+Ñ+¨FÑ3�Ü!¤%§+¡+×"7Ñ"7¸Ó"@ÓA�
Ø !�
˜1‘Ü—{‘{¤5¨Ó#4Ó5�Ü 	× 1Ñ 1°+Ñ >Ó?�	Ø#×+Ñ+¨IÑ6�ä˜D '¨4°Ó;�Ø! Y×%6Ñ%6Ñ6Ø+4×+<Ñ+<¸^Ñ+L�DÔ(Ü#›:�DÙØ×,Ò,°
¸TÑ0AÑAÕ,Ø%¨×):Ñ):Ñ:Ø/8×/@Ñ/@Ø*ñ0�DÔ,ð !×DÑDÀTÓJ�EÙØ×0Ò0°EÑ9Õ0Ø  I×$5Ñ$5Ñ5Ø'0×'8Ñ'8¸Ñ'G�DÔ$Ø)¨Y×->Ñ->Ñ>Ø*3×*;Ñ*;Ø.ñ+�DÔ'ð # i×&7Ñ&7Ñ7Ø*3×*;Ñ*;¸OÑ*L�DÔ'Ø—‘˜TÔ"ØÐ,Ò,Ø#'�LðM —.‘.Ö"ðX 	×$Ñ$×*Ñ*Ô,Ø'+ˆÔ$ð
 ÐØ�K‰KÐGÔHØð ˆØò 
	ˆDØ�y‰y˜<×,Ñ,Ó,ð
 —~’~¨d×.HÒ.HØØ $�Ø—‘˜N¨]Ñ:Ô;Ùð
	ð ˜BÒ |×'=Ò'=Ø!.ˆDÔØ×)Ñ)¨,Ô7Ø˜BÒØ!.ˆDÔØ×#Ñ# MÔ2ð øôO �}‰}ò 	Ü'Ø$ t×';Ñ';Ñ;óð ð	ús   Á$L+ Á;GL+ Ì+,Mc                 óN  — | j                  d«       d}t        | j                  «      }|j                  dd«       |j                  dd«       t	        j
                  | j                  t        j                  «      r*	 t	        j                  | j                  «      j                  }|dkD  rD| j                  s8|j                  dt        j                  t        j                  |«      «      «       	 t        |d¬	«      }t        j                   j#                  | j                  «      rNt	        j
                  | j                  t        j                  «      s 	 t	        j$                  | j                  «       	 t)        | j                  d«      }|j+                  «       D ]"  }|j-                  |j/                  d«      «       Œ$ |j1                  «        |j3                  dd«       || _        |j9                  «        | j4                  �d| j                  d«       	 | jG                  «        | jP                  rG| jP                  jR                  r1t	        jN                  | j                  «       n| j                  d«       | jT                  jW                  «        y # t        $ r Y �Œûw xY w# t        $ r'}t'        d
| j                  ›d|›d�«       Y d }~�Œ\d }~ww xY w# t6        $ r Y Œúw xY w# t:        $ r‘}|j<                  dk(  rct        j                   j#                  | j                  «      r:| j                  d| j                  z  «       t)        | j                  d«      | _        n| j                  d|z  «       Y d }~�Œƒd }~wt>        t@        tB        jD                  f$ r7}| j                  d|z  «       t'        d| j                  z  «       Y d }~�ŒÖd }~ww xY w# tH        $ rE tK        jL                  d| j                  z  «       t	        jN                  | j                  «       Y �Œýw xY w)NzMetaRelease.download()r   zCache-ControlzNo-CacheÚPragmazno-cachezIf-Modified-Sinceé   )ÚtimeoutzCan't unlink 'z' (ú)zw+zUTF-8i0  zreading file '%s'Úrz%result of meta-release download: '%s'zIFailed to connect to %s. Check your Internet connection or proxy settingsz!have self.metarelease_informationzparse failed for '%s'zNO self.metarelease_information),r:   r   rJ   Ú
add_headerrP   Úaccessrv   ÚW_OKÚstatÚst_mtimer~   r;   rž   ÚasctimeÚgmtimer   rQ   rR   r�   Úprintrw   Ú	readlinesrX   ÚdecodeÚflushÚseekrc   ry   rx   r   Úcoder   r   Úsocketr°   r¬   r‚   ÚloggingÚ	exceptionÚremoverA   r#   r?   r_   )r$   ÚlastmodifiedÚreqÚurirm   ÚfÚlines          r   rf   zMetaReleaseCore.downloadZ  s)  € Ø�‰Ð,Ô-ØˆÜ�d×*Ñ*Ó+ˆà�‰�¨
Ô3Ø�‰�x Ô,Ü�9‰9�T×*Ñ*¬B¯G©GÔ4ðÜ!Ÿw™w t×'<Ñ'<Ó=×FÑF�ð ˜!Ò D×$6Ò$6Ø�N‰NØ#¤T§\¡\´$·+±+¸lÓ2KÓ%Lôð(	ä˜# rÔ*ˆCô �w‰w�~‰~˜d×3Ñ3Ô4¼R¿Y¹YØ×%Ñ%¤r§w¡wô>ðÜ—I‘I˜d×3Ñ3Ô4ðÜ˜×.Ñ.°Ó5�ØŸM™M›Oò 2�DØ—G‘G˜DŸK™K¨Ó0Õ1ð2à—‘”	Ø—‘�q˜!”Ø/0�Ô,ð �I‰IŒKð" ×'Ñ'Ð3Ø�K‰KÐ;Ô<ð1Ø—
‘
”ð �}Š} §¡×!=Ò!=Ü—	‘	˜$×/Ñ/Õ0à�K‰KÐ9Ô:Ø�‰×ÑÕøôC ò Úðûô" ò ÝØ48×4IÓ4IÊ1ÐM÷ò ûðûô ò Ùðûô ò 	Ià�v‰v˜Š}¤§¡§¡°×0EÑ0EÔ!FØ—‘Ð/°$×2GÑ2GÑGÔHÜ/3°D×4IÑ4IÈ3Ó/O�Õ,à—‘ÐCÀaÑGÔHÿùäœ-¬¯©Ð8ò 	Ø�K‰KÐ?À!ÑCÔDÜð$Ø&*×&:Ñ&:ñ;÷ò ûð	ûô ò 1Ü×!Ñ!Ø+¨d×.CÑ.CÑCôô —	‘	˜$×/Ñ/×0ð1ús”   Á<)J Ã/A$K& ÅJ$ Å4A4K Ç(K& ÈO Ê	J!Ê J!Ê$	KÊ-KË	K& ËKËK& Ë	K#Ë K& Ë"K#Ë#K& Ë&	OË/BM;Í;!OÎ,OÏOÏA
P$Ð#P$c                 ó8   — | j                   j                  «        S r   )r?   Úis_set)r$   s    r   ÚdownloadingzMetaReleaseCore.downloading§  s   € à—?‘?×)Ñ)Ó+Ð+Ð+r   c                 óŽ   — d}t        «       }|r|d|z  z  }|d| j                  z  z  }|d|j                  z  z  }t        |d«      S )Nú?zlang=%s&zos=%s&zver=%sz/?)r
   rD   r   r   )r$   r‡   Úqrª   s       r   r¢   z3MetaReleaseCore._get_release_notes_uri_query_string«  sR   € Øˆä‹zˆÙØ�˜dÑ"Ñ"ˆAà	ˆX˜Ÿ™Ñ#Ñ#ˆà	ˆX˜Ÿ™Ñ$Ñ$ˆä�Q˜‹~Ðr   c                 ób   — | j                   r#t        j                  j                  |dz   «       y y )Nú
)r9   rV   rW   rX   )r$   Úmsgs     r   r:   zMetaReleaseCore._debug¸  s$   € Ø�:Š:Ü�J‰J×Ñ˜S 4™ZÕ(ð r   )FFFFFN)r   r   r   Ú__doc__rP   Úenvironr9   r]   rS   r%   rd   rˆ   rŠ   r¬   rf   ÚpropertyrË   r¢   r:   r   r   r   r'   r'   D   s{   „ ñð
 # b§j¡jÐ0€Eð 2€DØ9Ðð $ØØØØØóp7òf-ò^(òòXòxKðZ ñ,ó ð,òó)r   r'   Ú__main__F)#rB   r–   r`   rN   Úhttp.clientr   rÁ   Úemail.utilsr›   rP   rÀ   rV   rž   r=   Úurllib.parser   Úurllib.requestr   r   Úurllib.errorr   r   rœ   r
   r   r   r   r   r‚   r   Úobjectr   r'   r   Úmetar   r   r   ú<module>rÝ      s€   ðó. Û Û ã Ý %Û Û Û 	Û Û 
Û Û å ß +ß ,÷õ ô	˜Iô 	ô#ˆ6ô #ôv)�fô v)ðr ˆzÒÙ˜5 %Ó(�Dð r   