<!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
ft`%:                 @   s   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ ddlmZmZmZ G dd deZG d	d
 d
eZG dd deZG dd deZdS )    N)ucd)misc)DatabaseError   )GroupPersistorEnvironmentPersistorRPMTransactionc               @   sj  e Z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edd Zedd Zedd Zedd Zedd  Zed!d" Zed#d$ Zed%d& Zejd'd& Zed(d) Zejd*d) Zed+d, Zed-d. Zed/d0 Zejd1d0 Zed2d3 Zd4d5 Zed6d7 Zd8d9 Zed:d; Z ed<d= Z!ed>d? Z"d@S )ARPMTransactionItemWrapperc             C   s   || _ || _d S )N)_swdb_item)selfswdbitem r   /usr/lib/python3.6/history.py__init__#   s    z"RPMTransactionItemWrapper.__init__c             C   s   | j j j S )N)r   ZgetItemZtoStr)r   r   r   r   __str__(   s    z!RPMTransactionItemWrapper.__str__c             C   s   | j |j k S )N)r   )r   otherr   r   r   __lt__+   s    z RPMTransactionItemWrapper.__lt__c             C   s   | j |j kS )N)r   )r   r   r   r   r   __eq__.   s    z RPMTransactionItemWrapper.__eq__c             C   s
   | j j S )N)r   __hash__)r   r   r   r   r   1   s    z"RPMTransactionItemWrapper.__hash__c             C   s   dS )NTr   )r   patternr   r   r   match4   s    zRPMTransactionItemWrapper.matchc             C   s   | j j d k	S )N)r   
getRPMItem)r   r   r   r   
is_package7   s    z$RPMTransactionItemWrapper.is_packagec             C   s   | j j d k	S )N)r   getCompsGroupItem)r   r   r   r   is_group:   s    z"RPMTransactionItemWrapper.is_groupc             C   s   | j j d k	S )N)r   getCompsEnvironmentItem)r   r   r   r   is_environment=   s    z(RPMTransactionItemWrapper.is_environmentc             C   s
   | j j S )N)r   r   )r   r   r   r   	get_group@   s    z#RPMTransactionItemWrapper.get_groupc             C   s
   | j j S )N)r   r   )r   r   r   r   get_environmentC   s    z)RPMTransactionItemWrapper.get_environmentc             C   s   | j j j S )N)r   r   ZgetName)r   r   r   r   nameF   s    zRPMTransactionItemWrapper.namec             C   s   | j j j S )N)r   r   ZgetEpoch)r   r   r   r   epochJ   s    zRPMTransactionItemWrapper.epochc             C   s   | j j j S )N)r   r   Z
getVersion)r   r   r   r   versionN   s    z!RPMTransactionItemWrapper.versionc             C   s   | j j j S )N)r   r   Z
getRelease)r   r   r   r   releaseR   s    z!RPMTransactionItemWrapper.releasec             C   s   | j j j S )N)r   r   ZgetArch)r   r   r   r   archV   s    zRPMTransactionItemWrapper.archc             C   s*   | j rdj| j | j| jS dj| j| jS )Nz{}:{}-{}z{}-{})r"   formatr#   r$   )r   r   r   r   evrZ   s    zRPMTransactionItemWrapper.evrc             C   s   | j j j S )N)r   r   ZgetNEVRA)r   r   r   r   nevra`   s    zRPMTransactionItemWrapper.nevrac             C   s
   | j j S )N)r   Z	getAction)r   r   r   r   actiond   s    z RPMTransactionItemWrapper.actionc             C   s   | j j| d S )N)r   Z	setAction)r   valuer   r   r   r)   h   s    c             C   s
   | j j S )N)r   Z	getReason)r   r   r   r   reasonl   s    z RPMTransactionItemWrapper.reasonc             C   s   | j j|S )N)r   Z	setReason)r   r*   r   r   r   r+   p   s    c             C   s$   y
| j j S  tk
r   dS X d S )N )r   ZgetActionNameAttributeError)r   r   r   r   action_namet   s    
z%RPMTransactionItemWrapper.action_namec             C   s$   y
| j j S  tk
r   dS X d S )Nr,   )r   ZgetActionShortr-   )r   r   r   r   action_short{   s    
z&RPMTransactionItemWrapper.action_shortc             C   s
   | j j S )N)r   getState)r   r   r   r   state   s    zRPMTransactionItemWrapper.statec             C   s   | j j| d S )N)r   setState)r   r*   r   r   r   r1      s    c             C   s
   | j j S )N)r   	getRepoid)r   r   r   r   	from_repo   s    z#RPMTransactionItemWrapper.from_repoc             C   s   | j j sdS d| j j  S )Nr,   @)r   r3   )r   r   r   r   ui_from_repo   s    
