<!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<                 @   s   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
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)_)loggerc               @   sl   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dd ZdS )PersistorBasec             C   s"   || _ i | _i | _i | _i | _d S )N)history
_installed_removed	_upgraded_downgraded)selfr    r   /usr/lib/python3.6/group.py__init__    s
    zPersistorBase.__init__c             C   s(   t | jt | j t | j t | j S )N)lenr   r   r   r	   )r
   r   r   r   __len__(   s    zPersistorBase.__len__c             C   s   i | _ i | _i | _i | _d S )N)r   r   r   r	   )r
   r   r   r   clean+   s    zPersistorBase.cleanc             C   s   t d S )N)NotImplementedError)r
   objr   r   r   _get_obj_id1   s    zPersistorBase._get_obj_idc             C   s*   | j jj|d|tjj}|jtjj d S )N )r   swdbaddItemlibdnftransactionTransactionItemReason_USERZsetStateZTransactionItemState_DONE)r
   itemactiontir   r   r   _add_to_history4   s    zPersistorBase._add_to_historyc             C   s$   || j | j|< | j|tjj d S )N)r   r   r   r   r   TransactionItemAction_INSTALL)r
   r   r   r   r   install8   s    zPersistorBase.installc             C   s$   || j | j|< | j|tjj d S )N)r   r   r   r   r   TransactionItemAction_REMOVE)r
   r   r   r   r   remove<   s    zPersistorBase.removec             C   s$   || j | j|< | j|tjj d S )N)r   r   r   r   r   TransactionItemAction_UPGRADE)r
   r   r   r   r   upgrade@   s    zPersistorBase.upgradec             C   s$   || j | j|< | j|tjj d S )N)r	   r   r   r   r   TransactionItemAction_DOWNGRADE)r
   r   r   r   r   	downgradeD   s    zPersistorBase.downgradec             C   s   t d S )N)r   )r
   obj_idnametranslated_name	pkg_typesr   r   r   newH   s    zPersistorBase.newc             C   s   t d S )N)r   )r
   r&   r   r   r   getK   s    zPersistorBase.getc             C   s   t d S )N)r   )r
   patternr   r   r   search_by_patternN   s    zPersistorBase.search_by_patternN)__name__
__module____qualname__r   r   r   r   r   r   r!   r#   r%   r*   r+   r-   r   r   r   r   r      s   r   c               @   sD   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S )GroupPersistorc             C   s"   | j jj }dd |D }t|S )Nc             S   s   g | ]}|j  r|qS r   )getCompsGroupItem).0ir   r   r   
<listcomp>V   s    z+GroupPersistor.__iter__.<locals>.<listcomp>)r   r   getItemsiter)r
   itemsr   r   r   __iter__T   s    zGroupPersistor.__iter__c             C   s   |j  S )N)
getGroupId)r
   r   r   r   r   r   Y   s    zGroupPersistor._get_obj_idc             C   sH   | j jj }|j| |d k	r(|j| |d k	r:|j| |j| |S )N)r   r   ZcreateCompsGroupItemZ
setGroupIdsetNamesetTranslatedNamesetPackageTypes)r
   r&   r'   r(   r)   
swdb_groupr   r   r   r*   \   s    



