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||_||_dS)N)_swdb_item)selfswdbitemr/usr/lib/python3.6/history.py__init__#sz"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*rrrr1scCs |jjS)N)r getRepoid)r rrr from_reposz#RPMTransactionItemWrapper.from_repocCs|jjsdSd|jjS)Nr,@)r r3)r rrr ui_from_repos z&RPMTransactionItemWrapper.ui_from_repocCsdS)Nr)r rrr obsoletingsz$RPMTransactionItemWrapper.obsoletingcCs|jjj|S)N)r rpm get_reason)r rrrr9sz$RPMTransactionItemWrapper.get_reasoncCs|jjj|jS)N)r r8Z _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__rrrrrrrrrrr propertyr!r"r#r$r%r'r(r)setterr+r.r/r1r4r6r7r9r: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)rCgetId)r rrrtidszTransactionWrapper.tidcCs |jjS)N)rCZ getCmdline)r rrrcmdlineszTransactionWrapper.cmdlinecCs |jjS)N)rCZ getReleasever)r rrr releaseverszTransactionWrapper.releasevercCs |jjS)N)rCZ getDtBegin)r rrr beg_timestampsz TransactionWrapper.beg_timestampcCs |jjS)N)rCZgetDtEnd)r rrr end_timestampsz TransactionWrapper.end_timestampcCs |jjS)N)rCgetRpmdbVersionBegin)r rrrbeg_rpmdb_versionsz$TransactionWrapper.beg_rpmdb_versioncCs |jjS)N)rCgetRpmdbVersionEnd)r rrrend_rpmdb_versionsz$TransactionWrapper.end_rpmdb_versioncCst|jjtjjkS)N)intrCr0libdnf transactionTransactionItemState_DONE)r rrr return_codeszTransactionWrapper.return_codecCs |jjS)N)rCZ getUserId)r rrrloginuidszTransactionWrapper.loginuidcCs|jS)N)packages)r rrrdataszTransactionWrapper.datacCs|jj}t|S)N)rCgetConsoleOutputbool)r outputrrr is_outputs zTransactionWrapper.is_outputcCs |jjS)N)rCZ getComment)r rrrcommentszTransactionWrapper.commentcCs |jjgS)N)rCrE)r rrrtidsszTransactionWrapper.tidscCsgS)Nr)r rrrperformed_withsz!TransactionWrapper.performed_withcsjj}fdd|DS)Ncsg|]}t|qSr)r ).0i)r rr sz/TransactionWrapper.packages..)rCZgetItems)r resultr)r rrUs zTransactionWrapper.packagescCsdd|jjDS)NcSsg|] }|dqS)rr)r^r_rrrr`sz-TransactionWrapper.output..)rCrW)r rrrrYszTransactionWrapper.outputcCsgS)Nr)r rrrerrorszTransactionWrapper.errorcCs|jj|k|_dS)N)rCrMaltered_gt_rpmdb)r Zrpmdbvrrrcompare_rpmdbvsz!TransactionWrapper.compare_rpmdbvN)r=r>r?altered_lt_rpmdbrcrr@rFrGrHrIrJrLrNrSrTrVrZr[r\r]rUrYrbrdrrrrrBs*            rBc@sheZdZddZddZeddZddZed d Zed d Z ed dZ eddZ ddZ dS)MergedTransactionWrappercCstjj|j|_dS)N)rPrQZMergedTransactionrC)r rDrrrrsz!MergedTransactionWrapper.__init__cCs|jj|jdS)N)rCmerge)r rDrrrrgszMergedTransactionWrapper.mergecCs |jjS)N)rCZ listUserIds)r rrrrTsz!MergedTransactionWrapper.loginuidcCs |jjS)N)rCZlistIds)r rrrr\szMergedTransactionWrapper.tidscCsdd|jjDS)NcSsg|]}t|tjjkqSr)rOrPrQrR)r^r_rrrr`sz8MergedTransactionWrapper.return_code..)rCZ listStates)r rrrrSsz$MergedTransactionWrapper.return_codecCs |jjS)N)rCZ listCmdlines)r rrrrGsz MergedTransactionWrapper.cmdlinecCs |jjS)N)rCZlistReleasevers)r rrrrH sz#MergedTransactionWrapper.releasevercCs |jjS)N)rCZ listComments)r rrrr[sz MergedTransactionWrapper.commentcCsdd|jjDS)NcSsg|] }|dqS)rr)r^r_rrrr`sz3MergedTransactionWrapper.output..)rCrW)r rrrrYszMergedTransactionWrapper.outputN) r=r>r?rrgr@rTr\rSrGrHr[rYrrrrrfs     rfc@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) strrH_rpm_group_envZ _addon_datar _db_dir_output)r Zdb_dirrHrrrrs zSwdbInterface.__init__cCs |jdS)N)close)r rrr__del__%szSwdbInterface.__del__cCs|jdkrt||_|jS)N)rjr)r rrrr8(s  zSwdbInterface.rpmcCs|jdkrt||_|jS)N)rkr)r rrrgroup.s  zSwdbInterface.groupcCs|jdkrt||_|jS)N)rlr)r rrrenv4s  zSwdbInterface.envcCstjj|jtjjjS)N)ospathjoinrmrPrQSwdbZdefaultDatabaseName)r rrrdbpath:szSwdbInterface.dbpathcCsZ|jsTytjj|j|_Wn.tk rH}ztt|WYdd}~XnX|jj|jS)z Lazy initialize Swdb object N) r rPrQrvrw RuntimeErrorrriinitTransaction)r Zexrrrr >s zSwdbInterface.swdbcCstjj||j}|jdS)N)rPrQZ Transformerrw transform)r Z input_dirZ transformerrrrrzKszSwdbInterface.transformc CsZy|`Wntk rYnXd|_d|_d|_|jrJ|jj|jjd|_g|_dS)N) _tidr-rjrkrlr ZcloseTransactionZ closeDatabasern)r rrrroOs  zSwdbInterface.closecCs |jjS)N)r ZgetPath)r rrrrt]szSwdbInterface.pathcCs |jjS)N)r Z resetDatabase)r rrrreset_dbaszSwdbInterface.reset_dbTcCs|jj}|sdSt|S)N)r ZgetLastTransactionrB)r complete_transactions_onlytrrrlastes zSwdbInterface.lastNrFcspgddD|jj}dd|D}rDfdd|D}xJt|D]>\}}|dkr`qN||d}|jj|jjkrNd|_d|_qNW|dddS) NcSsg|] }t|qSr)rO)r^r_rrrr`osz%SwdbInterface.old..cSsg|] }t|qSr)rB)r^r_rrrr`qscsg|]}|jkr|qSr)rF)r^r_)r\rrr`tsrrT)r ZlistTransactions enumeraterCrKrMrerc)r r\limitr}rar_rDZ prev_transr)r\roldms   zSwdbInterface.oldcCst|jjS)N)rBr Z getCurrent)r rrr get_currentszSwdbInterface.get_currentcCsB|jj|}|j|}tjj}|jj||||}|jtjj |S)zSet reason for package) r8Z_pkg_to_swdb_rpm_itemreporPrQZ#TransactionItemAction_REASON_CHANGEr ZaddItemr2rR)r r:r+rpm_itemZrepoidr)Ztirrr set_reasons   zSwdbInterface.set_reasoncCs|jjt|S)zGet repository of package)r Z getRPMRepori)r r:rrrrszSwdbInterface.repocCs*|jjt|}|dkr|St||}|S)zGet package data for packageN)r ZgetRPMTransactionItemrir )r r:rarrr package_datas  zSwdbInterface.package_datac Csfy|jjWn YnX|jjttjtjt||p>dtt j |}|jj |j ||_ |S)Nr,)r ryZbeginTransactionrOcalendarZtimegmtimeZgmtimerirZ getloginuidZ setReleaseverrHr{)r Z rpmdb_versionZ using_pkgsZtsisrGr[rFrrrbegs zSwdbInterface.begcCsN|jj}|j|j|j|jp"d|j|j|j|j |j |j |S)Nr) r Z 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 splitlinesrrnappend)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{)rrPrQZTransactionState_DONEr8r1ZTransactionItemState_ERRORZTransactionState_ERRORrnr ZaddConsoleOutputLineZendTransactionrOrri)r rNrSerrorsZtsiZfile_descriptorrrrrends   zSwdbInterface.endcCs |jj|S)z{ Search for history transactions which contain specified packages al. la. "yum list". Returns transaction ids. )r ZsearchTransactionsByRPM)r ZpatternsZ ignore_caserrrsearchszSwdbInterface.searchcCs8|jj|j|jd}|tjjkr$dS|tjjkr4dSdS)z)Returns True if package is user installedrTFr)r resolveRPMTransactionItemReasonr!r%rPrQTransactionItemReason_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)r rr!r%rPrQrr)r r:Z first_transZrollbackrarrrget_erased_reasons  zSwdbInterface.get_erased_reason)r,)T)NrF)Nr,)r,NN)T)r=r>r?rrpr@r8rqrrrwr rzrortr|rrrrrrrrrrrrrrrrrrhs0              rh)rrsrZlibdnf.transactionrPZ libdnf.utilsZdnf.i18nrZdnf.yumrZdnf.exceptionsrrqrrrobjectr rBrfrhrrrrs   M"