ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     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 k	st || _|| _d S )N)AssertionError_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   r2      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   r4   )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   r:      s    z$RPMTransactionItemWrapper.get_reasonc             C   s   | j jj| j S )N)r   r9   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/   r0   r2   r5   r7   r8   r:   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)rD   getId)r   r   r   r   tid   s    zTransactionWrapper.tidc             C   s
   | j j S )N)rD   Z
getCmdline)r   r   r   r   cmdline   s    zTransactionWrapper.cmdlinec             C   s
   | j j S )N)rD   ZgetReleasever)r   r   r   r   
releasever   s    zTransactionWrapper.releaseverc             C   s
   | j j S )N)rD   Z
getDtBegin)r   r   r   r   beg_timestamp   s    z TransactionWrapper.beg_timestampc             C   s
   | j j S )N)rD   ZgetDtEnd)r   r   r   r   end_timestamp   s    z TransactionWrapper.end_timestampc             C   s
   | j j S )N)rD   getRpmdbVersionBegin)r   r   r   r   beg_rpmdb_version   s    z$TransactionWrapper.beg_rpmdb_versionc             C   s
   | j j S )N)rD   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)intrD   r1   libdnftransactionTransactionItemState_DONE)r   r   r   r   return_code   s    zTransactionWrapper.return_codec             C   s
   | j j S )N)rD   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)rD   getConsoleOutputbool)r   outputr   r   r   	is_output   s    
zTransactionWrapper.is_outputc             C   s
   | j j S )N)rD   Z
getComment)r   r   r   r   comment   s    zTransactionWrapper.commentc             C   s   | j j gS )N)rD   rF   )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>)rD   ZgetItems)r   resultr   )r   r   rV      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   ra      s    z-TransactionWrapper.output.<locals>.<listcomp>)rD   rX   )r   r   r   r   rZ      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)rD   rN   altered_gt_rpmdb)r   Zrpmdbvr   r   r   compare_rpmdbv   s    z!TransactionWrapper.compare_rpmdbvN)r>   r?   r@   altered_lt_rpmdbrd   r   rA   rG   rH   rI   rJ   rK   rM   rO   rT   rU   rW   r[   r\   r]   r^   rV   rZ   rc   re   r   r   r   r   rC      s*   rC   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)rQ   rR   ZMergedTransactionrD   )r   rE   r   r   r   r      s    z!MergedTransactionWrapper.__init__c             C   s   | j j|j  d S )N)rD   merge)r   rE   r   r   r   rh      s    zMergedTransactionWrapper.mergec             C   s
   | j j S )N)rD   ZlistUserIds)r   r   r   r   rU      s    z!MergedTransactionWrapper.loginuidc             C   s
   | j j S )N)rD   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   )rP   rQ   rR   rS   )r_   r`   r   r   r   ra     s    z8MergedTransactionWrapper.return_code.<locals>.<listcomp>)rD   Z
listStates)r   r   r   r   rT     s    z$MergedTransactionWrapper.return_codec             C   s
   | j j S )N)rD   ZlistCmdlines)r   r   r   r   rH     s    z MergedTransactionWrapper.cmdlinec             C   s
   | j j S )N)rD   ZlistReleasevers)r   r   r   r   rI     s    z#MergedTransactionWrapper.releaseverc             C   s
   | j j S )N)rD   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   ra     s    z3MergedTransactionWrapper.output.<locals>.<listcomp>)rD   rX   )r   r   r   r   rZ     s    zMergedTransactionWrapper.outputN)r>   r?   r@   r   rh   rA   rU   r]   rT   rH   rI   r\   rZ   r   r   r   r   rg      s   rg   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)	strrI   _rpm_group_envZ_addon_datar   _db_dir_output)r   Zdb_dirrI   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)rk   r   )r   r   r   r   r9   (  s    

zSwdbInterface.rpmc             C   s   | j d krt| | _ | j S )N)rl   r   )r   r   r   r   group.  s    

zSwdbInterface.groupc             C   s   | j d krt| | _ | j S )N)rm   r   )r   r   r   r   env4  s    

zSwdbInterface.envc             C   s   t jj| jtjjjS )N)ospathjoinrn   rQ   rR   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   rQ   rR   rw   rx   RuntimeErrorr   rj   initTransaction)r   Zexr   r   r   r   >  s    
zSwdbInterface.swdbc             C   s   t jj|| j}|j  d S )N)rQ   rR   ZTransformerrx   	transform)r   Z	input_dirZtransformerr   r   r   r{   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.   rk   rl   rm   r   ZcloseTransactionZcloseDatabasero   )r   r   r   r   rp   O  s    

zSwdbInterface.closec             C   s
   | j j S )N)r   ZgetPath)r   r   r   r   ru   ]  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getLastTransactionrC   )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   )rP   )r_   r`   r   r   r   ra   o  s    z%SwdbInterface.old.<locals>.<listcomp>c             S   s   g | ]}t |qS r   )rC   )r_   r`   r   r   r   ra   q  s    c                s   g | ]}|j  kr|qS r   )rG   )r_   r`   )r]   r   r   ra   t  s    r   r   T)r   ZlistTransactions	enumeraterD   rL   rN   rf   rd   )r   r]   limitr~   rb   r`   rE   Z
prev_transr   )r]   r   oldm  s    

zSwdbInterface.oldc             C   s   t | jj S )N)rC   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)
r9   Z_pkg_to_swdb_rpm_itemreporQ   rR   Z#TransactionItemAction_REASON_CHANGEr   ZaddItemr3   rS   )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
getRPMReporj   )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getRPMTransactionItemrj   r	   )r   r;   rb   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   rz   ZbeginTransactionrP   calendarZtimegmtimeZgmtimerj   r   ZgetloginuidZsetReleaseverrI   r|   )r   Zrpmdb_versionZ
using_pkgsZtsisrH   r\   rG   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   ro   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   rQ   rR   ZTransactionState_DONEr9   r2   ZTransactionItemState_ERRORZTransactionState_ERRORro   r   ZaddConsoleOutputLineZendTransactionrP   r   rj   )r   rO   rT   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&   rQ   rR   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&   rQ   rR   r   r   )r   r;   Zfirst_transZrollbackrb   r   r   r   get_erased_reason  s    zSwdbInterface.get_erased_reason)r-   )T)Nr   F)Nr-   )r-   NN)T)r>   r?   r@   r   rq   rA   r9   rr   rs   rx   r   r{   rp   ru   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ri     s0   



	

ri   )r   rt   r   Zlibdnf.transactionrQ   Zlibdnf.utilsZdnf.i18nr   Zdnf.yumr   Zdnf.exceptionsr   rr   r   r   r   objectr	   rC   rg   ri   r   r   r   r   <module>   s    M"