z&RPMTransactionItemWrapper.ui_from_repoc             C   s   d S )Nr   )r   r   r   r   
obsoleting   s    z$RPMTransactionItemWrapper.obsoletingc             C   s   | j jj| S )N)r
   rpm
get_reason)r   r   r   r   r9      s    z$RPMTransactionItemWrapper.get_reasonc             C   s   | j jj| j S )N)r
   r8   Z_swdb_ti_pkgr   )r   r   r   r   pkg   s    zRPMTransactionItemWrapper.pkgc             C   s   | j jS )N)r:   files)r   r   r   r   r;      s    zRPMTransactionItemWrapper.filesc             C   s   | j S )N)r:   )r   r   r   r   _active   s    z!RPMTransactionItemWrapper._activeN)#__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r    propertyr!   r"   r#   r$   r%   r'   r(   r)   setterr+   r.   r/   r1   r4   r6   r7   r9   r:   r;   r<   r   r   r   r   r	   "   sB   r	   c               @   s   e Zd ZdZdZdd Zedd Zedd Zedd	 Z	ed
d Z
edd Zedd Zedd Zedd Zedd Zedd Ze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(S ))TransactionWrapperFc             C   s
   || _ d S )N)_trans)r   transr   r   r   r      s    zTransactionWrapper.__init__c             C   s
   | j j S )N)rC   getId)r   r   r   r   tid   s    zTransactionWrapper.tidc             C   s
   | j j S )N)rC   Z
getCmdline)r   r   r   r   cmdline   s    zTransactionWrapper.cmdlinec             C   s
   | j j S )N)rC   ZgetReleasever)r   r   r   r   
releasever   s    zTransactionWrapper.releaseverc             C   s
   | j j S )N)rC   Z
getDtBegin)r   r   r   r   beg_timestamp   s    z TransactionWrapper.beg_timestampc             C   s
   | j j S )N)rC   ZgetDtEnd)r   r   r   r   end_timestamp   s    z TransactionWrapper.end_timestampc             C   s
   | j j S )N)rC   getRpmdbVersionBegin)r   r   r   r   beg_rpmdb_version   s    z$TransactionWrapper.beg_rpmdb_versionc             C   s
   | j j S )N)rC   getRpmdbVersionEnd)r   r   r   r   end_rpmdb_version   s    z$TransactionWrapper.end_rpmdb_versionc             C   s   t | jj tjjkS )N)intrC   r0   libdnftransactionTransactionItemState_DONE)r   r   r   r   return_code   s    zTransactionWrapper.return_codec             C   s
   | j j S )N)rC   Z	getUserId)r   r   r   r   loginuid   s    zTransactionWrapper.loginuidc             C   s   | j S )N)packages)r   r   r   r   data   s    zTransactionWrapper.datac             C   s   | j j }t|S )N)rC   getConsoleOutputbool)r   outputr   r   r   	is_output   s    
zTransactionWrapper.is_outputc             C   s
   | j j S )N)rC   Z
getComment)r   r   r   r   comment   s    zTransactionWrapper.commentc             C   s   | j j gS )N)rC   rE   )r   r   r   r   tids   s    zTransactionWrapper.tidsc             C   s   g S )Nr   )r   r   r   r   performed_with   s    z!TransactionWrapper.performed_withc                s    j j } fdd|D S )Nc                s   g | ]}t  |qS r   )r	   ).0i)r   r   r   
<listcomp>   s    z/TransactionWrapper.packages.<locals>.<listcomp>)rC   ZgetItems)r   resultr   )r   r   rU      s    
zTransactionWrapper.packagesc             C   s   dd | j j D S )Nc             S   s   g | ]}|d  qS )r   r   )r^   r_   r   r   r   r`      s    z-TransactionWrapper.output.<locals>.<listcomp>)rC   rW   )r   r   r   r   rY      s    zTransactionWrapper.outputc             C   s   g S )Nr   )r   r   r   r   error   s    zTransactionWrapper.errorc             C   s   | j j |k| _d S )N)rC   rM   altered_gt_rpmdb)r   Zrpmdbvr   r   r   compare_rpmdbv   s    z!TransactionWrapper.compare_rpmdbvN)r=   r>   r?   altered_lt_rpmdbrc   r   r@   rF   rG   rH   rI   rJ   rL   rN   rS   rT   rV   rZ   r[   r\   r]   rU   rY   rb   rd   r   r   r   r   rB      s*   rB   c               @   sh   e Zd Zdd Zdd Zedd Zdd Zed	d
 Zedd Z	edd Z
edd Zdd ZdS )MergedTransactionWrapperc             C   s   t jj|j| _d S )N)rP   rQ   ZMergedTransactionrC   )r   rD   r   r   r   r      s    z!MergedTransactionWrapper.__init__c             C   s   | j j|j  d S )N)rC   merge)r   rD   r   r   r   rg      s    zMergedTransactionWrapper.mergec             C   s
   | j j S )N)rC   ZlistUserIds)r   r   r   r   rT      s    z!MergedTransactionWrapper.loginuidc             C   s
   | j j S )N)rC   ZlistIds)r   r   r   r   r\     s    zMergedTransactionWrapper.tidsc             C   s   dd | j j D S )Nc             S   s   g | ]}t |tjjkqS r   )rO   rP   rQ   rR   )r^   r_   r   r   r   r`     s    z8MergedTransactionWrapper.return_code.<locals>.<listcomp>)rC   Z
