3 ©ft`Ðã@sªddlmZddlmZddlmZddlmZddlmZddl Z ddl Z ddl Z ddl Z ddlZddlZddlZdZejdƒZGd d „d e jjƒZGd d „d eƒZdS) é)Úabsolute_import)Úunicode_literals)Úhexlify)Úunlink_f)Ú_Nz/usr/bin/applydeltarpmÚdnfcsXeZdZ‡fdd„Zdd„Z‡fdd„Zdd„Zed d „ƒZed d „ƒZ d d„Z ‡Z S)Ú DeltaPayloadcs"tt|ƒj||ƒ||_||_dS)N)ÚsuperrÚ__init__Ú delta_infoÚdelta)Úselfr r ÚpkgÚprogress)Ú __class__©ú/usr/lib/python3.6/drpm.pyr )szDeltaPayload.__init__cCstjj|jjƒS)N)ÚosÚpathÚbasenamer Úlocation)r rrrÚ__str__.szDeltaPayload.__str__cs2tt|ƒj|||ƒ|tjjjkr.|jj|ƒdS)N) r rÚ_end_cbÚlibdnfÚrepoZPackageTargetCBZTransferStatus_ERRORr Úenqueue)r ZcbdataZ lr_statusÚmsg)rrrr1szDeltaPayload._end_cbcCsh|j}|j\}}tj|ƒ}t|ƒjƒ}tjjj |ƒ}|tjjj krRt j t dƒ|ƒ|j|||j|jdœS)Nzunsupported checksum type: %s)Z relative_urlZ checksum_typeZchecksumZ expectedsizeZbase_url)r ÚchksumÚhawkeyZ chksum_namerÚdecoderrZ PackageTargetZ checksumTypeZChecksumType_UNKNOWNÚloggerZwarningrrÚ downloadsizeZbaseurl)r r ZctypeZcsumrZ ctype_coderrrÚ_target_params6s   zDeltaPayload._target_paramscCs|jjS)N)r r!)r rrrÚ download_sizeHszDeltaPayload.download_sizecCs|jjS)N)rr!)r rrrÚ _full_sizeLszDeltaPayload._full_sizecCs$|jj}tjj|jjjtjj|ƒƒS)N) r rrrÚjoinrrZpkgdirr)r rrrrÚlocalPkgPszDeltaPayload.localPkg) Ú__name__Ú __module__Ú __qualname__r rrr"Úpropertyr#r$r&Ú __classcell__rr)rrr(s    rc@s>eZdZddd„Zdd„Zdd„Zdd „Zd d „Zd d „ZdS)Ú DeltaInfoNc CsŠd|_tjttjƒrd|_ytjdƒ|_Wnttfk rHd|_YnX|dkrbt j j ƒj |_ n||_ ||_ ||_g|_i|_i|_dS)z·A delta lookup and rebuild context query -- installed packages to use when looking up deltas progress -- progress obj to display finished delta rebuilds FTÚSC_NPROCESSORS_ONLNéN)Údeltarpm_installedrÚaccessÚ APPLYDELTAÚX_OKÚsysconfÚ deltarpm_jobsÚ TypeErrorÚ ValueErrorrZconfZConfÚdeltarpm_percentageÚqueryrÚqueueÚjobsÚerr)r r8rr7rrrr Vs zDeltaInfo.__init__cCs¬|js dS|jj s|j r dS|jƒr,dStjj|jƒƒr@dS|j |jd}d}x@|j j |j |j d�D](}|j|jƒ}|rj|j|krj|j}|}qjW|r¨t||||ƒSdS)z&Turn a po to Delta RPM po, if possibleNéd)ÚnameÚarch)r/rZdeltarpmr7Z _is_local_pkgrrÚexistsr&Z_sizer8Úfilterr=r>Zget_delta_from_evrZevrr!r)r ZporZbestZ best_deltaZipor rrrÚ delta_factoryms$ zDeltaInfo.delta_factorycCsžtjtjjd||d?|d@ƒ|jj|ƒ}|j}|dkrXt|jj ƒƒt dƒg|j |<nB|jj ƒstt dƒg|j |<n&t j|j ƒƒ|jj|tjjt dƒƒdS)Nzdrpm: %d: return code: %d, %dééÿrzDelta RPM rebuild failedz(Checksum of the delta-rebuilt RPM failedÚdone)r ÚlogrÚloggingÚSUBDEBUGr:Úpoprrr&rr;ZverifyLocalPkgrÚunlinkrÚendÚcallbackZ STATUS_DRPM)r ÚpidÚcodeÚploadrrrrÚjob_done‡s  zDeltaInfo.job_donecCs`ttd|jj|jƒ|jjƒg}tjtjf|žŽ}tjt j j d|dj |dd…ƒƒ||j |<dS)Nz-azdrpm: spawned %d: %sú é)r1rr>r&rÚspawnlÚP_NOWAITr rErrFrGr%r:)r rNZ spawn_argsrLrrrÚ start_job—szDeltaInfo.start_jobcCspx.|jr.tjdtjƒ\}}|s P|j||ƒqW|jj|ƒx.t|jƒ|jkrj|j |jj dƒƒ|js>Pq>WdS)NrQréÿÿÿÿ) r:rÚwaitpidÚWNOHANGrOr9ÚappendÚlenr4rTrH)r rNrLrMrrrr¡s zDeltaInfo.enqueuecCs@x:|jr:tjƒ\}}|j||ƒ|jr|j|jjdƒƒqWdS)z!Wait until all jobs have finishedrN)r:rÚwaitrOr9rTrH)r rLrMrrrrZ®s   zDeltaInfo.wait)N) r'r(r)r rArOrTrrZrrrrr,Us    r,)Z __future__rrZbinasciirZ dnf.yum.miscrZdnf.i18nrZ dnf.callbackrZ dnf.loggingZdnf.reporrFZ libdnf.reporrr1Z getLoggerr rZPackagePayloadrÚobjectr,rrrrÚs      -