eaiovnaovbqoebvqoeavibavo 3 ft`%:@sddlZddlZddlZddlZddlZddlmZddlm Z ddl m Z ddl m Z mZmZGdddeZGd d d eZGd d d eZGd ddeZdS)N)ucd)misc) DatabaseError)GroupPersistorEnvironmentPersistorRPMTransactionc@sjeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ eddZeddZeddZeddZedd Zed!d"Zed#d$Zed%d&Zejd'd&Zed(d)Zejd*d)Zed+d,Zed-d.Zed/d0Zejd1d0Zed2d3Zd4d5Zed6d7Zd8d9Zed:d;Z edd?Z"d@S)ARPMTransactionItemWrappercCs|dk s t||_||_dS)N)AssertionError_swdb_item)selfswdbitemr/usr/lib/python3.6/history.py__init__#s z"RPMTransactionItemWrapper.__init__cCs|jjjS)N)r ZgetItemZtoStr)r rrr__str__(sz!RPMTransactionItemWrapper.__str__cCs |j|jkS)N)r )r otherrrr__lt__+sz RPMTransactionItemWrapper.__lt__cCs |j|jkS)N)r )r rrrr__eq__.sz RPMTransactionItemWrapper.__eq__cCs |jjS)N)r __hash__)r rrrr1sz"RPMTransactionItemWrapper.__hash__cCsdS)NTr)r patternrrrmatch4szRPMTransactionItemWrapper.matchcCs|jjdk S)N)r getRPMItem)r rrr is_package7sz$RPMTransactionItemWrapper.is_packagecCs|jjdk S)N)r getCompsGroupItem)r rrris_group:sz"RPMTransactionItemWrapper.is_groupcCs|jjdk S)N)r getCompsEnvironmentItem)r rrris_environment=sz(RPMTransactionItemWrapper.is_environmentcCs |jjS)N)r r)r rrr get_group@sz#RPMTransactionItemWrapper.get_groupcCs |jjS)N)r r)r rrrget_environmentCsz)RPMTransactionItemWrapper.get_environmentcCs|jjjS)N)r rZgetName)r rrrnameFszRPMTransactionItemWrapper.namecCs|jjjS)N)r rZgetEpoch)r rrrepochJszRPMTransactionItemWrapper.epochcCs|jjjS)N)r rZ getVersion)r rrrversionNsz!RPMTransactionItemWrapper.versioncCs|jjjS)N)r rZ getRelease)r rrrreleaseRsz!RPMTransactionItemWrapper.releasecCs|jjjS)N)r rZgetArch)r rrrarchVszRPMTransactionItemWrapper.archcCs*|jrdj|j|j|jSdj|j|jS)Nz{}:{}-{}z{}-{})r#formatr$r%)r rrrevrZszRPMTransactionItemWrapper.evrcCs|jjjS)N)r rZgetNEVRA)r rrrnevra`szRPMTransactionItemWrapper.nevracCs |jjS)N)r Z getAction)r rrractiondsz RPMTransactionItemWrapper.actioncCs|jj|dS)N)r Z setAction)r valuerrrr*hscCs |jjS)N)r Z getReason)r rrrreasonlsz RPMTransactionItemWrapper.reasoncCs |jj|S)N)r Z setReason)r r+rrrr,psc Cs$y |jjStk rdSXdS)N)r Z getActionNameAttributeError)r rrr action_namets z%RPMTransactionItemWrapper.action_namec Cs$y |jjStk rdSXdS)Nr-)r ZgetActionShortr.)r rrr action_short{s z&RPMTransactionItemWrapper.action_shortcCs |jjS)N)r getState)r rrrstateszRPMTransactionItemWrapper.statecCs|jj|dS)N)r setState)r r+rrrr2scCs |jjS)N)r getRepoid)r rrr from_reposz#RPMTransactionItemWrapper.from_repocCs|jjsdSd|jjS)Nr-@)r r4)r rrr ui_from_repos z&RPMTransactionItemWrapper.ui_from_repocCsdS)Nr)r rrr obsoletingsz$RPMTransactionItemWrapper.obsoletingcCs|jjj|S)N)r rpm get_reason)r rrrr:sz$RPMTransactionItemWrapper.get_reasoncCs|jjj|jS)N)r r9Z _swdb_ti_pkgr )r rrrpkgszRPMTransactionItemWrapper.pkgcCs|jjS)N)r;files)r rrrr<szRPMTransactionItemWrapper.filescCs|jS)N)r;)r rrr_activesz!RPMTransactionItemWrapper._activeN)#__name__ __module__ __qualname__rrrrrrrrrr r!propertyr"r#r$r%r&r(r)r*setterr,r/r0r2r5r7r8r:r;r<r=rrrrr "sB                r c@seZdZdZdZddZeddZeddZedd Z ed d Z ed d Z eddZ eddZ eddZeddZeddZeddZeddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(S))TransactionWrapperFcCs ||_dS)N)_trans)r transrrrrszTransactionWrapper.__init__cCs |jjS)N)rDgetId)r rrrtidszTransactionWrapper.tidcCs |jjS)N)rDZ getCmdline)r rrrcmdlineszTransactionWrapper.cmdlinecCs |jjS)N)rDZ getReleasever)r rrr releaseverszTransactionWrapper.releasevercCs |jjS)N)rDZ getDtBegin)r rrr beg_timestampsz TransactionWrapper.beg_timestampcCs |jjS)N)rDZgetDtEnd)r rrr end_timestampsz TransactionWrapper.end_timestampcCs |jjS)N)rDgetRpmdbVersionBegin)r rrrbeg_rpmdb_versionsz$TransactionWrapper.beg_rpmdb_versioncCs |jjS)N)rDgetRpmdbVersionEnd)r rrrend_rpmdb_versionsz$TransactionWrapper.end_rpmdb_versioncCst|jjtjjkS)N)intrDr1libdnf transactionTransactionItemState_DONE)r rrr return_codeszTransactionWrapper.return_codecCs |jjS)N)rDZ getUserId)r rrrloginuidszTransactionWrapper.loginuidcCs|jS)N)packages)r rrrdataszTransactionWrapper.datacCs|jj}t|S)N)rDgetConsoleOutputbool)r outputrrr is_outputs zTransactionWrapper.is_outputcCs |jjS)N)rDZ getComment)r rrrcommentszTransactionWrapper.commentcCs |jjgS)N)rDrF)r rrrtidsszTransactionWrapper.tidscCsgS)Nr)r rrrperformed_withsz!TransactionWrapper.performed_withcsjj}fdd|DS)Ncsg|]}t|qSr)r ).0i)r rr sz/TransactionWrapper.packages..)rDZgetItems)r resultr)r rrVs zTransactionWrapper.packagescCsdd|jjDS)NcSsg|] }|dqS)rr)r_r`rrrrasz-TransactionWrapper.output..)rDrX)r rrrrZszTransactionWrapper.outputcCsgS)Nr)r rrrerrorszTransactionWrapper.errorcCs|jj|k|_dS)N)rDrNaltered_gt_rpmdb)r Zrpmdbvrrrcompare_rpmdbvsz!TransactionWrapper.compare_rpmdbvN)r>r?r@altered_lt_rpmdbrdrrArGrHrIrJrKrMrOrTrUrWr[r\r]r^rVrZrcrerrrrrCs*            rCc@sheZdZddZddZeddZddZed d Zed d Z ed dZ eddZ ddZ dS)MergedTransactionWrappercCstjj|j|_dS)N)rQrRZMergedTransactionrD)r rErrrrsz!MergedTransactionWrapper.__init__cCs|jj|jdS)N)rDmerge)r rErrrrhszMergedTransactionWrapper.mergecCs |jjS)N)rDZ listUserIds)r rrrrUsz!MergedTransactionWrapper.loginuidcCs |jjS)N)rDZlistIds)r rrrr]szMergedTransactionWrapper.tidscCsdd|jjDS)NcSsg|]}t|tjjkqSr)rPrQrRrS)r_r`rrrrasz8MergedTransactionWrapper.return_code..)rDZ listStates)r rrrrTsz$MergedTransactionWrapper.return_codecCs |jjS)N)rDZ listCmdlines)r rrrrHsz MergedTransactionWrapper.cmdlinecCs |jjS)N)rDZlistReleasevers)r rrrrI sz#MergedTransactionWrapper.releasevercCs |jjS)N)rDZ listComments)r rrrr\sz MergedTransactionWrapper.commentcCsdd|jjDS)NcSsg|] }|dqS)rr)r_r`rrrrasz3MergedTransactionWrapper.output..)rDrX)r rrrrZszMergedTransactionWrapper.outputN) r>r?r@rrhrArUr]rTrHrIr\rZrrrrrgs     rgc@seZdZd6ddZddZeddZedd Zed d Zed d Z eddZ ddZ ddZ eddZ ddZd7ddZd8ddZd d!Zd"d#Zd$d%Zd&d'Zd9d(d)Zd*d+Zd,d-Zd:d.d/Zd;d0d1Zd2d3Zd4d5ZdS)< SwdbInterfacer-cCs8t||_d|_d|_d|_d|_d|_||_g|_dS)N) strrI_rpm_group_envZ _addon_datar _db_dir_output)r Zdb_dirrIrrrrs zSwdbInterface.__init__cCs |jdS)N)close)r rrr__del__%szSwdbInterface.__del__cCs|jdkrt||_|jS)N)rkr)r rrrr9(s  zSwdbInterface.rpmcCs|jdkrt||_|jS)N)rlr)r rrrgroup.s  zSwdbInterface.groupcCs|jdkrt||_|jS)N)rmr)r rrrenv4s  zSwdbInterface.envcCstjj|jtjjjS)N)ospathjoinrnrQrRSwdbZdefaultDatabaseName)r rrrdbpath:szSwdbInterface.dbpathcCsZ|jsTytjj|j|_Wn.tk rH}ztt|WYdd}~XnX|jj|jS)z Lazy initialize Swdb object N) r rQrRrwrx RuntimeErrorrrjinitTransaction)r Zexrrrr>s zSwdbInterface.swdbcCstjj||j}|jdS)N)rQrRZ Transformerrx transform)r Z input_dirZ transformerrrrr{KszSwdbInterface.transformc CsZy|`Wntk rYnXd|_d|_d|_|jrJ|jj|jjd|_g|_dS)N) _tidr.rkrlrmr ZcloseTransactionZ closeDatabasero)r rrrrpOs  zSwdbInterface.closecCs |jjS)N)rZgetPath)r rrrru]szSwdbInterface.pathcCs |jjS)N)rZ resetDatabase)r rrrreset_dbaszSwdbInterface.reset_dbTcCs|jj}|sdSt|S)N)rZgetLastTransactionrC)r complete_transactions_onlytrrrlastes zSwdbInterface.lastNrFcspgddD|jj}dd|D}rDfdd|D}xJt|D]>\}}|dkr`qN||d}|jj|jjkrNd|_d|_qNW|dddS) NcSsg|] }t|qSr)rP)r_r`rrrraosz%SwdbInterface.old..cSsg|] }t|qSr)rC)r_r`rrrraqscsg|]}|jkr|qSr)rG)r_r`)r]rrratsrrT)rZlistTransactions enumeraterDrLrNrfrd)r r]limitr~rbr`rEZ prev_transr)r]roldms   zSwdbInterface.oldcCst|jjS)N)rCrZ getCurrent)r rrr get_currentszSwdbInterface.get_currentcCsB|jj|}|j|}tjj}|jj||||}|jtjj |S)zSet reason for package) r9Z_pkg_to_swdb_rpm_itemreporQrRZ#TransactionItemAction_REASON_CHANGErZaddItemr3rS)r r;r,rpm_itemZrepoidr*Ztirrr set_reasons   zSwdbInterface.set_reasoncCs|jjt|S)zGet repository of package)rZ getRPMReporj)r r;rrrrszSwdbInterface.repocCs*|jjt|}|dkr|St||}|S)zGet package data for packageN)rZgetRPMTransactionItemrjr )r r;rbrrr package_datas  zSwdbInterface.package_datac Csfy|jjWn YnX|jjttjtjt||p>dtt j |}|jj |j ||_ |S)Nr-)rrzZbeginTransactionrPcalendarZtimegmtimeZgmtimerjrZ getloginuidZ setReleaseverrIr|)r Z rpmdb_versionZ using_pkgsZtsisrHr\rGrrrbegs zSwdbInterface.begcCsN|jj}|j|j|j|jp"d|j|j|j|j |j |j |S)Nr) rZ createRPMItemZsetNamer"ZsetEpochr#Z setVersionr$Z setReleaser%ZsetArchr&)r Zporrrrpkg_to_swdb_rpm_items     z"SwdbInterface.pkg_to_swdb_rpm_itemcCsDt|dsdS|sdSx(|jD]}t|}|jjd|fq WdS)Nr|r)hasattr splitlinesrroappend)r msglinerrrlog_scriptlet_outputs z"SwdbInterface.log_scriptlet_outputcCst|dsdS|dkrFtjj}x&|jD]}|jtjjkr&tjj}Pq&Wx |jD]\}}|j j ||qNWg|_|j j t t j t||dS)Nr|)rrQrRZTransactionState_DONEr9r2ZTransactionItemState_ERRORZTransactionState_ERRORrorZaddConsoleOutputLineZendTransactionrPrrj)r rOrTerrorsZtsiZfile_descriptorrrrrends   zSwdbInterface.endcCs |jj|S)z{ Search for history transactions which contain specified packages al. la. "yum list". Returns transaction ids. )rZsearchTransactionsByRPM)r ZpatternsZ ignore_caserrrsearchszSwdbInterface.searchcCs8|jj|j|jd}|tjjkr$dS|tjjkr4dSdS)z)Returns True if package is user installedrTFr)rresolveRPMTransactionItemReasonr"r&rQrRTransactionItemReason_USERTransactionItemReason_UNKNOWN)r r;r,rrruser_installeds   zSwdbInterface.user_installedcCsF|r|jj|j|j|}n|jj|j|jd}|tjjkrBtjj}|S)a2Get reason of package before transaction being undone. If package is already installed in the system, keep his reason. :param pkg: package being installed :param first_trans: id of first transaction being undone :param rollback: True if transaction is performing a rollbackrr)rrr"r&rQrRrr)r r;Z first_transZrollbackrbrrrget_erased_reasons  zSwdbInterface.get_erased_reason)r-)T)NrF)Nr-)r-NN)T)r>r?r@rrqrAr9rrrsrxrr{rprur}rrrrrrrrrrrrrrrrrris0              ri)rrtrZlibdnf.transactionrQZ libdnf.utilsZdnf.i18nrZdnf.yumrZdnf.exceptionsrrrrrrobjectr rCrgrirrrrs   M"