QKfCddlZddlZddlZddlZddlmZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlmZddlmZmZddlmZmZddlmZmZmZmZmZGdd eZGd d eZGd d eZ e!dk(r e ddZ"yy)N) BadStatusLine)quote)Requesturlopen) HTTPErrorURLError)get_langget_distget_dist_versionget_ubuntu_flavorget_ubuntu_flavor_namec eZdZy)MetaReleaseParseErrorN)__name__ __module__ __qualname__9/usr/lib/python3/dist-packages/DistUpgrade/MetaRelease.pyrr2srrceZdZdZy)Distc||_||_||_||_d|_d|_d|_d|_d|_yN) nameversiondate supportedreleaseNotesURIreleaseNotesHtmlUri upgradeToolupgradeToolSigupgrade_broken)selfrrrrs r__init__z Dist.__init__7sF   "##' ""rN)rrrr%rrrrr6s #rrceZdZdZdej vZdZdZ ddZ dZ dZ d Z d Z d Zed Zd ZdZy)MetaReleaseCorezT A MetaReleaseCore object abstracts the list of released distributions. DEBUG_UPDATE_MANAGERz$/etc/update-manager/release-upgradesz /etc/update-manager/meta-releaseNc ||rd|_|jd|d|||_||_t j |_d|_d|_|tj}t||_ t||_t|_t#|_d|_d|_d}|dz|_|dz|_d|_d |_t3j4}t6j8j;|j<r |j?|j<|jId rod } d D]h} |jK| | s|j|j<d|jM| | dtO|| d| |jM| | jt3j4}t6j8j;|jPr |j?|jP|jKddr|jMddjS} | dk(s| dk(r"d|_|j jUy| dk(rZd|_tWjX} | j[|j r|j,|_n|jdnd|_|r|j,|_|r |xj*|j.z c_n!|r|xj*|j0z c_|jd|j*zd|_.|j_s|jdyt j`|jbjey#t2j@$r9} tBjDjGd |j<d | Yd} ~ yd} ~ wwxYw#t2j@$r9} tBjDjGd |jPd | Yd} ~ yd} ~ wwxYw)NTz MetaRelease.__init__() useDevel=z useProposed=)cachezhttps://changelogs.ubuntu.com/z meta-releasezmeta-release-ltsz -developmentz -proposedzERROR: failed to read 'z': METARELEASE)URIURI_LTSURI_UNSTABLE_POSTFIXURI_PROPOSED_POSTFIXz:  _DEFAULTPromptnevernoltsz Prompt=lts for non-LTS, ignoringnormalzmetarelease-uri: %sz_buildMetaReleaseFile failed)target)3DEBUG_debug forceDownloaduseDevelopmentRelease threadingEvent downloaded upgradable_tonew_distaptCacher flavorr flavor_namer current_dist_namer current_dist_versionno_longer_supportedpromptMETARELEASE_URIMETARELEASE_URI_LTS METARELEASE_URI_UNSTABLE_POSTFIX METARELEASE_URI_PROPOSED_POSTFIX configparser ConfigParserospathexistsCONF_METARELEASEreadErrorsysstderrwrite has_section has_optiongetsetattrCONFlowerset distro_infoUbuntuDistroInfois_ltsmetarelease_information_buildMetaReleaseFileThreaddownloadstart)r$r< useProposeddebugforceLTSr;r*base_uriparsereseckrIdis rr%zMetaReleaseCore.__init__Ps DJ $k 3 +%:"#//+! =IIKE'e4 1>!)$4$6!#'  4'.8#+.@#@ 0>-0;-**, 77>>$// 0  D112!!-0# NA ((a0 #44fjja6HJ a&8&**S!:LM N**, 77>>$)) $  DII&  H5Ix8>>@W$$")DKOO'')u_"'DK%557Byy!7!78/3/G/G, $FG"*DK #'#;#;D  D$I$I I   D$I$I I  )D,@,@@A'+$))+ KK6 7  .446K %%    ,,a1  8 %%    9=AF  s0N 5O/ O,3/O''O,/P;/P66P;ctjjdtjj|j|_ t |j dj tjj'|j dk(rtj(|j y #t$rtjdtjjd}tjj|d}tjj|sP tj|n9#t$r-}tj j#d|zYd}~Yyd}~wwxYwtjj|sQ tj$|dn9#t$r-}tj j#d|zYd}~Yyd}~wwxYwtjj|d }tjj|sP tj$|n9#t$r-}tj j#d|zYd}~Yyd}~wwxYwtjj|tjj|j|_YiwxYw#t*$rYy wxYw) Nz/var/lib/update-manager/aXDG_CACHE_HOMEz~/.cacherzmkdir() failed: '%s'Fizupdate-manager-coreT)rPrQjoinbasenamerJMETARELEASE_FILEopencloseIOErrorgetenv expandusersplitrRmakedirsOSErrorrVrWrXmkdirgetsizeunlink Exception)r$ cache_dircache_parent_dirrmrQs rrdz%MetaReleaseCore._buildMetaReleaseFiles " &(8(89M9M(N!    && , 2 2 4@ wwt445: $//0I   "''"4"4Z"@I "ww}}Y7: 77>>"23!KK 01!JJ$$%;a%?@ !77>>),!HHY.!JJ$$%;a%?@ !77<< +@AD77>>$'!HHTN!JJ$$%;a%?@ !%'GGLLbgg&&t';';<%D !7 D   s$B?3A K?A>K>EK F "F?KF  "K-GK G: "G5/K5G::AK=IK J "J>KJ  AKK K+*K+c||_y)zWvirtual function that is called when the distro is no longer supported N)rHr$dists rdist_no_longer_supportedz(MetaReleaseCore.dist_no_longer_supporteds $( rc||_y)zWvirtual function that is called when a new distro release is available N)rArs rnew_dist_availablez"MetaReleaseCore.new_dist_availables  rc|jd|j}|jd|zd}g}tj|j} |j rdD]}||j vstd|z|j d}|jd|z|j d}ttjj|}d|d <tjt|} t|j d } |j d } t!|| | | } d |j vr8|j d | _t%} | r| xj"d | zz c_d|j vr<|j d| _|j)| }|r| xj&|z c_d|j vr|j d| _d|j vr|j d| _d|j vr|j d| _|j1| ||k(r| }|j r|jj7d|_||jdyd}|D]L} | j8|j8kDs| j:s |j<s6| }|jd|zn|dk7r$|j:s||_|jA||dk7r||_|jC|y#tj2$rtd|j4zwxYw)NzMetaRelease.parse()zcurrent dist name: '%s')rVersion SupportedDatezRequired key '%s' missingrzfound distro name: '%s'rrrr ReleaseNotesz?lang=%sReleaseNotesHtml UpgradeToolUpgradeToolSignature UpgradeBrokenzUnable to parse %sz,current dist not found in meta-release file Fz new dist: %sT)"r:rFapt_pkgTagFilercstepsectionrlistemailutils parsedatetimemktimetupleintrrr r #_get_release_notes_uri_query_stringr!r"r#appendrUrJrxrrr<r@rr)r$rF current_distdists index_tag required_keyrrawdate parseddaterrrrlangqueryr@s rparsezMetaReleaseCore.parsesM )* 22 -0AAB OOD$@$@A + .."$LL#9+<+<<37,F !((0 5<=#++F3!%++"7"7"@A ! 1 {{5#45 1 1+ >? #++I6D'4;!Y%6%66+4+<+<^+LD(#:D,, T0AA,%):)::/8/@/@*0D,!DDTJE00E90 I$5$55'0'8'8'GD$)Y->->>*3*;*;.+D'#i&7&77*3*;*;O*LD' T",,#'LM.."X $$**,'+$   KKG H  Dyy<,,, ~~d.H.H $  N]:;  B |'='=!.D   ) ), 7 B !.D   # #M 2O}} '$t';';;  s$L+;GL++,McN|jdd}t|j}|jdd|jddt j |j tjr* t j|j j}|dkDrD|js8|jdtjtj| t|d }tj j#|j rNt j |j tjs t j$|j  t)|j d }|j+D]"}|j-|j/d$|j1|j3dd||_|j9|j4d|jd |jG|jPrG|jPjRr1t jN|j n|jd|jTjWy#t$rYwxYw#t$r'}t'd |j d |d Yd}~\d}~wwxYw#t6$rYwxYw#t:$r}|j<dk(rctj j#|j r:|jd|j zt)|j d|_n|jd|zYd}~d}~wt>t@tBjDf$r7}|jd|zt'd|jzYd}~d}~wwxYw#tH$rEtKjLd|j zt jN|j YwxYw)NzMetaRelease.download()rz Cache-ControlzNo-CachePragmazno-cachezIf-Modified-Since)timeoutzCan't unlink 'z' ()zw+zUTF-8i0zreading file '%s'rz%result of meta-release download: '%s'zIFailed to connect to %s. Check your Internet connection or proxy settingsz!have self.metarelease_informationzparse failed for '%s'zNO self.metarelease_information),r:rrJ add_headerrPaccessrvW_OKstatst_mtimer~r;rasctimegmtimerrQrRrprintrw readlinesrXdecodeflushseekrcryrxrcoderrsocketrrrlogging exceptionremoverAr#r?r_)r$ lastmodifiedrequrirmflines rrfzMetaReleaseCore.downloadZs) ,- d**+  3 x, 99T**BGG 4 !wwt'<'<=FF  ! D$6$6 NN#T\\$++l2K%L ( #r*Cww~~d334RYY%%rww>IId334  ..5MMO2DGGDKK012 q! /0, IIK"  ' ' 3 KK; < 1 }}!=!= $//0 KK9 : C  "484I4I1M   Ivv}0E0E!F /$2G2GGH/3D4I4I3/O, CaGH-8  KK?!C D $&*&:&:;    1!!+d.C.CC $//0  1s<)J/A$K&J$4A4K(K&O J! J!$ K-K K&KK& K# K&"K##K&& O/BM;;!O,OOA P$#P$c8|jj Sr)r?is_set)r$s r downloadingzMetaReleaseCore.downloadings??))+++rcd}t}|r|d|zz }|d|jzz }|d|jzz }t|dS)N?zlang=%s&zos=%s&zver=%sz/?)r rDrr)r$rqrs rrz3MetaReleaseCore._get_release_notes_uri_query_stringsR z  d" "A X ## X $$Q~rcb|jr#tjj|dzyy)N )r9rVrWrX)r$msgs rr:zMetaReleaseCore._debugs$ :: JJ  S4Z ( r)FFFFFN)rrr__doc__rPenvironr9r]rSr%rdrrrrfpropertyrrr:rrrr'r'Ds{ #bjj 0E 2D9$p7f-^(  XxKZ,, )rr'__main__F)#rBrr`rN http.clientrr email.utilsrrPrrVrr= urllib.parserurllib.requestrr urllib.errorrrrr r r r rrrobjectrr'rmetarrrrs. % +, I  #6 #v)fv)r  z 5% (Dr