<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
g%F                 @   s   d dl mZ d dl mZ d dl mZ d dlZd dlZd dlmZmZ d dl	m
Z
 d dlmZmZ d dl	Zd dlZd dlZd dlZd dlZd dlZd dlZejdZG d	d
 d
e
jZdS )    )absolute_import)print_function)unicode_literalsN)_ucd)commands)TransactionReplayserialize_transactiondnfc                   s   e Zd ZdZd+ZedZddddd	d
ddgZ fddZe	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Z  ZS ),HistoryCommandzUA class containing methods needed by the cli to execute the
    history command.
    historyhistz(display, or use, the transaction historylistinforedoreplayrollbackstoreundouserinstalledc                s   t t| j|| d| _d S )NF)superr   __init___require_one_transaction_id)selfargskw)	__class__ /usr/lib/python3.6/history.pyr   4   s    zHistoryCommand.__init__c          
   C   s   | j ddddjtjd djtjdd  d | j d	d
dd | j ddd tdd | j dd
tdd | j dd
tdd | j dd
tdd | j ddddd | j ddddd d S )Ntransactions_action?ZCOMMANDz$Available commands: {} (default), {}r   z,    )nargsmetavarhelpz	--reverse
store_truez$display history list output reversed)actionr$   z-oz--outputz<For the store command, file path to store the transaction to)defaultr$   z--ignore-installedzXFor the replay command, don't check for installed packages matching those in transactionz--ignore-extraszRFor the replay command, don't check for extra packages pulled into the transactionz--skip-unavailablezYFor the replay command, skip packages that are not available or have missing dependenciestransactions*ZTRANSACTIONzFor commands working with history transactions, Transaction ID (<number>, 'last' or 'last-<number>' for one transaction, <transaction-id>..<transaction-id> for a range)transaction_filenameZTRANSACTION_FILEzEFor the replay command, path to the stored transaction file to replay)add_argumentformatr   _CMDSjoinr   )parserr   r   r   set_argparser9   s$    



zHistoryCommand.set_argparserc             C   s.  | j js| jd | j _n0| j j| jkrH| j jjd| j j | jd | j _tdj| j j| _| jj	}| j jdkr| j jst
jjtdt| j jdkrt
jjtdtjj| j jd | j _g | j _d|_d|_d|_d| jj_d| jj_t
jjj| j| j n| j jd	kr6d| _| j jst
jjtd
n| j jdkrd|_d|_d|_d| _| j jstd
}tj| t
jj|n,t| j jdkrtj| j t
jj| jd|_t
jjj| j| j nd|_d|_| jjjdkr*tj | jjjtj! r*td| jjj }tj| t
jj|d S )Nr   zUFound more than one transaction ID.
'{}' requires one transaction ID or package name.r   zNo transaction file name given.r!   z6More than one argument given as transaction file name.TFr   z(No transaction ID or package name given.r   r   r   z:memory:z+You don't have access to the history DB: %s)r   r   r   )"optsr   r-   r(   insertr   r,   _require_one_transaction_id_msgclidemandsr
   CliErrorlenospathabspathr*   Zavailable_reposZ	resolvingZ	root_userbaseconfZclean_requirements_on_removeZinstall_weak_depsr   Z_checkGPGKeyr   loggercriticalZfresh_metadataZsack_activationr   accessR_OK)r   r5   msgr   r   r   	configureU   sZ    




(
zHistoryCommand.configurec             C   s   t |tjjrv| jjdkr2| jj\}td| fS | jjdkrv| jjd dkrV| jjn| jjdd \}td| fS tjj	j
j| |S )	z.Get suggestions for resolving the given error.r   zVCannot undo transaction %s, doing so would result in an inconsistent package database.r   r   forcer!   NzZCannot rollback transaction %s, doing so would result in an inconsistent package database.)
isinstancer
   
