o WeD@s~ddlmZmZddlZddlZddlZzddlZWn ey'ddlZYnwzddl m Z Wney?ddl m Z Ynwddl Z ddl ZddlZddlZddlZddlZddlZzddlmZddlmZmZddlmZmZWneyddlmZmZmZmZmZYnwdd lmZmZm Z m!Z!m"Z"Gd d d e#Z$Gd d d e%Z&Gddde%Z'e(dkre'ddZ)dSdS))absolute_importprint_functionN) BadStatusLine)quote)Requesturlopen) HTTPErrorURLError)rrr rr)get_langget_distget_dist_versionget_ubuntu_flavorget_ubuntu_flavor_namec@s eZdZdS)MetaReleaseParseErrorN)__name__ __module__ __qualname__rr9/usr/lib/python3/dist-packages/DistUpgrade/MetaRelease.pyr6src@seZdZddZdS)DistcCs:||_||_||_||_d|_d|_d|_d|_d|_dSN) nameversiondate supportedreleaseNotesURIreleaseNotesHtmlUri upgradeToolupgradeToolSigupgrade_broken)selfrrrrrrr__init__;s z Dist.__init__N)rrrr"rrrrr:s rc@s|eZdZdZdejvZdZdZ      dddZ d d Z d d Z d dZ ddZ ddZeddZddZddZdS)MetaReleaseCorezT A MetaReleaseCore object abstracts the list of released distributions. DEBUG_UPDATE_MANAGERz$/etc/update-manager/release-upgradesz /etc/update-manager/meta-releaseFNc Cs|rd|_|d||f||_||_t|_d|_d|_|dur't }t |d|_ t |d|_t|_t|_d|_d|_d}|d|_|d|_d|_d|_t}tj|jrz||jWntj y} zt!j"#d |j| fWYd} ~ dSd} ~ ww|$d rd } d D]$} |%| | r|d |j|&| | ft'|d | | f|&| | qt}tj|j(r,z||j(Wntj y} zt!j"#d |j(| fWYd} ~ dSd} ~ ww|%ddr,|&dd)} | dks| dkr d|_|j*dS| dkr)d|_t+,} | -|jr#|j|_n |dnd|_|r3|j|_|r?|j|j7_n |rJ|j|j7_|d|jd|_.|/sa|ddStj0|j1d2dS)NTz1MetaRelease.__init__() useDevel=%s useProposed=%s)cachezhttps://changelogs.ubuntu.com/z meta-releasezmeta-release-ltsz -developmentz -proposedzERROR: failed to read '%s': %s METARELEASE)URIURI_LTSURI_UNSTABLE_POSTFIXURI_PROPOSED_POSTFIXz%s: %s z%s_%sDEFAULTPromptnevernoltsz Prompt=lts for non-LTS, ignoringnormalzmetarelease-uri: %sz_buildMetaReleaseFile failed)target)3DEBUG_debug forceDownloaduseDevelopmentRelease threadingEvent downloaded upgradable_tonew_distaptCacherflavorr 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!r5 useProposeddebugforceLTSr4r%base_uriparsereseckrBdirrrr"Ts               zMetaReleaseCore.__init__c Cstjdtj|j|_z t|jdWntyt dtj d}tj |d}tj |sZzt |WntyY}ztjd|WYd}~YdSd}~wwtj |szt|dWnty}ztjd|WYd}~YdSd}~wwtj|d }tj |szt|Wnty}ztjd|WYd}~YdSd}~wwtj|tj|j|_Ynwztj|jdkrt|jWd SWd StyYd Sw) Nz/var/lib/update-manager/aXDG_CACHE_HOMEz~/.cacherzmkdir() failed: '%s'Fizupdate-manager-coreT)rIrJjoinbasenamerCMETARELEASE_FILEopencloseIOErrorgetenv expandusersplitrKmakedirsOSErrorrOrPrQmkdirgetsizeunlink Exception)r! cache_dircache_parent_dirrfrJrrrr]sf         z%MetaReleaseCore._buildMetaReleaseFilecC ||_dS)z\ virtual function that is called when the distro is no longer supported N)rAr!distrrrdist_no_longer_supported z(MetaReleaseCore.dist_no_longer_supportedcCr})z\ virtual function that is called when a new distro release is available N)r:r~rrrnew_dist_availablerz"MetaReleaseCore.new_dist_availablecCsV|d|j}|d|d}g}t|j}z|rdD] }||jvr-td|q |jd}|d||jd}tt j |}d|d <t t|} t|jd } |jd } t|| | | } d |jvr~|jd | _t} | r~| jd | 7_d|jvr|jd| _|| }|r| j|7_d|jvr|jd| _d|jvr|jd| _d|jvr|jd| _|| ||kr| }|sWntjytd|jw|jd|_|dur|ddSd}|D]} | j|jkr | js|jsq| }|d|nq|dkr|js||_| ||dkr)||_|!|dS)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)"r3r?apt_pkgTagFiler\stepsectionrlistemailutils parsedatetimemktimetupleintrrr r#_get_release_notes_uri_query_stringrrr appendrNrCrprrr5r9rr)r!r? current_distdists index_tag required_keyrrawdate parseddaterrrrlangqueryr9rrrparses                $       zMetaReleaseCore.parsec Cs|dd}t|j}|dd|ddt|jtjr3z t|jj }Wn t y2Ynw|dkrF|j sF|dt t |zmt|dd }tj|jrt|jtjszt|jWnt y}ztd |j|fWYd}~nd}~wwz$t|jd }|D] }||d q||dd||_Wn tyYnw|WnYty}z)|jd krtj|jr|d|jt|jd|_n|d|WYd}~n)d}~wtt t!j"fy }z|d|td|jWYd}~nd}~ww|jdurG|dz|#Wnt$y6t%&d|jt'|jYnw|j(rF|j(j)rFt'|jn|d|j*+dS)NzMetaRelease.download()rz Cache-ControlzNo-CachePragmazno-cachezIf-Modified-Since)timeoutzCan't unlink '%s' (%s)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),r3rrC add_headerrIaccessrnW_OKstatst_mtimervr4rasctimegmtimerrJrKryprintro readlinesrQdecodeflushseekr\rqrprcoder rsocketrrrzlogging exceptionremover:r r8rX)r! lastmodifiedrequrirfflinerrrr_Ns                 zMetaReleaseCore.downloadcCs |j Sr)r8is_set)r!rrr downloadings zMetaReleaseCore.downloadingcCs@d}t}|r |d|7}|d|j7}|d|j7}t|dS)N?zlang=%s&zos=%s&zver=%sz/?)r r=rr)r!rqrrrrrs  z3MetaReleaseCore._get_release_notes_uri_query_stringcCs|jr tj|ddSdS)N )r2rOrPrQ)r!msgrrrr3szMetaReleaseCore._debug)FFFFFN)rrr__doc__rIenvironr2rVrLr"r]rrrr_propertyrrr3rrrrr#Hs*  h.XG  r#__main__F)* __future__rrr;rrYrG ImportErrorrH http.clientrhttplibr email.utilsrrIrrOrr6 urllib.parserurllib.requestrr urllib.errorrr urllib2rr r r rrrzrobjectrr#rmetarrrrsJ       e