listStates)r   r   r   r   rS     s    z$MergedTransactionWrapper.return_codec             C   s
   | j j S )N)rC   ZlistCmdlines)r   r   r   r   rG     s    z MergedTransactionWrapper.cmdlinec             C   s
   | j j S )N)rC   ZlistReleasevers)r   r   r   r   rH     s    z#MergedTransactionWrapper.releaseverc             C   s
   | j j S )N)rC   ZlistComments)r   r   r   r   r[     s    z MergedTransactionWrapper.commentc             C   s   dd | j j D S )Nc             S   s   g | ]}|d  qS )r   r   )r^   r_   r   r   r   r`     s    z3MergedTransactionWrapper.output.<locals>.<listcomp>)rC   rW   )r   r   r   r   rY     s    zMergedTransactionWrapper.outputN)r=   r>   r?   r   rg   r@   rT   r\   rS   rG   rH   r[   rY   r   r   r   r   rf      s   rf   c               @   s   e Zd Zd6ddZdd Zedd Zedd	 Zed
d Zedd Z	edd Z
dd Zdd Zedd Zdd Zd7ddZd8ddZd d! Zd"d# Zd$d% Zd&d' Zd9d(d)Zd*d+ Zd,d- Zd:d.d/Zd;d0d1Zd2d3 Zd4d5 ZdS )<SwdbInterfacer,   c             C   s8   t || _d | _d | _d | _d | _d | _|| _g | _d S )N)	strrH   _rpm_group_envZ_addon_datar
   _db_dir_output)r   Zdb_dirrH   r   r   r   r     s    
zSwdbInterface.__init__c             C   s   | j   d S )N)close)r   r   r   r   __del__%  s    zSwdbInterface.__del__c             C   s   | j d krt| | _ | j S )N)rj   r   )r   r   r   r   r8   (  s    

zSwdbInterface.rpmc             C   s   | j d krt| | _ | j S )N)rk   r   )r   r   r   r   group.  s    

zSwdbInterface.groupc             C   s   | j d krt| | _ | j S )N)rl   r   )r   r   r   r   env4  s    

zSwdbInterface.envc             C   s   t jj| jtjjjS )N)ospathjoinrm   rP   rQ   SwdbZdefaultDatabaseName)r   r   r   r   dbpath:  s    zSwdbInterface.dbpathc             C   sZ   | j sTytjj| j| _ W n. tk
rH } ztt|W Y dd}~X nX | j j  | j S )z Lazy initialize Swdb object N)	r
   rP   rQ   rv   rw   RuntimeErrorr   ri   initTransaction)r   Zexr   r   r   r   >  s    
zSwdbInterface.swdbc             C   s   t jj|| j}|j  d S )N)rP   rQ   ZTransformerrw   	transform)r   Z	input_dirZtransformerr   r   r   rz   K  s    zSwdbInterface.transformc             C   sZ   y| ` W n tk
r   Y nX d | _d | _d | _| jrJ| jj  | jj  d | _g | _d S )N)	_tidr-   rj   rk   rl   r
   ZcloseTransactionZcloseDatabasern   )r   r   r   r   ro   O  s    

zSwdbInterface.closec             C   s
   | j j S )N)r   ZgetPath)r   r   r   r   rt   ]  s    zSwdbInterface.pathc             C   s
   | j j S )N)r   ZresetDatabase)r   r   r   r   reset_dba  s    zSwdbInterface.reset_dbTc             C   s   | j j }|sd S t|S )N)r   ZgetLastTransactionrB   )r   complete_transactions_onlytr   r   r   laste  s    