zGroupPersistor.newc             C   s"   | j jj|}|sd S |j }|S )N)r   r   r2   )r
   r&   r>   r   r   r   r+   f   s
    zGroupPersistor.getc             C   s   | j jj|S )N)r   r   ZgetCompsGroupItemsByPattern)r
   r,   r   r   r   r-   m   s    z GroupPersistor.search_by_patternc             C   s   | j jj|S )N)r   r   ZgetPackageCompsGroups)r
   pkg_namer   r   r   get_package_groupsp   s    z!GroupPersistor.get_package_groupsc             C   s   | j jj|dd}|tjjkr"dS t| j|}xJ| jj	 D ]<\}}x2|j
 D ]&}|j |kr`qN|j sjqN|j| qNW q<W xJ| jj	 D ]<\}}x2|j
 D ]&}|j |krq|j sq|j| qW qW |rdS dS )Nr      FT)r   r   resolveRPMTransactionItemReasonr   r   ZTransactionItemReason_GROUPsetr@   r   r8   ZgetPackagesZgetNamegetInstalledr!   r   add)r
   r?   reasonZpackage_groupsgroup_idgrouppkgr   r   r   is_removable_pkgs   s*    zGroupPersistor.is_removable_pkgN)
r.   r/   r0   r9   r   r*   r+   r-   r@   rK   r   r   r   r   r1   R   s   
r1   c               @   sD   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S )EnvironmentPersistorc             C   s"   | j jj }dd |D }t|S )Nc             S   s   g | ]}|j  r|qS r   )getCompsEnvironmentItem)r3   r4   r   r   r   r5      s    z1EnvironmentPersistor.__iter__.<locals>.<listcomp>)r   r   r6   r7   )r
   r8   r   r   r   r9      s    zEnvironmentPersistor.__iter__c             C   s   |j  S )N)ZgetEnvironmentId)r
   r   r   r   r   r      s    z EnvironmentPersistor._get_obj_idc             C   sH   | j jj }|j| |d k	r(|j| |d k	r:|j| |j| |S )N)r   r   ZcreateCompsEnvironmentItemZsetEnvironmentIdr;   r<   r=   )r
   r&   r'   r(   r)   swdb_envr   r   r   r*      s    



zEnvironmentPersistor.newc             C   s"   | j jj|}|sd S |j }|S )N)r   r   rM   )r
   r&   rN   r   r   r   r+      s
    zEnvironmentPersistor.getc             C   s   | j jj|S )N)r   r   Z!getCompsEnvironmentItemsByPattern)r
   r,   r   r   r   r-      s    z&EnvironmentPersistor.search_by_patternc             C   s   | j jj|S )N)r   r   ZgetCompsGroupEnvironments)r
   rH   r   r   r   get_group_environments   s    z+EnvironmentPersistor.get_group_environmentsc             C   s   | j jj|}|sdS t| j|}xJ| jj D ]<\}}x2|j D ]&}|j |krTqB|j	 s^qB|j
| qBW q0W xJ| jj D ]<\}}x2|j D ]&}|j |krq|j	 sq|j| qW q|W |rdS dS )NFT)r   rI   r+   rD   rO   r   r8   Z	getGroupsr:   rE   r!   r   rF   )r
   rH   r>   Zgroup_environmentsZenv_idenvrI   r   r   r   is_removable_group   s*    z'EnvironmentPersistor.is_removable_groupN)
r.   r/   r0   r9   r   r*   r+   r-   rO   rQ   r   r   r   r   rL      s   
rL   c               @   s   e Zd Zd,ddZdd Zdd Zdd	 Zd-d
dZdd Zdd Z	dd Z
d.ddZd/ddZd0ddZd1ddZd2ddZd3ddZd4ddZd d! Zd"d# Zed$d% Zed&d' Zd(d) Zd*d+ ZdS )5RPMTransactionNc          	   C   s:   || _ || _| js0y| j jj  W n   Y nX i | _d S )N)r   r   r   ZinitTransaction_swdb_ti_pkg)r
   r   r   r   r   r   r      s    zRPMTransaction.__init__c                s8    j r j j }n jjj } fdd|D }t|S )Nc                s&   g | ]}|j  rtjjj j|qS r   )
getRPMItemdnfdbr   RPMTransactionItemWrapper)r3   r4   )r
   r   r   r5      s    z+RPMTransaction.__iter__.<locals>.<listcomp>)r   r6   r   r   r7   )r
   r8   r   )r
   r   r9      s
    zRPMTransaction.__iter__c                s8    j r j j }n jjj } fdd|D }t|S )Nc                s&   g | ]}|j  rtjjj j|qS r   )rT   rU   rV   r   rW   )r3   r4   )r
   r   r   r5      s    z*RPMTransaction.__len__.<locals>.<listcomp>)r   r6   r   r   r   )r
   r8   r   )r
   r   r      s
    zRPMTransaction.__len__c             C   sP   | j jj }|j|j |j|jp$d |j|j |j	|j
 |j|j |S )Nr   )r   r   ZcreateRPMItemr;   r'   ZsetEpochZepochZ
setVersionversionZ
setReleasereleaseZsetArcharch)r
   rJ   rpm_itemr   r   r   _pkg_to_swdb_rpm_item   s    z$RPMTransaction._pkg_to_swdb_rpm_itemc             C   sV   | j |}| j|}|d kr&| j|}| jjj||||}|rH|j| || j|< |S )N)r\   
get_repoid
get_reasonr   r   r   addReplacedByrS   )r
   rJ   r   rG   replaced_byr[   Zrepoidresultr   r   r   r*      s    




zRPMTransaction.newc             C   s   t |dd }|r|S |jS )NZ_force_swdb_repoid)getattrZreponame)r
   rJ   ra   r   r   r   r]      s    zRPMTransaction.get_repoidc             C   s   | j jj|j|jdS )zGet reason for package   )r   r   rC   r'   rZ   )r
   rJ   r   r   r   r^     s    zRPMTransaction.get_reasonc             C   s   t jj| j|S )zGet reason for package)r   r   ZTransactionItemReasonToStringr^   )r
   rJ   r   r   r   get_reason_name  s    zRPMTransaction.get_reason_namec             C   s8   |pg }x*|D ]"}| j |tjj}|r|j| qW d S )N)r*   r   r   TransactionItemAction_OBSOLETEDr_   )r
   	obsoletedr`   Zobsr   r   r   r   _add_obsoleted
  s
    