exceptionsZTransactionCheckErrorr1   r   r(   r   r4   r   Commandget_error_output)r   errorZid_r   r   r   rG      s    
zHistoryCommand.get_error_outputc             C   s:   | j |}t|}t| j|dd| jjd| _| jj  d S )NT)dataignore_installedignore_extrasskip_unavailable)_history_get_transactionr	   r   r;   r1   rL   r   run)r   extcmdsoldrI   r   r   r   
_hcmd_redo   s    
zHistoryCommand._hcmd_redoc             C   sD   |st jjtd| jjj|}|s@t jjtdj|d |S )NzNo transaction ID givenzTransaction ID "{0}" not found.r   )r
   r4   r6   r   r;   r   rP   r,   )r   rO   rP   r   r   r   _history_get_transactions   s    z(HistoryCommand._history_get_transactionsc             C   s.   | j |}t|dkr&tjjtd|d S )Nr!   z#Found more than one transaction ID!r   )rR   r7   r
   r4   r6   r   )r   rO   rP   r   r   r   rM      s    
z'HistoryCommand._history_get_transactionc             C   s   | j |}| j| d S )N)rM   _revert_transaction)r   rO   rP   r   r   r   
_hcmd_undo   s    
zHistoryCommand._hcmd_undoc             C   s   | j |}| jjj }d }|j|jkrx| jjjtt|jd |jd D ]X}|jrjt	j
td|j n|jrt	j
td|j |d krtjjj|}qL|j| qLW | j| d S )Nr!   z-Transaction history is incomplete, before %u.z,Transaction history is incomplete, after %u.)rM   r;   r   lasttidrP   r   rangeZaltered_lt_rpmdbr=   Zwarningr   Zaltered_gt_rpmdbr
   ZdbZMergedTransactionWrappermergerS   )r   rO   rP   rU   Zmerged_transtransr   r   r   _hcmd_rollback   s    