zSwdbInterface.lastNr   Fc                s    pg  dd  D  | j j }dd |D } rD fdd|D }xJt|D ]>\}}|dkr`qN||d  }|jj |jj krNd|_d|_qNW |d d d S )	Nc             S   s   g | ]}t |qS r   )rO   )r^   r_   r   r   r   r`   o  s    z%SwdbInterface.old.<locals>.<listcomp>c             S   s   g | ]}t |qS r   )rB   )r^   r_   r   r   r   r`   q  s    c                s   g | ]}|j  kr|qS r   )rF   )r^   r_   )r\   r   r   r`   t  s    r   r   T)r   ZlistTransactions	enumeraterC   rK   rM   re   rc   )r   r\   limitr}   ra   r_   rD   Z
prev_transr   )r\   r   oldm  s    

zSwdbInterface.oldc             C   s   t | jj S )N)rB   r   Z
getCurrent)r   r   r   r   get_current  s    zSwdbInterface.get_currentc             C   sB   | j j|}| j|}tjj}| jj||||}|jtjj	 |S )zSet reason for package)
r8   Z_pkg_to_swdb_rpm_itemreporP   rQ   Z#TransactionItemAction_REASON_CHANGEr   ZaddItemr2   rR   )r   r:   r+   rpm_itemZrepoidr)   Ztir   r   r   
set_reason  s    
zSwdbInterface.set_reasonc             C   s   | j jt|S )zGet repository of package)r   Z
getRPMRepori   )r   r:   r   r   r   r     s    zSwdbInterface.repoc             C   s*   | j jt|}|dkr|S t| |}|S )zGet package data for packageN)r   ZgetRPMTransactionItemri   r	   )r   r:   ra   r   r   r   package_data  s
    
zSwdbInterface.package_datac             C   sf   y| j j  W n   Y nX | j jttjtj t||p>dtt	j
 |}| j j| j || _|S )Nr,   )r   ry   ZbeginTransactionrO   calendarZtimegmtimeZgmtimeri   r   ZgetloginuidZsetReleaseverrH   r{   )r   Zrpmdb_versionZ
using_pkgsZtsisrG   r[   rF   r   r   r   beg  s    
zSwdbInterface.begc             C   sN   | j j }|j|j |j|jp"d |j|j |j|j	 |j
|j |S )Nr   )r   ZcreateRPMItemZsetNamer!   ZsetEpochr"   Z
setVersionr#   Z
setReleaser$   ZsetArchr%   )r   Zpor   r   r   r   pkg_to_swdb_rpm_item  s    
z"SwdbInterface.pkg_to_swdb_rpm_itemc             C   sD   t | dsd S |sd S x(|j D ]}t|}| jjd|f q W d S )Nr{   r   )hasattr
splitlinesr   rn   append)r   msgliner   r   r   log_scriptlet_output  s    
z"SwdbInterface.log_scriptlet_outputc             C   s   t | dsd S |d krFtjj}x&| jD ]}|jtjjkr&tjj}P q&W x | jD ]\}}| j	j
|| qNW g | _| j	jttj t|| d S )Nr{   )r   rP   rQ   ZTransactionState_DONEr8   r1   ZTransactionItemState_ERRORZTransactionState_ERRORrn   r   ZaddConsoleOutputLineZendTransactionrO   r   ri   )r   rN   rS   errorsZtsiZfile_descriptorr   r   r   r   end  s    

zSwdbInterface.endc             C   s   | j j|S )z{ Search for history transactions which contain specified
            packages al. la. "yum list". Returns transaction ids. )r   ZsearchTransactionsByRPM)r   ZpatternsZignore_caser   r   r   search  s    zSwdbInterface.searchc             C   s8   | j j|j|jd}|tjjkr$dS |tjjkr4dS dS )z)Returns True if package is user installedr   TFr   )r   resolveRPMTransactionItemReasonr!   r%   rP   rQ   TransactionItemReason_USERTransactionItemReason_UNKNOWN)r   r:   r+   r   r   r   user_installed  s    zSwdbInterface.user_installedc             C   sF   |r| j j|j|j|}n| j j|j|jd}|tjjkrBtjj}|S )a2  Get 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 rollbackr   r   )r   r   r!   r%   rP   rQ   r   r   )r   r:   Zfirst_transZrollbackra   r   r   r   get_erased_reason  s    zSwdbInterface.get_erased_reason)r,   )T)Nr   F)Nr,   )r,   NN)T)r=   r>   r?   r   rp   r@   r8   rq   rr   rw   r   rz   ro   rt   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rh     s0   



	

rh   )r   rs   r   Zlibdnf.transactionrP   Zlibdnf.utilsZdnf.i18nr   Zdnf.yumr   Zdnf.exceptionsr   rq   r   r   r   objectr	   rB   rf   rh   r   r   r   r   <module>   s    M"