zRPMTransaction._add_obsoletedc             C   s6   | j |tjj}| j |tjj|d}| j||d d S )N)r`   )r*   r   r   r$    TransactionItemAction_DOWNGRADEDrh   )r
   r*   oldrg   ti_newti_oldr   r   r   add_downgrade  s    zRPMTransaction.add_downgradec             C   s   | j || d S )N)
add_remove)r
   rj   rG   r   r   r   	add_erase  s    zRPMTransaction.add_erasec             C   s4   |d krt jj}| j|t jj|}| j||d d S )N)r`   )r   r   r   r*   r   rh   )r
   r*   rg   rG   rk   r   r   r   add_install  s    zRPMTransaction.add_installc             C   s6   | j |tjj}| j |tjj|d}| j||d d S )N)r`   )r*   r   r   TransactionItemAction_REINSTALL!TransactionItemAction_REINSTALLEDrh   )r
   r*   rj   rg   rk   rl   r   r   r   add_reinstall  s    zRPMTransaction.add_reinstallc             C   s"   |p
t jj}| j|t jj|}d S )N)r   r   r   r*   r    )r
   rj   rG   rl   r   r   r   rn   $  s    zRPMTransaction.add_removec             C   s6   | j |tjj}| j |tjj|d}| j||d d S )N)r`   )r*   r   r   r"   TransactionItemAction_UPGRADEDrh   )r
   r*   rj   rg   rk   rl   r   r   r   add_upgrade(  s    zRPMTransaction.add_upgradec             C   s^   |j r
dS |jjrdS y.|d rB|j  rBtjtdj| dS W n tk
rX   dS X dS )Nr   Zmodularitylabelz\No available modular metadata for modular package '{}', it cannot be installed on the systemrc   )	Z_from_cmdlineZrepoZmodule_hotfixesZ_is_in_active_moduler   Zcriticalr   format
ValueError)r
   hdrrJ   r   r   r   _test_fail_safe-  s    zRPMTransaction._test_fail_safec             C   sR  d}x0| D ]&}y|j tjjkrP|jj}|| j||j7 }|j||d n|j tjjkrp|j	|jj
 n|j tjjkr|jj}|| j||j7 }|j||d nL|j tjjkr|jj}|| j||j7 }|j||d n|j tjjkr|j	|jj
 n|j tjjkr<|jj}|| j||j7 }|j|| n|j tjjkr\|j	|jj
 n|j tjjkr||j	|jj
 nz|j tjjkr|jj}|| j||j7 }|j||d n@|j tjjkr|j	|jj
 n |j tjjkrntd|j  W q tjk
r2 } ztjjtd| W Y dd}~X qX qW |rNtjjtd|S )z!Populate the RPM transaction set.r   ur4   z%TransactionItemAction not handled: %szAn rpm exception occurred: %sNz1No available modular metadata for modular package)r   r   r   r$   rJ   Z_headerry   Z
addInstallri   ZaddEraseidxr   ZTransactionItemAction_OBSOLETErf   rq   ZaddReinstallrr   r    r"   rt   Z#TransactionItemAction_REASON_CHANGERuntimeErrorrpmerrorrU   
exceptionsErrorr   )r
   ZtsZmodular_problemstsirx   er   r   r   _populate_rpm_ts;  sR    *zRPMTransaction._populate_rpm_tsc             C   sX   t  }xL| D ]D}|jtjjkry|j|j W q tk
rN   td| Y qX qW |S )Nz*TransactionItem is has no RPM attached: %s)	rD   r   rU   r   ZFORWARD_ACTIONSrF   rJ   KeyErrorr|   )r
   ra   r   r   r   r   install_setm  s    
zRPMTransaction.install_setc             C   sb   t  }xV| D ]N}|jtjjtjjg kry|j|j W q t	k
rX   t
d| Y qX qW |S )Nz*TransactionItem is has no RPM attached: %s)rD   r   rU   r   ZBACKWARD_ACTIONSr   rr   rF   rJ   r   r|   )r
   ra   r   r   r   r   
remove_sety  s    
zRPMTransaction.remove_setc             C   s,   dd | j D }t|r(td|d  S dS )zj Ensures all the members can be passed to rpm as they are to perform
            the transaction.
        c             S   s   g | ]}|j d kr|qS )src)rZ   )r3   rJ   r   r   r   r5     s    z3RPMTransaction._rpm_limitations.<locals>.<listcomp>z+Will not install a source rpm package (%s).r   N)r   r   r   )r
   Zsrc_installsr   r   r   _rpm_limitations  s
    
zRPMTransaction._rpm_limitationsc                s    fdd| D S )Nc                s   g | ]}|j  kr|qS r   )r   )r3   r   )r   r   r   r5     s    z-RPMTransaction._get_items.<locals>.<listcomp>r   )r
   r   r   )r   r   
_get_items  s    zRPMTransaction._get_items)N)NN)N)N)N)NN)N)N)N)r.   r/   r0   r   r9   r   r\   r*   r]   r^   re   rh   rm   ro   rp   rs   rn   ru   ry   r   propertyr   r   r   r   r   r   r   r   rR      s*   
		







2
rR   )Zlibdnf.transactionr   Zdnf.db.historyrU   Zdnf.transactionZdnf.exceptionsZdnf.i18nr   Zdnf.utilr   r}   objectr   r1   rL   rR   r   r   r   r   <module>   s   3<<