*zHistoryCommand._hcmd_rollbackc       	      C   s&  dddddddddd	d
d}t |}xdD ]}x|j|g D ]}||d  |d< |d dkrt|jdd dkrtd|d< |d d
krd|krtj|d }|jtjgdd }| jjjj	|j
|j|j d d }tjj||d< |jdtjkr<d |d< q<W q*W t| j|dd| jjd| _| jj  d S )NRemovedInstall
Downgraded	DowngradeUpgradedUpgrade	ReinstallReinstalled	ObsoletedzReason Change)r\   r[   r`   r_   r^   r]   rb   ra   rc   ZObsoletezReason Changerpmsgroupsenvironmentsr&   reasonZcleanZ
dependencynevra)Zformsr   r!   Zrepo_idT)rI   rJ   rK   rL   )rd   re   rf   )r	   gethawkeyZSubjectZget_nevra_possibilitiesZ
FORM_NEVRAoutputr   ZswdbZresolveRPMTransactionItemReasonnameZarchtidslibdnfZtransactionZTransactionItemReasonToStringZSYSTEM_REPO_NAMEr   r;   r1   rL   r   rN   )	r   rY   Z
action_maprI   Zcontent_typeZtiZsubjrh   rg   r   r   r   rS      sD    

z"HistoryCommand._revert_transactionc             C   s:   t | jj }| jj|dd}|dkr6tjjtddS )z&Execute history userinstalled command.zPackages installed by userrh   r   zNo packages to listN)	tupler;   Ziter_userinstalledrk   ZlistPkgsr
   r4   r6   r   )r   ZpkgsZn_listedr   r   r   _hcmd_userinstalled  s    z"HistoryCommand._hcmd_userinstalledc       
         s   fdd}t  }t  }xĈ jjD ]}d|kr\y|jdd\}}W n0 tk
rx   tjtdj| t	j
jY nX td}y||}W n0 tk
r   tjt|j| t	j
jY nX y||}W n0 tk
r   tjt|j| t	j
jY nX  jr$||kr$tj j t	j
j||kr8|| }}|j||f |jt||d  q$y|j|| W q$ tk
r    jjj|g}|r|j| n4tdj|}	 jrtj|	 t	j
jn
tj|	 Y q$X q$W t|d	d
|fS )z0Convert commandline arguments to transaction idsc                sJ   | dkrd} n| j dr$| dd  } t| }|dkrF| jjj j7 }|S )NrU   0zlast-   r   )
startswithintrk   r   rU   rV   )sZtransaction_id)r   r   r   str2transaction_id  s    
z@HistoryCommand._args2transaction_ids.<locals>.str2transaction_idz..   zWInvalid transaction ID range definition '{}'.
Use '<transaction-id>..<transaction-id>'.zNCan't convert '{}' to transaction ID.
Use '<number>', 'last', 'last-<number>'.r!   z8No transaction which manipulates package '{}' was found.T)reverse)setr1   r(   split
ValueErrorr=   r>   r   r,   r
   r4   r6   r   r3   addupdaterW   rk   r   searchr   sorted)
r   rv   rm   merged_tidstZbegin_transaction_idZend_transaction_idZcant_convert_msgZtransact_ids_from_pkgnamerA   r   )r   r   _args2transaction_ids  sV    





z$HistoryCommand._args2transaction_idsc       
      C   s@  | j j}|dkrDt| j| j j| j j| j j| j jd| _| jj	  n| j
 \}}|dkr~|sf| j j r~| jj|| j jd n|dkr|s| j j r| jj|| j j| n|dkr| j| nz|dkr| j| nd|dkr| j| nN|d	kr| j  n8|d
kr<| j|}t|}y| j jd k	r8| j jnd}| jjjsV| jjj rtjj|rtdj|}| jjjs| jjjdj|dj|d rttdj| d S t |d"}t!j"||ddd |j#d W d Q R X ttdj| W n> t$k
r: }	 z t%j&j'tdjt(|	W Y d d }	~	X nX d S )Nr   )filenamerJ   rK   rL   r   )rx   r   r   r   r   r   r   ztransaction.jsonz{} exists, overwrite?z
{} [y/N]: z
{} [Y/n]: )rA   Zdefaultyes_msgzNot overwriting {}, exiting.wrr   T)indentZ	sort_keys
zTransaction saved to {}.zError storing transaction: {}))r1   r   r   r;   r*   rJ   rK   rL   r   rN   r   r(   rk   ZhistoryListCmdrx   ZhistoryInfoCmdrT   rQ   rZ   rp   rM   r	   r<   ZassumenoZ	assumeyesr8   r9   isfiler   r,   ZuserconfirmprintopenjsondumpwriteOSErrorr
   r4   r6   str)
r   Zvcmdrm   r   rV   rI   r   rA   fer   r   r   rN   M  sN    


(zHistoryCommand.runc             C   s   | j jdkrd S | jj  d S )Nr   r   r   r   )r   r   r   r   )r1   r   r   Zpost_transaction)r   r   r   r   run_resolved  s    zHistoryCommand.run_resolvedc             C   sX   | j jdkrd S | jj }|rTtjtjjt	d x |D ]}tjtjjd|  q8W d S )Nr   r   r   r   zEWarning, the following problems occurred while running a transaction:z  )r   r   r   r   )
r1   r   r   Zget_warningsr=   logr
   loggingZWARNINGr   )r   warningsr   r   r   r   run_transaction  s    


zHistoryCommand.run_transaction)r   r   )__name__
__module____qualname____doc__aliasesr   Zsummaryr-   r   staticmethodr0   rB   rG   rQ   rR   rM   rT   rZ   rS   rp   r   rN   r   r   __classcell__r   r   )r   r   r   *   s&   =	0@2r   )Z
__future__r   r   r   rn   rj   Zdnf.i18nr   r   Zdnf.clir   Zdnf.transaction_srr   r	   r
   Zdnf.exceptionsZdnf.transactionZdnf.utilr   r   r8   Z	getLoggerr=   rF   r   r   r   r   r   <module>   s    
