
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
`.                 @   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mZ d dlm	Z	 ej
 ZdZddd	d
dddgZd!ddZd"ddZd#ddZd$dd
Zd%ddZd&dd	Zdd Zd'ddZd(ddZg g dddfddZdd Zdd  ZdS ))    N)
up2dateLog)config)rpmUtils)rhnPackageInfoz/var/lib/up2date/dbtimestampupdateremoverefresh_list
fullUpdatecheckNeedUpdaterunTransactionverifyc                sj   |rddi fS t | ts"ddi fS tjd|  tddd}|jj j   fd	d
| D }t||d|dS )z0We have been told that we should remove packagesr   zno-ops for caching   z$Invalid arguments passed to functionzCalled remove_packagesTF)load_system_repoload_available_reposc                s   g | ]}t  |qS  )_package_tup2obj).0tup)	installedr   /usr/lib/python3.6/packages.py
<listcomp>:   s    zremove.<locals>.<listcomp>)r   allow_erasing
cache_only)	
isinstancelistlog	log_debug	_dnf_basesackqueryr   _dnf_transaction)package_listr   base	to_remover   )r   r   r   -   s    


c             C   s  t | tsddi fS tjd|  tddd}|jj j }|jj j }d}g }g }x"| D ]}t	|dk rx|j
d |\}	}
}}}|
dkr|dkr|dkr|dkr|j|	d	rtjd
|	  q\|dkrd}|j|	|dj }t||}|sdt| }tjd| |j
| q\x`|D ]N}|j|}|dkrHtjdt|  P n|dkrtjdt|  P qW |j
| q\W |s|rdddj| dddf}n
ddi f}|jj  |j  |S t|||dS )z:We have been told that we should retrieve/install packagesr   z$Invalid arguments passed to functionzCalled updateT)r   r   N    )namezPackage %s is already installedr   )r&   archz,Package %s is not available for installationzE: zPackage %s already installedz6More recent version of package %s is already installed    z-Failed: Packages failed to install properly:

1package_install_failure)versionr&   z$Requested packages already installed)installr   )r   r   r   r   r   r   r   r   	availablelenappendfilterZlatestr   _package_tup2strZlog_meZevr_cmpjoin_plugins_unloadcloser    )r!   r   r"   r   r.   errZerrmsgs
to_installpackager&   r,   releaseepochr'   pkgsZrequested_pkgpkgZpkg_cmpretr   r   r   r   ?   s`    











c             C   s   |rddi fS t ddd}|jj j }|jj j }g }g }xd| d dd D ]P}|\}}	t||}
|	dkr~|
r~|j|
 qP|	dkrP|
 rPt||}|j| qPW | r| rdd	i fS t|||d|d
S )z Run a transaction on a group of packages.
        This was historicaly meant as generic call, but
        is only called for rollback.
    r   zno-ops for cachingT)r   r   packagesNeiz6Requested package actions have already been performed.)r-   r   r   r   )r   r   r   r   r.   r   r0   r    )Ztransaction_datar   r"   r   r.   r8   r#   Zpackage_objectr9   actionr=   newr   r   r   r      s&    



c             C   s   t ddd}t|d|dS )z$ Update all packages on the system. T)r   r   )full_updater   )r   r    )forcer   r"   r   r   r   r	      s    c       	      C   s   |rddi fS i }d}t j }|d r.|d }d| }ytj|d }W n   dd|fS ytjtd }W n   d}Y nX ||d krdd	|fS |dkryttd
}|j  W n   dd|fS tddS )z Check if the locally installed package list changed, if
        needed the list is updated on the server
        In case of error avoid pushing data to stay safe
    r   zno-ops for cachingz/var/lib/rpmdbpathz%s/Packages   zunable to stat the rpm database
   zNrpm database not modified since last update (or package list recently updated)zw+z!unable to open the timestamp file   )rhnsd)r   ZinitUp2dateConfigosstatLAST_UPDATE_FILEopenr6   r   )	rJ   r   datarF   ZcfgZRPM_PACKAGE_FILEZdbtimeZlastfiler   r   r   r
      s4    




