a ©!c%Fã@s¸ddlmZddlmZddlmZddlZddlZddlmZmZddl m Z ddl m Z m Z ddl ZddlZddlZddlZddlZddlZddlZe d¡ZGd d „d e jƒZdS) é)Úabsolute_import)Úprint_function)Úunicode_literalsN)Ú_Úucd)Úcommands)ÚTransactionReplayÚserialize_transactionÚdnfcs¨eZdZdZdZedƒZgd¢Z‡fdd„Ze dd„ƒZ d d „Z d d „Z d d„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Z‡ZS)#ÚHistoryCommandzUA class containing methods needed by the cli to execute the history command. )ÚhistoryZhistz(display, or use, the transaction history)ÚlistÚinfoÚredoÚreplayÚrollbackÚstoreÚundoÚ userinstalledcs tt|ƒj|i|¤Žd|_dS)NF)Úsuperr Ú__init__Ú_require_one_transaction_id)ÚselfÚargsÚkw©Ú __class__©ú, 'last' or 'last-' for one transaction, .. for a range)Útransaction_filenameZTRANSACTION_FILEzEFor the replay command, path to the stored transaction file to replay)Ú add_argumentÚformatr Ú_CMDSÚjoinr)ÚparserrrrÚ set_argparser9s6 þÿÿ ÿÿÿÿ ÿ ÿzHistoryCommand.set_argparsercCs,|jjs|jd|j_n0|jj|jvrH|jj d|jj¡|jd|j_tdƒ |jj¡|_|jj }|jjdkr|jjsŠt j  tdƒ¡‚t |jjƒdkrªt j  tdƒ¡‚t j |jjd¡|j_g|j_d|_d|_d|_d|jj_d|jj_t jj |j|j¡nÎ|jjd kr6d|_|jjsÔt j  td ƒ¡‚nž|jjd vrÎd|_d|_d|_d|_|jjs†td ƒ}t |¡t j  |¡‚n,t |jjƒdkr²t |j¡t j  |j¡‚d|_t jj |j|j¡nd|_d|_|jjjd kr(t   |jjjt j!¡s(td |jjjƒ}t |¡t j  |¡‚dS)NrzUFound more than one transaction ID. '{}' requires one transaction ID or package name.rzNo transaction file name given.r!z6More than one argument given as transaction file name.TFrz(No transaction ID or package name given.)rrrz:memory:z+You don't have access to the history DB: %s)"Úoptsrr-r(Úinsertrr,Ú_require_one_transaction_id_msgÚcliÚdemandsr ÚCliErrorÚlenÚosÚpathÚabspathr*Zavailable_reposZ resolvingZ root_userÚbaseÚconfZclean_requirements_on_removeZinstall_weak_depsrZ _checkGPGKeyrÚloggerÚcriticalZfresh_metadataZsack_activationr ÚaccessÚR_OK)rr5ÚmsgrrrÚ configureUs\þ      & zHistoryCommand.configurecCsˆt|tjjƒrv|jjdkr2|jj\}tdƒ|fS|jjdkrv|jjddkrV|jjn|jjdd…\}tdƒ|fStjj j   ||¡S) z.Get suggestions for resolving the given error.rzVCannot undo transaction %s, doing so would result in an inconsistent package database.rrÚforcer!NzZCannot rollback transaction %s, doing so would result in an inconsistent package database.) Ú isinstancer Ú exceptionsZTransactionCheckErrorr1rr(rr4rÚCommandÚget_error_output)rÚerrorZid_rrrrG’s  ÿ ÿÿzHistoryCommand.get_error_outputcCs:| |¡}t|ƒ}t|j|dd|jjd|_|j ¡dS)NT©ÚdataÚignore_installedÚ ignore_extrasÚskip_unavailable)Ú_history_get_transactionr rr;r1rMrÚrun)rÚextcmdsÚoldrJrrrÚ _hcmd_redo¡s ûzHistoryCommand._hcmd_redocCsD|stj tdƒ¡‚|jj |¡}|s@tj tdƒ |d¡¡‚|S)NzNo transaction ID givenzTransaction ID "{0}" not found.r)r r4r6rr;r rQr,©rrPrQrrrÚ_history_get_transactions­s z(HistoryCommand._history_get_transactionscCs.| |¡}t|ƒdkr&tj tdƒ¡‚|dS)Nr!z#Found more than one transaction ID!r)rTr7r r4r6rrSrrrrN¶s  z'HistoryCommand._history_get_transactioncCs| |¡}| |¡dS)N)rNÚ_revert_transactionrSrrrÚ _hcmd_undo¼s zHistoryCommand._hcmd_undocCs²| |¡}|jj ¡}d}|j|jkr¤|jj tt|jd|jdƒƒ¡D]X}|jrht   t dƒ|j¡n|j r€t   t dƒ|j¡|dur˜t jj |¡}qJ| |¡qJ| |¡dS)Nr!z-Transaction history is incomplete, before %u.z,Transaction history is incomplete, after %u.)rNr;r ÚlastÚtidrQr ÚrangeZaltered_lt_rpmdbr=ZwarningrZaltered_gt_rpmdbr ZdbZMergedTransactionWrapperÚmergerU)rrPrQrWZ merged_transÚtransrrrÚ_hcmd_rollbackÀs   ( zHistoryCommand._hcmd_rollbackc Csdddddddddd d d œ }t|ƒ}d D]Ì}| |g¡D]º}||d |d <|d dkrp| dd¡dkrpd|d<|d d krÚd|vrÚt |d¡}|jtjgdd}|jjj  |j |j |  ¡dd¡}t j |¡|d<| d¡tjkr8d|d<q8q(t|j|dd|jjd|_|j ¡dS)NÚRemovedÚInstallÚ DowngradedÚ DowngradeÚUpgradedÚUpgradeÚ ReinstallÚ ReinstalledÚ Obsoletedú Reason Change) r^r]rbrar`r_rdrcreZObsoleterf)ZrpmsÚgroupsZ environmentsr&ÚreasonZcleanZ dependencyÚnevra)Zformsrr!Zrepo_idTrI)r ÚgetÚhawkeyZSubjectZget_nevra_possibilitiesZ FORM_NEVRAÚoutputr ZswdbZresolveRPMTransactionItemReasonÚnameZarchÚtidsÚlibdnfZ transactionZTransactionItemReasonToStringZSYSTEM_REPO_NAMErr;r1rMrrO) rr[Z action_maprJZ content_typeZtiZsubjrirhrrrrUÖsJõ ý ûz"HistoryCommand._revert_transactioncCs:t|j ¡ƒ}|j |dd¡}|dkr6tj tdƒ¡‚dS)z&Execute history userinstalled command.zPackages installed by userrirzNo packages to listN) Útupler;Ziter_userinstalledrlZlistPkgsr r4r6r)rZpkgsZn_listedrrrÚ_hcmd_userinstalledsz"HistoryCommand._hcmd_userinstalledc sâ‡fdd„}tƒ}tƒ}ˆjjD]®}d|vrRz| dd¡\}}Wn.tyrt tdƒ |¡¡t j j ‚Yn0tdƒ}z ||ƒ}Wn.ty¶t t|ƒ |¡¡t j j ‚Yn0z ||ƒ}Wn.tyòt t|ƒ |¡¡t j j ‚Yn0ˆj r||krt ˆj ¡t j j ‚||kr.||}}| ||f¡| t||dƒ¡q z| ||ƒ¡Wq tyΈjj |g¡}|r–| |¡n4tdƒ |¡} ˆj rÀt | ¡t j j ‚n t | ¡Yq 0q t|d d |fS) z0Convert commandline arguments to transaction idscsJ|dkrd}n| d¡r$|dd…}t|ƒ}|dkrF|ˆjj ¡j7}|S)NrWÚ0zlast-ér)Ú startswithÚintrlr rWrX)ÚsZtransaction_id©rrrÚstr2transaction_ids  z@HistoryCommand._args2transaction_ids..str2transaction_idz..ézWInvalid transaction ID range definition '{}'. Use '..'.zNCan't convert '{}' to transaction ID. Use '', 'last', 'last-'.r!z8No transaction which manipulates package '{}' was found.T©Úreverse)Úsetr1r(ÚsplitÚ ValueErrorr=r>rr,r r4r6rr3ÚaddÚupdaterYrlr ÚsearchrÚsorted) rrxrnÚ merged_tidsÚtZbegin_transaction_idZend_transaction_idZcant_convert_msgZtransact_ids_from_pkgnamerArrwrÚ_args2transaction_ids s^   þÿ      ÿ ÿ  z$HistoryCommand._args2transaction_idsc CsP|jj}|dkrDt|j|jj|jj|jj|jjd|_|j  ¡n|  ¡\}}|dkr||sd|jj s||j j ||jjdnÐ|dkr¨|s|jj s¨|j  ||jj |¡n¤|dkr¾| |¡nŽ|dkrÔ| |¡nx|dkrê| |¡nb|d krþ| ¡nN|d krL| |¡}t|ƒ}zð|jj dur2|jj nd }|jjjsN|jjjs®tj |¡r®td ƒ |¡}|jjjs–|jj jd  |¡d |¡ds®ttdƒ |¡ƒWdSt |dƒ,}t!j"||ddd| #d¡Wdƒn1sì0Yttdƒ |¡ƒWn@t$yJ} z&t%j& 'tdƒ t(| ƒ¡¡‚WYd} ~ n d} ~ 00dS)Nr)ÚfilenamerKrLrMr rzrrrrrrztransaction.jsonz{} exists, overwrite?z {} [y/N]: z {} [Y/n]: )rAZdefaultyes_msgzNot overwriting {}, exiting.ÚwrsT)ÚindentZ sort_keysÚ zTransaction saved to {}.zError storing transaction: {}))r1rrr;r*rKrLrMrrOr…r(rlZhistoryListCmdr{ZhistoryInfoCmdrVrRr\rqrNr r<ZassumenoZ assumeyesr8r9Úisfilerr,Z userconfirmÚprintÚopenÚjsonÚdumpÚwriteÚOSErrorr r4r6Ústr) rZvcmdrnrƒrXrJr†rAÚfÚerrrrOMsRû    &ÿ *zHistoryCommand.runcCs|jjdvrdS|j ¡dS)N©rrrr)r1rrZpost_transactionrwrrrÚ run_resolveds zHistoryCommand.run_resolvedcCsT|jjdvrdS|j ¡}|rPt tjjt dƒ¡|D]}t tjjd|¡q6dS)Nr”zEWarning, the following problems occurred while running a transaction:z ) r1rrZ get_warningsr=Úlogr ÚloggingZWARNINGr)rÚwarningsr‡rrrÚrun_transaction…s  þzHistoryCommand.run_transaction)Ú__name__Ú __module__Ú __qualname__Ú__doc__ÚaliasesrZsummaryr-rÚ staticmethodr0rBrGrRrTrNrVr\rUrqr…rOr•r™Ú __classcell__rrrrr *s(  =  0@2r )Z __future__rrrrorkZdnf.i18nrrZdnf.clirZdnf.transaction_srrr r Zdnf.exceptionsZdnf.transactionZdnf.utilrr—r8Z getLoggerr=rFr rrrrÚs