3 f%F@sddlmZddlmZddlmZddlZddlZddlmZmZddl m Z ddl m Z m Z ddl ZddlZddlZddlZddlZddlZddlZejdZGd d d e jZdS) )absolute_import)print_function)unicode_literalsN)_ucd)commands)TransactionReplayserialize_transactiondnfcseZdZdZd+ZedZddddd d d d gZfd dZe ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*ZZS),HistoryCommandzUA class containing methods needed by the cli to execute the history command. historyhistz(display, or use, the transaction historylistinforedoreplayrollbackstoreundo userinstalledcstt|j||d|_dS)NF)superr __init___require_one_transaction_id)selfargskw) __class__/usr/lib/python3.6/history.pyr4szHistoryCommand.__init__c Cs|jddddjtjddjtjddd|jd d d d |jd ddtdd|jdd tdd |jdd tdd |jdd tdd |jddddd|jddddddS)Ntransactions_action?ZCOMMANDz$Available commands: {} (default), {}rz, )nargsmetavarhelpz --reverse store_truez$display history list output reversed)actionr$z-oz--outputz, 'last' or 'last-' for one transaction, .. for a range)transaction_filenameZTRANSACTION_FILEzEFor the replay command, path to the stored transaction file to replay) add_argumentformatr _CMDSjoinr)parserrrr set_argparser9s$        zHistoryCommand.set_argparsercCs.|jjs|jd|j_n0|jj|jkrH|jjjd|jj|jd|j_tdj|jj|_|jj }|jjdkr|jjst jj tdt |jjdkrt jj tdt jj|jjd|j_g|j_d|_d|_d|_d|jj_d|jj_t jjj|j|jn|jjd kr6d|_|jjst jj td n|jjdkrd|_d|_d|_d|_|jjstd }tj|t jj |n,t |jjdkrtj|jt jj |jd|_t jjj|j|jnd|_d|_|jjjdkr*t j |jjjt j! r*td|jjj}tj|t jj |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)rrr)"optsrr-r(insertrr,_require_one_transaction_id_msgclidemandsr CliErrorlenospathabspathr*Zavailable_reposZ resolvingZ root_userbaseconfZclean_requirements_on_removeZinstall_weak_depsrZ _checkGPGKeyrloggercriticalZfresh_metadataZsack_activationr accessR_OK)rr5msgrrr configureUsZ       ( zHistoryCommand.configurecCst|tjjrv|jjdkr2|jj\}td|fS|jjdkrv|jjddkrV|jjn|jjdd\}td|fStjj j j ||S) z.Get suggestions for resolving the given error.rzVCannot undo transaction %s, doing so would result in an inconsistent package database.rrforcer!NzZCannot rollback transaction %s, doing so would result in an inconsistent package database.) isinstancer exceptionsZTransactionCheckErrorr1rr(rr4rCommandget_error_output)rerrorZid_rrrrGs   zHistoryCommand.get_error_outputcCs:|j|}t|}t|j|dd|jjd|_|jjdS)NT)dataignore_installed ignore_extrasskip_unavailable)_history_get_transactionr rr;r1rLrrun)rextcmdsoldrIrrr _hcmd_redos zHistoryCommand._hcmd_redocCsD|stjjtd|jjj|}|s@tjjtdj|d|S)NzNo transaction ID givenzTransaction ID "{0}" not found.r)r r4r6rr;r rPr,)rrOrPrrr_history_get_transactionss z(HistoryCommand._history_get_transactionscCs.|j|}t|dkr&tjjtd|dS)Nr!z#Found more than one transaction ID!r)rRr7r r4r6r)rrOrPrrrrMs  z'HistoryCommand._history_get_transactioncCs|j|}|j|dS)N)rM_revert_transaction)rrOrPrrr _hcmd_undos zHistoryCommand._hcmd_undocCs|j|}|jjj}d}|j|jkrx|jjjtt|jd|jdD]X}|jrjt j t d|jn|j rt j t d|j|dkrt jjj|}qL|j|qLW|j|dS)Nr!z-Transaction history is incomplete, before %u.z,Transaction history is incomplete, after %u.)rMr;r lasttidrPrrangeZaltered_lt_rpmdbr=ZwarningrZaltered_gt_rpmdbr ZdbZMergedTransactionWrappermergerS)rrOrPrUZ merged_transtransrrr_hcmd_rollbacks   *zHistoryCommand._hcmd_rollbackc Cs&dddddddddd d d }t|}xdD]}x|j|gD]}||d|d<|ddkrt|jdddkrtd|d<|dd krd|krtj|d}|jtjgdd}|jjjj |j |j |j dd}t jj||d<|jdtjkr.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 r4r6rr3addupdaterWrkr searchrsorted) rrvrm merged_tidstZbegin_transaction_idZend_transaction_idZcant_convert_msgZtransact_ids_from_pkgnamerAr)rr_args2transaction_ids sV          z$HistoryCommand._args2transaction_idsc Cs@|jj}|dkrDt|j|jj|jj|jj|jjd|_|jj n|j \}}|dkr~|sf|jj r~|j j ||jjdn|dkr|s|jj r|j j||jj |n|dkr|j|nz|dkr|j|nd|dkr|j|nN|d kr|jn8|d kr<|j|}t|}y|jj dk r8|jj nd }|jjjsV|jjj rtjj|rtd j|}|jjjs|jj jd j|dj|d rttdj|dSt |d"}t!j"||ddd|j#dWdQRXttdj|Wn>t$k r:} z t%j&j'tdjt(| WYdd} ~ XnXdS)Nr)filenamerJrKrLr)rxrrrrrrztransaction.jsonz{} exists, overwrite?z {} [y/N]: z {} [Y/n]: )rAZdefaultyes_msgzNot overwriting {}, exiting.wrrT)indentZ sort_keys zTransaction saved to {}.zError storing transaction: {}))r1rrr;r*rJrKrLrrNrr(rkZhistoryListCmdrxZhistoryInfoCmdrTrQrZrprMr r<ZassumenoZ assumeyesr8r9isfilerr,Z userconfirmprintopenjsondumpwriteOSErrorr r4r6str) rZvcmdrmrrVrIrrAferrrrNMsN     ( zHistoryCommand.runcCs|jjdkrdS|jjdS)Nrrrr)rrrr)r1rrZpost_transaction)rrrr run_resolveds zHistoryCommand.run_resolvedcCsX|jjdkrdS|jj}|rTtjtjjt dx |D]}tjtjjd|q8WdS)NrrrrzEWarning, the following problems occurred while running a transaction:z )rrrr) r1rrZ get_warningsr=logr loggingZWARNINGr)rwarningsrrrrrun_transactions    zHistoryCommand.run_transaction)r r )__name__ __module__ __qualname____doc__aliasesrZsummaryr-r staticmethodr0rBrGrQrRrMrTrZrSrprrNrr __classcell__rr)rrr *s&  =  0@2r )Z __future__rrrrnrjZdnf.i18nrrZdnf.clirZdnf.transaction_srrr r Zdnf.exceptionsZdnf.transactionZdnf.utilrrr8Z getLoggerr=rFr rrrrs