c          	   C   sR   |rddi fS t jd d}ytj  W n   td ddi fS t  ddi fS )	z3 push again the list of rpm packages to the server r   zno-ops for cachingzCalled refresh_rpmlistNz8ERROR: refreshing remote package list for System Profile   zError refreshing package listzrpmlist refreshed)r   r   r   ZupdatePackageProfileprinttouch_time_stamp)rJ   r   r>   r   r   r   r      s    


c              C   s^   yt td} | j  W n   ddi fS tj }ytjt||f W n   ddt i fS d S )Nzw+r   z!unable to open the timestamp filez6unable to set the time stamp on the time stamp file %s)rN   rM   r6   timerK   utime)Zfile_dtr   r   r   rS      s    

rS   c             C   sv   t jd |rddi fS i }d|d< d|d< tj| \}}||d< t|rld|d< d|d< ||d	< d
d|fS dd|fS )NzCalled packages.verifyr   zno-ops for cachingzpackages.verifyr&   r,   Zverify_infoz packages.verify.missing_packagesmissing_packages+   z-packages requested to be verified are missingzpackages verified)r   r   r   ZverifyPackagesr/   )r?   r   rO   r>   rW   r   r   r   r      s    


Tc             C   s6   t j }|jjs|j  |r$|j  |jddd |S )NT)r   r   )dnfZBaser4   ZpluginsZinit_pluginsZread_all_reposZ	fill_sack)r   r   r"   r   r   r   r     s    r   Fc             C   s  zy|r| j   n8x|D ]}|r| j| qW x|D ]}|r6| j| q6W | j| tjd t| jsvtj	j
d| jjrtjddd | jjD  | j| jj | jjrtjddd | jjD  |s| j  W n tj	jk
r  } z&i }d|d	< d
|d< ddt| |fS d}~X n tj	jk
rf } z&i }d|d	< d|d< ddt| |fS d}~X n tj	jk
r } z&i }d|d	< d|d< ddt| |fS d}~X n@ tj	j
k
r } zd}	dt| }
i }|	|
|fS d}~X nX W d| jj  | j  X ddi fS )zE
    command is an function excpecting dnf.Base() as an argument
    zDependencies Resolvedzempty transactionzDownloading and installing: c             S   s   g | ]}t |qS r   )str)r   pr   r   r   r   -  s    z$_dnf_transaction.<locals>.<listcomp>z
Removing: c             S   s   g | ]}t |qS r   )rZ   )r   r[   r   r   r   r   1  s    r*   r,   r+   r&   r(   z/Failed: Packages failed to install properly: %sNr   Zrpmremoveerrors   z%sZfailed_deps   z9Failed: packages requested raised dependency problems: %s   z)Error while executing packages action: %szUpdate Succeeded)r^   )Zupgrade_allZpackage_installZpackage_removeZresolver   r   r/   ZtransactionrY   
exceptionsErrorZinstall_setZdownload_packagesZ
remove_setZdo_transactionZMarkingErrorrZ   ZDepsolveErrorr4   r5   r6   )r"   r-   r   rD   r   r   r=   r@   rO   Zstatusmessager   r   r   r      s^    







r    c       	      C   s   |d d \}}}}t |dkr(|d nd }d|i}|d k	rPt |dkrP||d< |d k	rlt |dkrl||d< |d k	rt |dkrt||d< |d k	rt |dkr||d< | jf |j }|r|d S d S )N   r&   r   r,   r:   r;   r'   )r/   intr1   Zrun)	qr   r&   r,   r:   r;   r'   r   r<   r   r   r   r   U  s    r   c             C   sD   | dd \}}}}}|sd}d||||f }|r>|d| 7 }|fS )z6 Create a package name from an rhn package tuple.
    N0z%s-%s:%s-%sz.%sr   )Zpackage_tupnvrr@   aZpkginfor   r   r   r2   g  s    r2   )N)N)N)r   N)NN)NN)N)TT)rK   rT   Zdnf.exceptionsrY   Zdnf.cliZup2date_clientr   r   r   r   ZinitLogr   rM   Z__rhnexport__r   r   r   r	   r
   r   rS   r   r   r    r   r2   r   r   r   r   <module>   s:   

E
 

)


=