OwlCyberSecurity - MANAGER
Edit File: base.cpython-36.opt-1.pyc
3 ��g�������������������@���sX��d�Z�ddlmZ�ddlmZ�ddlmZ�ddlmZ�ddlZddlZddlZ ddl mZ�ddlm Z �dd lmZmZmZ�dd lmZ�ddlmZ�ddlmZ�ydd lmZ�W�n �ek r����dd lmZ�Y�nX�ddlZddlZddlZddlZddlZddl Zddl!Zddl"Zddl#Zddl$Zddl%Zddl&Zddl'Zyddl(ZdZ)W�n�ek �r`���dZ)Y�nX�ddl*Zddl+Zddl,Zddl-Zddl.Zddl/Zddl0Zddl1Zddl2Zddl3Zddl4Zddl5ZddlZddl6Zddl7Z7ddl8Z8ddl9Z9ddl:Z:ddl;Z;ddl<Z<ddl=Z=ddl>Z>ddl?Z?ddl@Z@ddlAZAddlBZBe;jCd�ZDG�dd��deE�ZFdd��ZGdS�)z Supplies the Base class. �����)�absolute_import)�division)�print_function)�unicode_literalsN)�deepcopy)� CompsQuery)�_�P_�ucd)�_parse_specs)� SwdbInterface)�misc)�SequenceTF�dnfc���������������@���s���e�Zd�Zd�dd�Zdd��Zdd��Zdd ��Zd d��Zdd ��Ze dd���Z dd��Zd�dd�Zdd��Z edd���Zedd���Zedd���Zejdd���Zeejjd�dd ����Zed!d"���Zed#d$���Zed%d&���Zejd'd&���Zd(d)��Zf�f�dfd*d+�Zd,d-��Zd.d/��Zd0d1��Zd�d2d3�Z d�d5d6�Z!d�d7d8�Z"d9d:��Z#d;d<��Z$d�d=d>�Z%d�d?d@�Z&dAdB��Z'e(j)e(j*e(j+e(j,e(j-e(j.e(j/dC�Z0e1e(dD��r�e(j2e0dE<�dFe(j3e(j4B�iZ5edGdH���Z6edIdJ���Z7e7jdKdJ���Z7d�dLdM�Z8dNdO��Z9edPdQ��dRdQ��dSdQ��dTdU�Z:dVdW��Z;dXdY��Z<dZd[��Z=d\d]��Z>d^d_��Z?d�d`da�Z@f�fdbdc�ZAddde��ZBdfdg��ZCdhdi��ZDd�djdk�ZEd�dldm�ZFd�dndo�ZGd�dpdq�ZHdrds��ZIdtdu��ZJdvdw��ZKd�dydz�ZLd�d{d|�ZMd}d~��ZNdd���ZOd�d���ZPd�d���ZQd�d�d��ZRd�d���ZSd�d�d��ZTd�d�d��ZUd�d���ZVd�d���ZWd�d���ZXd�d���ZYd�d���ZZd�d���Z[d�d�d��Z\d�d���Z]d�d���Z^d�d���Z_d�d�d��Z`d�d�d��Zad�d�d��Zbd�d�d��Zcd�d�d��Zdd�d���Zed�d���Zfd�d���Zgd�d�d��Zhd�d�d��Zid�d�d��Zjd�d�d��Zk�d�d�d��Zl�dd�d��Zm�dd�d��Znd�d���Zo�dd�dZpd�dĄ�Zqf�f�f�f�f�fd�dƄZrd�dȄ�Zs�dd�dʄZt�dd�d̄Zu�dd�d΄Zvd�dЄ�Zw�dd�dӄZx�dd�dՄZyd�dׄ�Zzd�dل�Z{d�dۄ�Z|d�d݄�Z}d�d߄�Z~d�d��Zd�d��Z�dS�( ���BaseNc�������������C���s����d|�_�|p|�j��|�_d�|�_d�|�_d�|�_d�|�_d�|�_d�|�_t j j��|�_d�|�_ t��|�_t��|�_t jj��|�_t jj��|�_t jj��|�_ttjg�|�_t jj��|�_d|�_ d|�_!d�|�_"g�|�_#i�|�_$d|�_%t��|�_&d�|�_'d�S�)NF)(�_closed�_setup_default_conf�_conf�_goal�_repo_persistor�_sack�_transaction�_priv_ts�_compsr����comps�TransactionBunch�_comps_trans�_history�set� _tempfiles�_trans_tempfiles�callbackZDepsolve�_ds_callback�loggingZLogging�_logging�repodict�RepoDict�_repos�rpmZRPMPROB_FILTER_OLDPACKAGE�_rpm_probfilterZpluginZPlugins�_plugins�_trans_success�_trans_install_set�_tempfile_persistor�_update_security_filters�_update_security_options�_allow_erasing�_repo_set_imported_gpg_keys�output)�self�conf��r5����/usr/lib/python3.6/base.py�__init__]���s2����z Base.__init__c�������������C���s���|�S�)Nr5���)r3���r5���r5���r6���� __enter__z���s����zBase.__enter__c�������������G���s���|�j����d�S�)N)�close)r3���Zexc_argsr5���r5���r6����__exit__}���s����z Base.__exit__c�������������C���s���|�j����d�S�)N)r9���)r3���r5���r5���r6����__del__����s����zBase.__del__c�������������C���s.���|�j�r|�jj|��n|�jjrn|�jj|��d�S�)N)r���r ����updater4����destdirr���)r3����filesr5���r5���r6����_add_tempfiles����s ����zBase._add_tempfilesc�������������C���s����|j����td|jdd�}|jr&d|d<�y|�jj|jfddi|���W�nT�tjk r��}�z6t j td�j|j |���tjjtd�j|j ���W�Y�d�d�}~X�nX�d�S�)NT)�load_filelists�load_presto�load_updateinfo� load_other�build_cachezloading repo '{}' failure: {}z"Loading repository '{}' has failed)�load�dict�deltarpm�load_metadata_otherr���� load_repo�_repo�hawkey� Exception�logger�debugr����format�idr���� exceptions� RepoError)r3����repo�mdload_flags�er5���r5���r6����_add_repo_to_sack����s����zBase._add_repo_to_sackc��������������C���s.���t�jj��}�|�j}d|kr*t�jj|�j�|d<�|�S�)N� releasever)r���r4���ZConf� substitutionsr(���Zdetect_releasever�installroot)r4���Zsubstr5���r5���r6���r�������s ���� zBase._setup_default_confc�������������C���s����dd��|�j�j��D��}y0|�jj|�j||�jj|�jjd|�jj|�jj d�}W�n4�t jk rx�}�ztj jt|���W�Y�d�d�}~X�nX�|r�tjtjjj|d����d�S�)Nc�������������S���s���g�|�]}|j�r|j�qS�r5���)Zmodule_hotfixesrP���)�.0�ir5���r5���r6���� <listcomp>����s����z0Base._setup_modular_excludes.<locals>.<listcomp>F)Zupdate_onlyZdebugsolver�module_obsoletesr���)�repos�iter_enabled�sackZfilter_modules�_moduleContainerr4���rY���Zmodule_platform_id�debug_solverr]���rK���rL���r���rQ����Errorr ���rM����warning�module�module_baseZformat_modular_solver_errors)r3���Z hot_fix_reposZ solver_errorsrU���r5���r5���r6����_setup_modular_excludes����s����"zBase._setup_modular_excludesFc���������� ���C���s���t�|�jj�}d|kr$tr$|�j���d�S�g�}g�}|�s>�x|�jj��D�]�}|j|krPq@t|j �dkr�|�j j��jdd�}x8t�|j �D�]*}t jj|�}|j|j|�j dddd��}q|W�|j|jd��|j|j��|jf��|�j j��jdd�} x8t�|j�D�]*} t jj| �}| j|j|�j dddd��} q�W�| j|jd��| r@|j| |jf��q@W�d|k�r6|�j j��jdd�}t|�jj �dk�r�x<t�|�jj �D�],}t jj|�}|j|j|�j dddd��}�qzW�|�j j��jdd�}x<t�|�jj�D�],} t jj| �}|j|j|�j dddd��}�q�W�t|�jj �dk�r$|�j j|��|�j jd��|�r6|�j j|��|�rjx,|D�]$\} }|�j j| ��|�j jd|���qBW�|�r�x|D�]\} }|�j j| ���qvW�|��r�t�r�|�j���d�S�) N�allr���T)�emptyF)� with_nevra� with_provides�with_filenames)�reponame�main)r���r4���Zdisable_excludes�WITH_MODULESrg���r^���r_���rP����lenZincludepkgsr`����query�filtermr����subject�Subject�union�get_best_query�append�applyZexcludepkgsZadd_includesZset_use_includes�add_excludes)r3���� only_mainZdisabledZ repo_includesZ repo_excludes�rZ incl_queryZincl�subjZ excl_queryZexclZ include_query� exclude_queryrq����repoidr5���r5���r6����_setup_excludes_includes����sh���� zBase._setup_excludes_includesc�������������C���sP���|�j�r<|�jj�r<dd��|�jj��D��}|�j�jj|��|�j�j���|�jrL|�jj���d�S�)Nc�������������S���s"���g�|�]}|j�r|jj��r|j�qS�r5���)�metadatarJ���Z isExpiredrP���)rZ���r{���r5���r5���r6���r\�������s����z/Base._store_persistent_data.<locals>.<listcomp>) r���r4���� cacheonlyr^���r_���Zexpired_to_addr<����saver-���)r3���Zexpiredr5���r5���r6����_store_persistent_data����s���� zBase._store_persistent_datac�������������C���s���|�j�d�kr|�jdd��|�j�S�)NT)�arch_filter)r���� read_comps)r3���r5���r5���r6���r�������s���� z Base.compsc�������������C���s���|�j�S�)N)r���)r3���r5���r5���r6���r4�������s����z Base.confc�������������C���s���|�j�S�)N)r'���)r3���r5���r5���r6���r^�����s����z Base.reposc�������������C���s ���d�|�_�d�S�)N)r'���)r3���r5���r5���r6���r^�����s����Z _priv_rpmconnc�������������C���s���t�jjj|�jj�S�)N)r���r(���Z connectionZ RpmConnectionr4���rY���)r3���r5���r5���r6����_rpmconn��s����z Base._rpmconnc�������������C���s���|�j�S�)N)r���)r3���r5���r5���r6���r`�����s����z Base.sackc�������������C���sP���|�j�d�krtjjd��|�j�jd�krHtjjd|�jj |�jj d�|�jj�|�j�_|�j�jS�)NzSack was not initializedF�arch)r`���r���rQ���rc���ra����libdnfre���ZModulePackageContainerr4���rY���rX���� persistdir)r3���r5���r5���r6���ra�����s���� zBase._moduleContainerc�������������C���s���|�j�S�)N)r���)r3���r5���r5���r6����transaction��s����zBase.transactionc�������������C���s���|�j�rtd��||�_�d�S�)Nztransaction already set)r���� ValueError)r3����valuer5���r5���r6���r����$��s����c�������������C���s���t�jj|�jj�|�_d�S�)N)r���� persistorZ RepoPersistorr4����cachedirr���)r3���r5���r5���r6����_activate_persistor+��s����zBase._activate_persistorc�������������C���s,���|�j�jr|�jj|�j�||��|�jj|�|��dS�)z&Load plugins and run their __init__().N)r4���Zpluginsr*����_loadZ _run_init)r3���Z disabled_globZenable_plugins�clir5���r5���r6����init_plugins.��s����zBase.init_pluginsc�������������C���s���|�j�j���dS�)z#Run plugins pre_configure() method.N)r*���Z_run_pre_config)r3���r5���r5���r6����pre_configure_plugins5��s����zBase.pre_configure_pluginsc�������������C���s���|�j�j���dS�)zRun plugins configure() method.N)r*���Z_run_config)r3���r5���r5���r6����configure_plugins:��s����zBase.configure_pluginsc�������������C���s���|�j�j���dS�)zRun plugins unload() method.N)r*���Z_unload)r3���r5���r5���r6����unload_plugins?��s����zBase.unload_pluginsc������� ������C���s���|�j�j}|�jd�kr|�j���|�j}|r�tjj��rDtd�}tj |��dS�tjj ��dkrhtd�}tj |��dS�|dkr�td�}tj |��dS�|j��}|d�k r�||k�r�tj td���dS�x|�jj ��D�]}|jjd��q�W�|�jj��s�tj td�jd j|�j�j����dS�x�|�jj��D�]�}|j��\}} | d�k�r6tj td �|j��nx|��sH| dk�rftjtd�|j��|jj���nH|�r�| |k��r�td�}tj||j| ��|jj���ntjtd �|j| ���qW�|�r�d|_|�jddd��tj td���dS�)NzCMetadata timer caching disabled when running on metered connection.Fz:Metadata timer caching disabled when running on a battery.r���z Metadata timer caching disabled.z"Metadata cache refreshed recently.����z*There are no enabled repositories in "{}".z", "z4%s: will never be expired and will not be refreshed.z&%s: has expired and will be refreshed.zC%s: metadata will expire after %d seconds and will be refreshed nowz!%s: will expire after %d seconds.T)�load_system_repo�load_available_reposzMetadata cache created.)r4���Zmetadata_timer_syncr���r����r����utilZon_metered_connectionr���rM����infoZon_ac_power�since_last_makecacher^����valuesrJ���ZsetMaxMirrorTries�_any_enabledrO����joinZreposdirr_���Z_metadata_expire_inrP���rN����expireZreset_last_makecache� fill_sack) r3����timerZperiodr�����msgr����rS���r{���Zis_cacheZ expires_inr5���r5���r6����update_cacheD��sZ���� zBase.update_cacheTc���������� ���C���sP��t�jjd�}|�jddd��t�jj|��|�_t�jj|�j j |�j j�}|����|dk r�y|�jjdd��W�n�t k r~���|dkrz��Y�nX�|�r�g�}d}tj��}|�j jr�t�jjj���x�|�jj��D�]�}y`|�j|��|jj��|kr�|jj��}|jj��|k�r�|jj��}tjtd�|jt�jj|jj�����W�q��t�j j!k �rz�} �z>|jj"���|j#dk�rJ��tj$d | ��|j%|j��|j&���W�Y�d d } ~ X�q�X�q�W�|�r�tj$td�dj'|���|�jj(���r�|dk�r�|dk�r�tj)td �t*j+t,|�d�t�jj|���n|�jj-��j&���W�d Q�R�X�|�j } |�jj.| j/| j0| j1��|�j2���|���t�j3j4|�j�|�_5| j6|�j5_6|�j7j8���|�jS�)z'Prepare the Sack and the Goal objects. z sack setupT)r`����goalF)rD����autor���z%s: using metadata from %s.z Error: %sNzIgnoring repositories: %sz, z-Last metadata expiration check: %s ago on %s.)Zseconds)9r���r#����Timer�resetr`����_build_sackr����lock�build_metadata_lockr4���r�����exit_on_lockr�����IOError�time�gpgkey_dns_verification�dnssec�RpmImportedKeys�check_imported_keys_validityr^���r_���rV���rJ���ZgetTimestampZgetAgerM���rN���r���rP���r�����normalize_time�getMaxTimestamprQ���rR���r�����skip_if_unavailablerd���rw����disabler����r����r�����datetimeZ timedelta�intrh���� _configure�installonlypkgs�installonly_limit�allow_vendor_changer���r�����Goalr����protect_running_kernelr*����run_sack)r3���r����r����r����r�����error_reposZmtsZager{���rU���r4���r5���r5���r6���r����|��sf���� zBase.fill_sackc������� ��� ���C���s��t�jjd�}|�jddd��t�jj|��|�_t�jj|�j j |�j j�}|��n�|dk r�y|�jjdd��W�n�t k r~���|dkrz��Y�nX�g�}|�j jr�t�jjj���x�|�jj��D�]�}yf|jjddd��td|jdd�}|jr�d|d <�|�jj|jf|��tjtd �|jt�jj|jj �����W�q��t!t"j#fk �r��}�zZ|j$dk�rPt�j%j&td�j'|j|���ntjtd�j'|j|���|j(|j��|j)���W�Y�dd}~X�q�X�q�W�|�r�tj*td �dj+|���W�dQ�R�X�|�j }|�jj,|j-|j.|j/��|�j0���|���t�j1j2|�j�|�_3|j4|�j3_4|�j5j6���|�jS�)a��� Prepare Sack and Goal objects and also load all enabled repositories from cache only, it doesn't download anything and it doesn't check if metadata are expired. If there is not enough metadata present (repond.xml or both primary.xml and solv file are missing) given repo is either skipped or it throws a RepoError exception depending on skip_if_unavailable configuration. z sack setupT)r`���r����F)rD���r����)ZthrowExceptZ ignoreMissing)r@���rA���rB���rC���z%s: using metadata from %s.zloading repo '{}' failure: {}NzIgnoring repositories: %sz, )7r���r#���r����r����r`���r����r���r����r����r4���r����r����r����r����r����r����r����r����r^���r_���rJ���Z loadCacherF���rG���rH���rI���rM���rN���r���rP���r����r����r�����RuntimeErrorrK���rL���r����rQ���rR���rO���rw���r����rd���r����r����r����r����r����r���r����r����r���r����r*���r����) r3���r����r����r����r����rS���rT���rU���r4���r5���r5���r6����fill_sack_from_repos_in_cache���sX���� z"Base.fill_sack_from_repos_in_cachec�������������C���s����t�jj|�jj�|�_|�jjsl|�j|�j��|�j r\|�j j|�jj����|�jj ���|�jrl|�j|�j ��n|�jjj|�j ��|�jjr�tjtd���tjtd�djt�jjd���|�jd�k r�|�jj���|�j���|�j���d|�_ d�S�)NzRThe downloaded packages were saved in cache until the next successful transaction.z1You can remove cached packages by executing '%s'.z{prog} clean packages)�progF)r���r����ZTempfilePersistorr4���r����r-���Z keepcache�_clean_packagesr���r+���r ���r<���Zget_saved_tempfilesri���r,���Ztempfiles_to_addrM���r����r���rO���r����Z MAIN_PROGr����historyr9���r�����_closeRpmDB)r3���r5���r5���r6����_finalize_base���s*���� zBase._finalize_basec�������������C���sB���|�j�r dS�tjtjjd��d|�_�|�j���|�jdddd��d|�_dS�)ztClose all potential handles and clean cache. Typically the handles are to data sources and sinks. NzCleaning up.T)r`���r^���r����) r���rM����logr���r#����DDEBUGr����r����r*���)r3���r5���r5���r6���r9�����s����z Base.closec�������������C���sf���t�jjj|�j|�}xN|D�]F}y|�jj|��W�q�t�jjk r\�}�ztj |��W�Y�dd}~X�qX�qW�dS�)z?Read repositories from the main conf file and from .repo files.N) r���r4����readZ RepoReaderr^����addrQ���ZConfigErrorrM���rd���)r3���Zopts�readerrS���rU���r5���r5���r6����read_all_repos"��s���� zBase.read_all_reposc�������������C���s����|r d|�_�|rtjj��|�_|r�d|�_|�j�dk rJtjj|�j��|�_|�jj |�j_ |�j�r`|�j r`|�j j���|�jdk rt|�j j���tjj��|�_d|�_g�|�_|r�|r�tj���dS�)z1Make the Base object forget about various things.N)r���r���r%���r&���r'���r���r����r����r4���r����ra���Zrollbackr���r����r9���r���r���r���r���r.����gcZcollect)r3���r`���r^���r����r5���r5���r6���r����-��s$���� 'z Base.resetc�������������C���s���|�`�dS�)z6Closes down the instances of rpmdb that could be open.N)�_ts)r3���r5���r5���r6���r����j��s����zBase._closeRpmDB)Z noscriptsZ notriggersZnodocs�testZjustdbZ nocontexts�nocrypto�RPMTRANS_FLAG_NOCAPSZnocapsr����c�������������C���s���|�j�S�)N)r���)r3���r5���r5���r6���r����|��s����z Base.goalc�������������C���s����|�j�dk r|�j�S�tjjj|�jj�|�_�|�j�jd��xb|�jjD�]V}|�j j |�}|dkrdtjt d�|��q:|�j�j|��|�jj |�}|dk r:|�j�j|��q:W�|�jjs�|�jjtj��|�jjr�|�jjtj��tjtj|�jd�}|�j�j|��|�j�S�)zMSet up the RPM transaction set that will be used for all the work.Nr���z!Invalid tsflag in config file: %s)r���r���r(���r����ZTransactionWrapperr4���rY����setFlagsZtsflags�_TS_FLAGS_TO_RPM�getrM����criticalr���Z addTsFlag�_TS_VSFLAGS_TO_RPM�pushVSFlagsZdiskspacecheckr)���r����ZRPMPROB_FILTER_DISKSPACEZ ignorearchZRPMPROB_FILTER_IGNOREARCH� functools�reduce�operator�or_Z setProbFilter)r3����flagZrpm_flagZvs_flagZ probfilterr5���r5���r6���r�������s*���� zBase._tsc�������������C���s&���|�j�dkrdS�|�j�j���|�`�d|�_�dS�)z"Releases the RPM transaction set. N)r���r9���)r3���r5���r5���r6���r�������s ���� c�������������C���s$��t�jjd�}t�jj��|�_tjt�jjd��x�|�j j ��D�]�}|js@q4|jsHq4|j j��}|sXq4tjt�jjd|j��|j j��t�jjkr�tj|d�}tjj|�s�q4ntj|d�}y|�jj|��W�q4�t�jjk r��}�ztd�}tj||j|��W�Y�dd}~X�q4X�q4W�|�r|�jjj|�j j!d�g��|���|�jS�)z6Create the groups object to access the comps metadata.z loading compszGetting group metadataz%Adding group file from repository: %sz groups.xmlz1Failed to add groups file for repository: %s - %sN�basearch)"r���r#���r����r���ZCompsr���rM���r����r����r^���r_���Zenablegroupsr����rJ���Z getCompsFnrP���ZgetSyncStrategyrS���ZSYNC_ONLY_CACHEr ���Zcalculate_repo_gen_dest�os�path�existsZrepo_gen_decompressZ_add_from_xml_filenamerQ���� CompsErrorr���r����Z_ir����r���rX���)r3���r����r����rS���Zcomps_fnZdecompressedrU���r����r5���r5���r6���r�������s:���� &zBase.read_compsc�������������C���s*���|�j�dkr$|�jj}t|�jj|d�|�_�|�j�S�)zeauto create the history object that to access/append the transaction history information. N)rW���)r���r4���rW���r���r����)r3���rW���r5���r5���r6����_getHistory���s���� zBase._getHistoryc�������������C���s���|�j���S�)N)r����)r3���r5���r5���r6����<lambda>���s����z Base.<lambda>c�������������C���s���t�|�d|�S�)Nr���)�setattr)r3���r����r5���r5���r6���r�������s���c�������������C���s���t�|�dd��S�)Nr���)r����)r3���r5���r5���r6���r�������s����zDNF SWDB Interface Object)�fget�fset�fdel�docc����������������sF���j�j}t|j������j��}|j���|j��j��}xT|j��D�]H�|j��}|d�}�j j |d���j j �d��|j�||dd�����q:W�x�|j��D�]x��j j �d��|j��}t ��}g�}x0|D�](} t | �|kr�|jd| ��q�|j| ��q�W�|d�} |j�| |dd�����q�W�x�|j��D�]���j j �d��|j��}���fdd�|D��}|j��}�|k�rt|j�jd ��rt|j��}x0|D�](}|j|�} tjj|| �dk�rz| }�qzW�|j�||���fd d�}tjj||���qW�x�|j��D�]ȉ|j��}d�}x"|D�]}|j�jk�r�|}P��q�W�|d�k�r*|jd�}n |j|�����fdd�|D��}�fd d�}tjj||���|k�rz|j�|��n|j�||���j j |d���j j �d���q�W�|j ��}|�rB�j!j"t#j$d�j��}|j%|d��xh|D�]`�|j�jd ��r|d�}|j|���j�j&||j|����j j �d��|j��}|j'�|���q�W�|S�)Nr���Zdd�dr����r{���r[���c����������������s$���g�|�]}|��ks|j��j�kr|�qS�r5���)�name)rZ���r[���)� all_obsoleted�pkgr5���r6���r\������s����z*Base._goal2transaction.<locals>.<listcomp>)r����c����������������s�����j�j|�d�S�)N�od)r"���� pkg_added)r����)r3���r5���r6���r���� ��s����z(Base._goal2transaction.<locals>.<lambda>c����������������s$���g�|�]}|��ks|j��j�kr|�qS�r5���)r����)rZ���r[���)r����r����r5���r6���r\�����s����c����������������s�����j�j|�d�S�)Nr����)r"���r����)r����)r3���r5���r6���r����!��s����Zud�u)�flags)Zpkg__neqrU������)(r����r(���r���Zlist_obsoleted�_get_installonly_queryrx���� installed�list_downgradesZobsoleted_by_packager"���r����Z add_downgrade�list_reinstalls�str�insertrw���Z add_reinstall� list_installs� get_reason�filterr����r����r����ZTransactionItemReasonCompareZadd_installr���r����Zmapall� list_upgrades�pop�removeZadd_upgradeZ list_erasuresr`���rq���rK����IGNORE_EXCLUDESrr���� set_reasonZ add_erase)r3���r�����tsZinstallonly_queryZinstallonly_query_installedZobsZ downgradedZ nevra_pkg� obsoletesZobs_pkgZreinstalled�reasonZobsoleteZreason_obsolete�cbZupgradedr[���ZerasuresZremaining_installed_queryZ remainingr5���)r����r����r3���r6����_goal2transaction���s����� zBase._goal2transactionc�������������C���sd���|j���}|j��}|j��j��}g�}g�}x6|D�].}||krJ|j||�d���q*|j||���q*W�||fS�)aJ�� See what packages in the query match packages (also in older versions, but always same architecture) that are already installed. Unlike in case of _sltr_matches_installed(), it is practical here to know even the packages in the original query that can still be installed. r���)r�����_na_dict� availablerw���)r3����q�instZ inst_per_archZavail_per_archZavail_lZinst_lZnar5���r5���r6����_query_matches_installed7��s���� zBase._query_matches_installedc�������������C���s"���|�j�j��j��j|j��d�}t|�S�)z� See if sltr matches a patches that is (in older version or different architecture perhaps) already installed. )r����)r`���rq���r����rr����matches�list)r3����sltrr��r5���r5���r6����_sltr_matches_installedK��s����zBase._sltr_matches_installedc����������������s�����fdd���j�j��j��D��S�)z5Get iterator over the packages installed by the user.c�������������3���s���|�]}��j�j|�r|V��qd�S�)N)r����Zuser_installed)rZ���r����)r3���r5���r6���� <genexpr>T��s����z*Base.iter_userinstalled.<locals>.<genexpr>)r`���rq���r����)r3���r5���)r3���r6����iter_userinstalledR��s����zBase.iter_userinstalledc�������������C���s0���|j�||�jj|�jj�d�}|�jjr,|jd��|S�)N)�allow_uninstall� force_bestZignore_weak_depsz./debugdata/rpms)�runr4����bestZinstall_weak_depsrb���Zwrite_debugdata)r3���r����� allow_erasing�retr5���r5���r6����_run_hawkey_goalW��s���� zBase._run_hawkey_goalc������� ������C���st��d}|�j����tjjd�}|�jj���|�j}|j��rJ|j|�j j ��j��|�j��n|�j jsd|�j��}|j|���|j|�j j ��j|�j jd���|�j||�s�|�j jdkr�|j���tjj|j���}tjj|�}n|�j|�|�_|�jj���|���|�jdk o�t|�j�dk}|�r|�jj ��}|�rtjj!|�}|dk �r"|�|�j"j#���|�jj$��}||�jj%��7�}||�jj&��7�}||�jj'��7�}|�j j(|�j)|��|S�)zBuild the transaction set.NZdepsolve)r��������r���)*�_finalize_comps_transr���r#���r����r"����startr���Z req_has_eraseZpush_userinstalledr`���rq���r����r����r4���Zupgrade_group_objects_upgrade�_build_comps_solverZ'_exclude_packages_from_installed_groupsZ add_protectedrr���Zprotected_packagesr��� debuglevelZ log_decisionsr�����_format_resolve_problems� problem_rulesrQ���Z DepsolveErrorr��r����endrp���Z_rpm_limitationsrc���r*���Zrun_resolvedr����r����r����r����Zset_modules_enabled_by_pkgsetra���) r3���r���excr����r�����solverr����Zgot_transactionZnew_pkgsr5���r5���r6����resolve_��sH���� zBase.resolvec�������������C���s^��t�|t�s|g}tjjj��gt|��}|�js�|�jj ���|�jj ���|�jr�|�jjsV|�jj r�d�}t|�d�rx|�jrxdj|�j�}nt|�d�r�|�jr�dj|�j�}|�jj��}|d�kr�|�jj��}n|j}|�jj|g�g�|��|�jj|��|�jj���|�jj���d|�_d�S�d�}tjtd���tj j!|�j"j#|�j"j$�}|����|�jj%|�j&��|�j'��}|�rxtd�}tj(|��x|D�]}tj(|���qXW�tj)j*|��tjtd���tj+j,d�} tjtd ���|�j&j-���|�j&j.���tjjj/|�dd �} |�j&j0| �}t1|�dk�r\x&| j2��D�]}tj3td�j4|����q�W�td �d�}x|D�]} |dt5| ��7�}�qW�|�j6|�}|�rP|d|�7�}tj)j7|��~ tjtd���|�j&j8t9j:��r�d�S�| ���|�jj ���|�jj ���tj+j,d�} tjjj/|�|d�}|�j"j;dk��r�x|j<D�]}d|_=�q�W�|�jj���tjtd���|�j>|d�}W�d�Q�R�X�| ���|�jj?|�j��|�jj���dd��}x&tj@jA|�|�j|�D�]}tjB|���qFW�|S�)N�args� �cmdsTzRunning transaction checkz%Error: transaction check vs depsolve:zTransaction check succeeded.ztransaction testzRunning transaction test)r����r���zRPM: {}zTransaction test error:� z %s zTransaction test succeeded.r����)�displays����FzRunning transaction)r��c�������������S���s,���g�}x"|D�]}|j�dj|�t|����q W�|S�)Nz{}: {})rw���rO���r����)�actionZtsis�msgs�tsir5���r5���r6���� _pto_callback���s���� z*Base.do_transaction.<locals>._pto_callback)C� isinstancer���r���ZyumZrpmtransZLoggingTransactionDisplayr��r����ra���r����ZupdateFailSafeDatar����group�env�hasattrr"��r����r$��r�����lastr`����_rpmdb_version�end_rpmdb_version�begr��r*���Zrun_pre_transactionZrun_transactionr+���rM���r����r���r����Zbuild_rpmdb_lockr4���r����r����Z_populate_rpm_tsr�����_run_rpm_check�errorrQ���ZTransactionCheckErrorr#���r�����orderZcleanZRPMTransactionr����rp����messagesr����rO���r ����_trans_error_summaryrc����isTsFlagSetr(����RPMTRANS_FLAG_TESTr��r&��r2����_run_transactionZunload_removed_pluginsr����Z_post_transaction_outputrN���)r3���Zdisplay�cmdline�oldZ rpmdb_version�tidr����r)��r����r����ZtestcbZtserrors� errstringZdescr�summaryr��Zdisplay_r+��r5���r5���r6����do_transaction���s����� zBase.do_transactionc�������������C���s����d}t�jd�}i�}x�|j|�D�]t}|jd�dkr>t|jd��ntjt|jd��d��}|jd�|krr|||jd�<�||jd��|k�r|||jd�<�qW�|r�|td�d �7�}x4|D�],}|d tdd||��j ||�|��d �7�}q�W�|s�dS�td �d�|�}|S�)z�Parse the error string for 'interesting' errors which can be grouped, such as disk space issues. :param errstring: the error string :return: a string containing a summary of the errors ��z9needs (\d+)(K|M)B(?: more space)? on the (\S+) filesystemr'���Mr����g�������@����zDisk Requirements:r%��z z7At least {0}MB more space needed on the {1} filesystem.Nz Error Summaryz ------------- ) �re�compile�finditerr-��r�����mathZceilr���r ���rO���)r3���r?��r@���pZdisk�mZ size_in_mb�kr5���r5���r6���r8����s&���� *zBase._trans_error_summaryc�������������C���s���|�j�jo|�jjtj��S�)N)r4���Zhistory_recordr����r9��r(���r:��)r3���r5���r5���r6����_record_history%��s����zBase._record_historyc�������������C���s���d}|�j���r�t|�jj�}|�jj��j��}|j|d�j��}|�jj ��}|�j j��}|dk rX|j}|dksh||kr�t jtd�jtjjd���d}t|�d�r�|�jr�dj|�j�}nt|�d�r�|�jr�dj|�j�}|�jjr�|�jjnd} |�j j||g�|| �}|�jj�r$tjd �} | �r$ytj| ���W�n���d } Y�nX�t jtjjd ��|�j j|j!d�}t jtjjd��|�jj�rzytj| ��W�n���Y�nX�tjj"|�j |�j#��|dk�r�n�t$|�d k�r�dd ��|�j D��}|�sfx&|j%��D�]} t j&td�j| ����q�W�td�} tj'j(| ��nlt j&td���x |D�]}t j&t)|d �����qW�|�j����rR|�j j*t+j,���rR|�j j-|��td�} tj'j(| ��xbdD�]Z}t||��rlt.||�}yt/j0|��W�n.�t1t2fk �r����td�} t j&| |��Y�nX��qlW�t3|�j#j4�|�_5|�j j*t+j,��s�|�j6|j7��|S�)zh Perform the RPM transaction. :return: history database transaction ID or None N)r����z RPMDB altered outside of {prog}.)r����r"��r#��r$��rB��r���zRPM transaction start.zRPM transaction over.c�������������S���s���g�|�]}|j���r|�qS�r5���)ZFailed)rZ���Zelr5���r5���r6���r\���e��s����z)Base._run_transaction.<locals>.<listcomp>zRPM: {}zCould not run transaction.zTransaction couldn't start:� ts_all_fn� ts_done_fnz$Failed to remove transaction file %s)rM��rN��)8rL��r��r4���Zhistory_record_packagesr`���rq���r����r����r��r1��r����r0��r2��rM���rN���r���rO���r���r����ZMAIN_PROG_UPPERr/��r"��r����r$���commentr3��Z reset_nicer�����nicer����r#���r����r����r!���Z_sync_rpm_trans_with_swdbr���rp���r7��r����rQ���rc���r ���r9��r(���r:��r���getattrr ����unlink_fr�����OSError�boolZinstall_setr,����_verify_transactionZverify_tsi_package)r3���r��r>��Zusing_pkgs_pats�installed_queryZ using_pkgs�rpmdbvZlastdbvr<��rO��Zonice�errorsZfailedr����rU���r[����fnr5���r5���r6���r;��)��s~���� zBase._run_transactionc����������������s����dd��|�j�D��}t|������fdd�}tjjd�}d}tjj|��}|j��j��}t dd��|D���}xH|�j jD�]<} | j��} x.| j ��D�]"}|j��|kr�|jd��|j���q�W�qjW�x|D�]}||j|�}q�W�|j��} |�j j| ��|���d|�_d�S�) Nc�������������S���s���g�|�]}|j�tjjkr|�qS�r5���)r(��r����r����Z#TransactionItemAction_REASON_CHANGE)rZ���r*��r5���r5���r6���r\������s����z,Base._verify_transaction.<locals>.<listcomp>c����������������s ���|d7�}�d�k r�|�|����|S�)Nr����r5���)r�����count)�total� verify_pkg_cbr5���r6����display_banner���s����z0Base._verify_transaction.<locals>.display_bannerzverify transactionr���c�������������S���s���g�|�] }|j��qS�r5���)r����)rZ���r[���r5���r5���r6���r\������s����T)r����rp���r���r#���r����r`���� rpmdb_sackrq���r����r���r����r-��ZgetCompsGroupItemZgetPackagesZgetNameZsetInstalledr����r����r1��r��r+���)r3���r\��Ztransaction_itemsr]��r����rZ��r^��r���namesZti�grI��r*��rW��r5���)r[��r\��r6���rU�����s(���� zBase._verify_transactionc���������� ������sX��t�jj|�jj|�jj�}|����tj��}tdd��|D���}tdd��|D���} �j j jdkrn�j t|�|| d��n�j t|�|��t�jj |||�����j��r�t�jj��j����t��fdd�|D���} t�jjd|��j�}|�jj}|dk} xԈ�jo�| s�|dk�r�|dk�r|d 8�}td �}tj|��dd����jD��}�fdd�|D��}td d��|D���}�j t|�|��t�jj |||�����j���r�t�jj��j����| t��fdd�|D���7�} t�jj||i��}q�W���j�r�t�jjj��j�}tj|��W�d�Q�R�X�|d�k �r�|| |��|\}}||k�rT||k��rtd�}n||k�r,td�}d||�d��}tj||d�|d�|��d�S�)Nc�������������s���s���|�]}|j�V��qd�S�)N)� download_size)rZ����ploadr5���r5���r6���r�����s����z1Base._download_remote_payloads.<locals>.<genexpr>c�������������S���s���g�|�]}t�|tjj�r|�qS�r5���)r,��r����drpmZDeltaPayload)rZ���Zpayloadr5���r5���r6���r\������s����z2Base._download_remote_payloads.<locals>.<listcomp>����)Ztotal_drpmsc�������������3���s���|�]}��j�|�V��qd�S�)N)�_bandwidth_used)rZ���rb��)rX��r5���r6���r�����s���r���r����z,Some packages were not downloaded. Retrying.c�������������S���s���g�|�]}|�qS�r5���r5���)rZ���r����r5���r5���r6���r\������s����c����������������s ���g�|�]}t�jj|��t�jj��qS�r5���)r���rS����_pkg2payload� RPMPayload)rZ���r����)�progressr5���r6���r\������s���c�������������s���s���|�]}|j�V��qd�S�)N)ra��)rZ���rb��r5���r5���r6���r�����s���c�������������3���s���|�]}��j�|�V��qd�S�)N)re��)rZ���rb��)rX��r5���r6���r�����s����z?Delta RPMs reduced %.1f MB of updates to %.1f MB (%d.1%% saved)zIFailed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)�d���i���r'��)r���r���i���i���)r���r����Zbuild_download_lockr4���r����r����r�����sumrp���r���__code__�co_argcountrS���Z_download_payloadsZ_irrecoverablerQ���Z DownloadErrorZ_update_savingZ_recoverable�retriesr���rM���r����Z errmap2str)r3����payloadsrc��rh���callback_totalZ fail_fastr����Zbeg_downloadZest_remote_sizeZ total_drpmZremote_sizeZsavingrm��Zforeverr����Zremaining_pkgs�realZfullZpercentr5���)rX��rh��r6����_download_remote_payloads���sb���� zBase._download_remote_payloadsc������� ���������s����|�j�|�\}}|rz�dkr$tjj���tjj|�jj��j���|�j j ���|�jdd��|D�������fdd�|D��}|�j|���|��|�j j r�xX|D�]P}|jr�tjj|j��|jjd��}ntjj|jj|jjd��}tj||�j j ��q�W�dS�)a��Download the packages specified by the given list of packages. `pkglist` is a list of packages to download, `progress` is an optional DownloadProgress instance, `callback_total` an optional callback to output messages about the download operation. Nc�������������S���s���g�|�]}|j����qS�r5���)�localPkg)rZ���r����r5���r5���r6���r\�����s����z*Base.download_packages.<locals>.<listcomp>c����������������s$���g�|�]}t�jj|���jt�jj��qS�r5���)r���rS���rf��Z delta_factoryrg��)rZ���r����)rc��rh��r5���r6���r\�����s����/)�_select_remote_pkgsr���r!���ZNullDownloadProgressrc��Z DeltaInfor`���rq���r����r4���Zdeltarpm_percentager?���rq��r=���Zbaseurlr����r����r����Zget_local_baseurl�location�lstriprS���Zpkgdir�shutil�copy) r3���Zpkglistrh��ro���remote_pkgsZ local_pkgsrn��r����ru��r5���)rc��rh��r6����download_packages���s"���� zBase.download_packagesc�������������C���s����g�}|s|S�|�j�j��r&tjjtd���g�}x�|D�]�}tjj|��rhd|krhtj j ||�j|�}|�j|g��y|j |�jj|���W�q0�tk r��}�ztj|��|j |��W�Y�d�d�}~X�q0X�q0W�|�jdd��|r�|r�ttd�jdj|����|S�)NzACannot add local packages, because transaction job already existsz://T)rz���zCould not open: {}r#��)r���Z req_lengthr���rQ���rc���r���r����r����r����r����Z_urlopen_progressr4���r?���rw���r`���Zadd_cmdline_packager����rM���rd���r���rO���r����)r3���� path_list�strictrh���pkgsZ pkgs_errorr����rU���r5���r5���r6����add_remote_rpms��s(���� zBase.add_remote_rpmsc�������������C���s��|j�r|�jj}d}n|�j|j�}|j}|j��}|�r|�jj}tj j j|�}tj jj ||j���}tjj|j���}~|dkr�d} d} n�|dkr�|r�d} nd} td�|�} n\|dkr�d} td�|�} nB|dkr�|r�d} nd} d} td�|�} n|d k�rd} td �|�} nd} d} | | fS�)a���Verify the GPG signature of the given package object. :param po: the package object to verify the signature of :return: (result, error_string) where result is:: 0 = GPG signature verifies ok or verification is not required. 1 = GPG verification failed but installation of the right GPG key might help. 2 = Fatal GPG verification error, give up. r���rB��r����r'��z"Public key for %s is not installedzProblem opening package %srD��z Public key for %s is not trustedrd��zPackage %s is not signed)� _from_cmdliner4���Zlocalpkg_gpgcheckr^���r~���Zgpgcheck�gpgkeyrY���r���r(���r�����initReadOnlyTransactionZ miscutilsZcheckSigrr��r����r�����basenamer���)r3����po�checkZ hasgpgkeyrS����rootr���Z sigresultZlocalfn�resultr����r5���r5���r6����_sig_check_pkg(��sF���� zBase._sig_check_pkgc�������������C���s ���|�j�|�S�)a���Verify the GPG signature of the given package object. :param pkg: the package object to verify the signature of :return: (result, error_string) where result is:: 0 = GPG signature verifies ok or verification is not required. 1 = GPG verification failed but installation of the right GPG key might help. 2 = Fatal GPG verification error, give up. )r���)r3���r����r5���r5���r6����package_signature_checkc��s���� zBase.package_signature_checkc���������� ���C���sl���xf|D�]^}t�jj|�sqytj|��W�n&�tk rL���tjtd�|��wY�qX�tj t jjtd�|��qW�d�S�)NzCannot remove %sz %s removed) r����r����r����r ���rR��rS��rM���rd���r���r����r���r#���r����)r3����packagesrY��r5���r5���r6���r����r��s���� zBase._clean_packagesrh���c�������������C���sv���|dkr|�j�j}|dkr*|�j|||||�S�tj|�j||||d�}|dksTt|�dkr\|d�S�t||�}tjdd��|�S�)aR��Return a :class:`misc.GenericHolder` containing lists of package objects. The contents of the lists are specified in various ways by the arguments. :param pkgnarrow: a string specifying which types of packages lists to produces, such as updates, installed, available, etc. :param patterns: a list of names or wildcards specifying packages to list :param showdups: whether to include duplicate packages in the lists :param ignore_case: whether to ignore case when searching by package names :param reponame: limit packages list to the given repository :return: a :class:`misc.GenericHolder` instance with the following lists defined:: available = list of packageObjects installed = list of packageObjects upgrades = tuples of packageObjects (updating, installed) extras = list of packageObjects obsoletes = tuples of packageObjects (obsoleting, installed) recent = list of packageObjects N)�showdups�ignore_caserm���r���c�������������S���s ���|�j�|�S�)N)Zmerge_lists)�a�br5���r5���r6���r�������s����z(Base._do_package_lists.<locals>.<lambda>)r4���Zshowdupesfromrepos� _list_patternr�����partialrp����mapr����)r3���� pkgnarrow�patternsr���r���rm���Zlist_fnZyghsr5���r5���r6����_do_package_lists��s���� zBase._do_package_listsc�������&���������s�����fdd���fdd�}�fdd�}t�j|d�}g�} g�} g�}g�}g�} g�}g�}g�}g�}g�}|}�jj��}|d�k r�tjj||d�}|j�jd d �}|dk�r�i�}i�}xH|j��D�]<}|||j <�|r�q�|j |jf}||ks�|||�kr�|||<�q�W�t||j ����} ||j���}|�s|jdd �}x�|D�]�}|�rN|j |k�rB|j|��n | j|��nT|j |jf}|j |k�rr|j|��n0||k�s�|j||���r�| j|��n |j|���q W��n�|dk�r�||�jdd�} �j| dd�} | jddgd��| j��j��} �nP|dk�rt||j����} �n2|dk�rB|�r�||�j��}|j��j��}x\|D�]T����j ��jf}|j|g��}��fdd�|D��}t|�dk�r�|j����n | j�����q@W�n�||�j��jdd �j��}|j��j��j��}xz|D�]r\} }!|| |!f�d���|j| |!fd�g�d�}"|"��s ��j|"��r| j����n"��j|"��r.|j����n |j�����q�W��n|dk�rh||�j�jj�}#|#j��}n�|dk�r��fdd�|j��D��}n�|dk�r|j��}$|�jj���j|$d�}�j|d dd�}|jddgd��g�}xl|D�],��j}%|j�fdd�|$j|%d �D�����q�W�n6|d!k�rD|j��}|�s2|jdd �}||�j �j!j"�}| |_| |_||_#||_$| |_%||_||_&||_"||_||_'|S�)"Nc����������������s�����dkrdS��j�j|����kS�)z:Test whether given package originates from the repository.NT)r����rS���)�package)rm���r3���r5���r6����is_from_repo���s����z(Base._list_pattern.<locals>.is_from_repoc����������������s�����fdd�|�D��S�)z=Filter out the packages which do not originate from the repo.c�������������3���s���|�]}��|�r|V��qd�S�)Nr5���)rZ���r���)r���r5���r6���r�����s����z=Base._list_pattern.<locals>.pkgs_from_repo.<locals>.<genexpr>r5���)r���)r���r5���r6����pkgs_from_repo���s����z*Base._list_pattern.<locals>.pkgs_from_repoc����������������s�����dkr|�S�|�j���d�S�)z=Filter out the packages which do not originate from the repo.N)rm���)r����)rq���)rm���r5���r6����query_for_repo���s����z*Base._list_pattern.<locals>.query_for_repo)�iter)r���F)rk���rh���T)Zlatest_per_arch_by_priority�upgrades)Zupgrades_by_priority)�upgrade�src�nosrc)� arch__neqr����r��c����������������s���g�|�]}|j���j�kr|�qS�r5���)�evr)rZ���r����)� avail_pkgr5���r6���r\�����s����z&Base._list_pattern.<locals>.<listcomp>r���� autoremove�extrasc����������������s���g�|�]}��|�r|�qS�r5���r5���)rZ���r����)r���r5���r6���r\�����s����r��)Zobsoletes_by_priority)rd���r���c����������������s���g�|�]}��|f�qS�r5���r5���)rZ���r=��)�newr5���r6���r\���.��s����)�provides�recent)(r ���Z GenericHolderr`���rq���r���rs���rt���rv���r����Zpkgtupr����r����r��r����r��rr���rw���Zevr_gt�_merge_update_filters�latestr��r��r����rp���Zevr_eq� _unneededr�����swdbr���r����r���extendZ_recentr4���r����reinstall_available� old_available�updates�obsoletesTuplesr���)&r3���r����patternr���r���rm���r���r���Zyghr����r��r���r���r���r��r���r���r���r���Zicr��r|���ZdinstZndinstr����keyZavailr����Zinstalled_dict�installed_pkgsZsame_verZavailable_dictr����r����Zinst_pkgZautoremove_qr��Zobsoleted_reldepsr5���)r���r���r���rm���r3���r6���r������s����� zBase._list_patternc�������������C���s���|��j�|7��_�t|�S�)N)r���rp���)r3����transr5���r5���r6����_add_comps_transE��s����zBase._add_comps_transc����������������s����|j���}|sdS�|j��jjdd�}|j��fdd�|D��d�}|j|�}x|D�]}��jj|tjj ��qLW�|j |�}|j |�}|r�x |D�]}��jj|��j jd��q�W�dS�)z� Mark to remove packages that are not required by any user installed package (reason group or user) :param query: dnf.query.Query() object NF)rb���c����������������s ���g�|�]}��j�jj|j�r|�qS�r5���)r����r-��Zis_removable_pkgr����)rZ���r[���)r3���r5���r6���r\���U��s����z,Base._remove_if_unneeded.<locals>.<listcomp>)r����)� clean_deps)r����Z_safe_to_remover����r���r����� differencer����r����r����Z TransactionItemReason_DEPENDENCY�intersectionr����eraser4����clean_requirements_on_remove)r3���rq���Z unneeded_pkgsZunneeded_pkgs_historyZpkg_with_dependent_pkgsr����Zremove_packagesr5���)r3���r6����_remove_if_unneededI��s���� zBase._remove_if_unneededc����������������s>����j�}��jjd�}��fdd�}��fdd�}dd��}��jj��jdd �}|jtj|dd �f|j tj|dd �f|j |f|j|ff}x�|D�]�\}} x�|D�]�} d| ji}| j r�|jd |i����jj��jf�|�j��}|jddgd��|�s| j} | j r�| d|�7�} tjtd�j| ���q�| ||| �}��jjj| j��q�W�q�W���j|��d�S�)Nr����c����������������s,���t�jj��j�}|j|�d����jj|d��|S�)N)r����)�select)r����selector�Selectorr`���r���r���r���)rq����remove_query� comps_pkgr��)r3���r5���r6���� trans_upgradeg��s����z1Base._finalize_comps_trans.<locals>.trans_upgradec����������������s������j�jdkrr|js"��j|�|d��q�|�j��j��}��j|��tjj ��j �}|jdj|j |j�d����jj||�d��nltjj ��j �}|jr�|jdj|j |j�d��n,��j�jr�|�j��j j��j|�d��}�|j|�d����jj||�d��|S�)Nrh���)r|��z ({} if {}))r���)r����optional)r��)r����)r4����multilib_policyZrequires�_install_multiarchr����rx����_report_already_installedr���r���r���r`���r���rO���r����r����installr��ru���rq���rr���)rq���r���r���r|��rV��r��)r3���r5���r6���� trans_installm��s ���� z1Base._finalize_comps_trans.<locals>.trans_installc�������������S���s���|j�|��}|S�)N)ru���)rq���r���r���r5���r5���r6����trans_remove���s���� z0Base._finalize_comps_trans.<locals>.trans_removeT)ri���)r|��Fr����r����r���r���)r����.zNo match for group package "{}")r���r4���rX���r`���rq���rr���r���r����r����install_optr���r����r����Zbasearchonlyr<���rx���rM���rd���r���rO���r���Z group_membersr����r���)r3���r���r����r���r���r���r���Zattr_fn�attrrY��r���Z query_argsr��Zpackage_stringr5���)r3���r6���r��c��s4���� zBase._finalize_comps_transc����������������s �����fdd�}t�jj��j��j|�S�)Nc����������������sN�����j�j��j��j|�d�}|sd�S�y��jjj|d��S��tk rH���tj j S�X�d�S�)N)r����r���)r`���rq���r����rr���r����r(���r�����AttributeErrorr����r����ZTransactionItemReason_UNKNOWN)Zpkgnamer��)r3���r5���r6���� reason_fn���s����z+Base._build_comps_solver.<locals>.reason_fn)r���r���ZSolverr����r���)r3���r���r5���)r3���r6���r�����s���� zBase._build_comps_solverc�������������C���sH���|�j���}t|t�stjj|�}|j|||p.t��||�}|s>dS�|�j|�S�)a&��Installs packages of environment group identified by env_id. :param types: Types of packages to install. Either an integer as a logical conjunction of CompsPackageType ids or a list of string package type ids (conditional, default, mandatory, optional). r���) r��r,��r����r����r�����listToCompsPackageTypeZ_environment_installr���r���)r3����env_id�types�excluder|���exclude_groupsr ��r���r5���r5���r6����environment_install���s���� zBase.environment_installc�������������C���s���|�j���}|j|�}|�j|�S�)N)r��Z_environment_remover���)r3���r���r ��r���r5���r5���r6����environment_remove���s���� zBase.environment_removec������� ���������s�����fdd���d}|r2��fdd�|D��}t�jj|�}�j��}t|t�sPtjj|�}|j ||||�}|shdS�|rt|j } n|j} tj td�|| ���j|�S�)an��Installs packages of selected group :param pkg_types: Types of packages to install. Either an integer as a logical conjunction of CompsPackageType ids or a list of string package type ids (conditional, default, mandatory, optional). :param exclude: list of package name glob patterns that will be excluded from install set :param strict: boolean indicating whether group packages that exist but are non-installable due to e.g. dependency issues should be skipped (False) or cause transaction to fail to resolve (True) c����������������s6���t�jj|��r,��jj��j|�d�}tdd��|�S�|�fS�d�S�)N)� name__globc�������������S���s���|�j�S�)N)r����)rI��r5���r5���r6���r�������s����zABase.group_install.<locals>._pattern_to_pkgname.<locals>.<lambda>)r���r�����is_glob_patternr`���rq���rr���r���)r���r��)r3���r5���r6����_pattern_to_pkgname���s����z/Base.group_install.<locals>._pattern_to_pkgnameNc����������������s���g�|�]}��|��qS�r5���r5���)rZ���rI��)r���r5���r6���r\������s����z&Base.group_install.<locals>.<listcomp>r���z#Adding packages from group '%s': %s)� itertools�chain� from_iterabler��r,��r����r����r����r���Z_group_installr���r���rM���rN���r���r���) r3����grp_idZ pkg_typesr���r|��Zexclude_pkgnamesZnested_excludesr ��r���Zinstlogr5���)r���r3���r6���� group_install���s"���� zBase.group_installc�������������C���s����t�|�j|�jt�jt�jB�t�j�}d}d}x�|D�]�} y|j| �} W�n:�tjj k rv�}�zt jt|���d}w*W�Y�d�d�}~X�nX�x2| j D�](}|�s�||kr�||�j||||d�7�}q�W�x&| jD�]} ||�j| ||||d�7�}q�W�q*W�|�r�|r�tjjtd���|S�)Nr���TF)r���r|��)r���r|��r���zNothing to do.)r���r���r�����ENVIRONMENTS�GROUPS� AVAILABLEr����r���rQ���r����rM���r5��r ����groupsr����environmentsr���rc���r���)r3���r���r���r|��r���r���r���cnt�doner����res�errZgroup_idr���r5���r5���r6����env_group_install���s(���� zBase.env_group_installc�������������C���s���|�j���}|j|�}|�j|�S�)N)r��Z _group_remover���)r3���r���r ��r���r5���r5���r6����group_remove��s���� zBase.group_removec�������������C���s����t�|�j|�jt�jt�jB�t�j�}y|j|��}W�nF�tjj k rp�}�z&t jdt|���tjj td���W�Y�d�d�}~X�nX�d}x|jD�]}||�j|�7�}q~W�x|jD�]}||�j|�7�}q�W�|S�)NzWarning: %szNo groups marked for removal.r���)r���r���r����r���r���� INSTALLEDr����r���rQ���r����rM���r5��r ���rc���r���r���r���r���r���)r3���r���r��r���r���r���r.���grpr5���r5���r6����env_group_remove��s���� "zBase.env_group_removec������� ��� ���C���sL��t�|�j|�jt�jt�jB�t�j�}d}�x |D��]�}y|j|�}W�n6�tjj k rr�}�zt jt|���w(W�Y�d�d�}~X�nX�xX|j D�]N}y|�j|��d}W�q|�tjj k r��}�zt jt|���w|W�Y�d�d�}~X�q|X�q|W�xZ|jD�]P}y|�j|��d}W�q��tjj k �r$�}�zt jt|���w�W�Y�d�d�}~X�q�X�q�W�q(W�|�sHtd�} tjj| ��d�S�)NFTzNo group marked for upgrade.)r���r���r����r���r���r���r����r���rQ���r����rM���r5��r ���r����environment_upgrader���� group_upgrader���r����ZCliError) r3���r���r��Zgroup_upgradedr���r���r���r.��r���r����r5���r5���r6����env_group_upgrade��s6���� zBase.env_group_upgradec�������������C���s���|�j���}|j|�}|�j|�S�)N)r��Z_environment_upgrader���)r3���r���r ��r���r5���r5���r6���r���9��s���� zBase.environment_upgradec�������������C���s���|�j���}|j|�}|�j|�S�)N)r��Z_group_upgrader���)r3���r���r ��r���r5���r5���r6���r���@��s���� zBase.group_upgradec�������������C���s����|�j�jd�}tjj|�rdS�|�j�j}tjjj |d�}|j tjtjB����|j dd�}t|�}~~|dkrldS�tjj|�}tjj|�s�tj|��t|d�}|j���~dS�dS�) z�Checks for the presence of GPG keys in the rpmdb. :return: 0 if there are no GPG keys in the rpmdb, and 1 if there are keys z/.gpgkeyschecked.yumr����)r���r����z gpg-pubkeyr����wN)r4���r����r����r����r����rY���r���r(���r����r���r�����_RPMVSF_NOSIGNATURES�_RPMVSF_NODIGESTSZdbMatchrp����dirname�makedirs�openr9���)r3���ZgpgkeyscheckedrY���Zmyts�idx�keysZmydirZfor5���r5���r6����_gpg_key_checkG��s&���� zBase._gpg_key_checkc������� ������C���s����|�j�|�\}}|�j|��x~|D�]v}tjj|�j�}|�jj��j|d�}|�jj rb|j |�jj��j|d��}|j|d�}|d�k r�|j|d�}|�jj ||�d��qW�t|�S�)N)r����)r��)rm���)r���r���)r ��r���r���r���r���r`���rq���rr���r4���r��ru���r���r���r���rp���) r3���rq���rm���r|���already_instr��r���r��r��r5���r5���r6���r���e��s���� zBase._install_multiarchc�������������C���s,���t�j��}t�j��}t||��t||��||fS�)a��� Categorize :param install and :param exclude list into two groups each (packages and groups) :param install: list of specs, whether packages ('foo') or groups/modules ('@bar') :param exclude: list of specs, whether packages ('foo') or groups/modules ('@bar') :return: categorized install and exclude specs (stored in argparse.Namespace class) To access packages use: specs.pkg_specs, to access groups use: specs.grp_specs )�argparseZ Namespacer���)r3���r���r���� install_specs� exclude_specsr5���r5���r6����_categorize_specss��s ���� zBase._categorize_specsc����������������sd���dd��|j�D������fdd�|j�D��}|�jj��j|d�}|�jj��j��d�}|�jj|��|�jj|��d�S�)Nc�������������S���s���g�|�]}t�jj|�r|�qS�r5���)r���r����r���)rZ���r���r5���r5���r6���r\������s����z/Base._exclude_package_specs.<locals>.<listcomp>c����������������s���g�|�]}|��kr|�qS�r5���r5���)rZ���r���)� glob_excludesr5���r6���r\������s����)r����)r���)� pkg_specsr`���rq���r����ry���)r3���r����excludesr}���Zglob_exclude_queryr5���)r���r6����_exclude_package_specs���s����zBase._exclude_package_specsc������� ������C���s����t���}t|�j|�jtjtjB�tjtjB��}x�|D�]�}y|j|�}W�n8�t j jk rx�}�ztj dt|���w.W�Y�d�d�}~X�nX�|j|j��|j|j��x8|jD�].}|�jj|�}x|j��D�]} |j| j��q�W�q�W�q.W�t|�S�)NzWarning: Module or %s)r���r���r���r����r���r���r���r���r����r���rQ���r����rM���r5��r ���r<���r���r���Z_environment_by_idZgroups_iterr����rP���r��) r3����group_specsr���r��r���r���r���Zenvironment_idZenvironmentr-��r5���r5���r6����_expand_groups���s"���� zBase._expand_groupsc���������� ���C���s����x�|D�]x}yL|�j�j}d|kr<|jd�}|d�}|d�jd�}|�j|g|||j|j��W�q�tjjk r|���|j d|���Y�qX�qW�d�S�)Nrs��r���r�����,�@) r4���Zgroup_package_types�splitr���r���� grp_specsr���rQ���rc���rw���)r3���r���r���Zskippedr|��Z group_specr���r��r5���r5���r6����_install_groups���s���� zBase._install_groupsc�������������C���s���|d�krg�}g�}g�}g�}g�} |�j�||�\} }|�j|��xd| jD�]Z}y|�j||||d��W�q>�tjjk r��} �ztjt | ���|j |��W�Y�d�d�} ~ X�q>X�q>W�g�}f�}to�| j�rLy tj jj|��}|j| j|��W�nx�tjjk �rH�} �zV| j�r x| jD�]}|j |��q�W�| j�r2x| jD�]}|j d|����qW�| j}W�Y�d�d�} ~ X�nX�n| j}|�rv|�j|j�|_|�j||||��|�s�|�s�|�s�| �s�|�r�tjj|||| |d��d�S�)N)rm���r|���formsr���)�no_match_group_specs�error_group_specs�no_match_pkg_specs�error_pkg_specs�module_depsolv_errors)r���r���r���r���r���rQ����MarkingErrorrM���r5��r����rw���ro���r��re���rf���Z ModuleBaseZ MarkingErrorsr��r��r ��r���r��)r3���r���r���rm���r|��r��r��r��r��r��r���r����specrU���Zno_match_module_specsr ��rf���Ze_specr5���r5���r6���r������sN���� zBase.install_specsc������� ������C���s����t�jj|�}|j|�j|dd�}|�jjdks4|j|�rr|d�}|dk rP|j|d��|sb|�j |||��|�j |||d�S�|�jjdkr�|j|�||�jj|d |d �}|s�|�j |||��x|D�]} |�j j| |�d��q�W�dS�d S�)z@Mark package(s) given by pkg_spec and reponame for installation.F)r���with_srcrh���rq���N)rm���)rm���r|��r��T)r��r��rm����reports�solution)r���r���r����r���)r���rs���rt����get_best_solutionr`���r4���r���Z_is_arch_specifiedrr����_raise_package_not_found_errorr����_get_best_selectorsr��r���r���) r3����pkg_specrm���r|��r��r|���r��r���sltrsr��r5���r5���r6���r������s,���� zBase.installc�������������C���s����|j�rd}t|��|�jj��j��j|j|jdgd�}|shtd�}t j ||j��tjj td�|j�|j��n\t|�d�|kr�tjj|�j�}|j|gd��|�jj||�d��d S�td �}t j ||j��dS�d�S�)Nz-downgrade_package() for an installed package.�noarch)r����r����z.Package %s not installed, cannot downgrade it.zNo match for argument: %sr���)r����)r���r���r����zCPackage %s of lower version already installed, cannot downgrade it.)�_from_system�NotImplementedErrorr`���rq���r����rr���r����r����r���rM���rd���r���rQ���r ��ru���sortedr���r���r���r���r���)r3���r����r|��r����r��r��r5���r5���r6����package_downgrade��s ���� zBase.package_downgradec�������������C���s����|�j�j��j|j|j|j�}|�j|�\}}||kr>|�j|g��nT|tj j |�krdtjj td�|j��n.tjj|�j��}|j|gd��|�jj||�d��dS�)NzNo match for argument: %s)r����)r���r���r����)r`���rq����_nevrar����r���r����r ��r���r���r���r���r���rQ����PackageNotFoundErrorr���ru��r���r���r���r���r���)r3���r����r|��r��r���r��r��r5���r5���r6����package_install��s����zBase.package_installc�������������C���sf���|�j�j��j��j|j|j|jd�r0|�jj|��dS�t d�}t j|t|���t jjt d�|j�|j��d�S�)N)r����r���r����r����z.Package %s not installed, cannot reinstall it.zNo match for argument: %s)r`���rq���r����rr���r����r���r����r���r���r���rM���rd���r����r���rQ���r ��ru��)r3���r����r����r5���r5���r6����package_reinstall(��s���� zBase.package_reinstallc�������������C���s���|�j�j|��dS�)Nr����)r���r���)r3���r����r5���r5���r6����package_remove0��s����zBase.package_removec�������������C���s`��|j�rd}t|��|jdkr6td�}tj||j��dS�|�jj��j ��j ��}|�jjr�|�jj��j |gd�j |d�r�tjj|�j�}|j|gd��|�jj|d��dS�|jd kr�|j|jd �}n|j|j|jd gd�}|�std�}tj||j��tjjtd �|j�|j��nZt|�d�|k��rBtjj|�j�}|j|gd��|�jj|d��dS�td�}tj||j��dS�d�S�)Nz+upgrade_package() for an installed package.r���z<File %s is a source package and cannot be updated, ignoring.r���)r����)r��)r���r����r��)r����)r����r����z+Package %s not installed, cannot update it.zNo match for argument: %szHThe same or higher version of %s is already installed, cannot update it.r����)r��r��r����r���rM���r����ru��r`���rq���r����rx���r4���r��rr���r���r���r���r���r���r���r����r����rd���rQ���r ��r��)r3���r����r����r����r��r��r5���r5���r6����package_upgrade4��s:���� $ zBase.package_upgradec������� ������C���s����|�j�j��j��}|j|�j�j��jdd��|D��d��}|j��}|rf|�j�j��j��j|j|j���d�}|j|�}|d�k rz|j|d��|�j||dd�}|r�|j|j ��j dd��|D��d��}tjj |�j��}|j|d ��|�jj|d ��dS�)Nc�������������S���s���g�|�] }|j��qS�r5���)r����)rZ���r����r5���r5���r6���r\���\��s����z*Base._upgrade_internal.<locals>.<listcomp>)r����)r��)rm���T)r��r���c�������������S���s���g�|�] }|j��qS�r5���)r����)rZ���r����r5���r5���r6���r\���x��s����)r����)r���r����)r`���rq���r����r���rr���r��ru���r���r���r���r����r���r���r���r���r���r���) r3���rq���r��rm���r��Z installed_allr��rV��r��r5���r5���r6����_upgrade_internalY��s ����" zBase._upgrade_internalc������� ������C���st��t�jj|�}|j|�j�}|d�}|�rZt�jj|�}|�oH|d�oH|d�j�r*|d�j}|�jj��j ��j ��}|�jjr||j |d�n|�jj��jdd�} | �s*|j |d�j ��} | s�td�}tj||��t�jjtd�|�|��nV|d�jo�t�jj|d�j���r*| j|d�jd ��s*td �}tj|dj||d�j���|�jj�oH|d��oH|d�j��}|�j||||�S�t�jjtd�|�|��d�S�)Nrq����nevra)r��T)ri���)r����z(Package %s available, but not installed.zNo match for argument: %s)r����z?Package %s available, but installed for different architecture.z{}.{})r���rs���rt���r��r`���r����r���r����rq���r����rx���r4���r��r����rr���r���rM���rd���rQ����PackagesNotInstalledErrorr����rO���Z has_just_namer��r ��) r3���r��rm���r|���r��r��Zwildcard�pkg_namer����Z obsoletersZinstalled_namer����r��r5���r5���r6���r�����s0���� & zBase.upgradec�������������C���s���|�j�|�jj��|�jj|d�d�S�)N)r��)r��r`���rq���r4���r��)r3���rm���r5���r5���r6����upgrade_all���s����zBase.upgrade_allc�������������C���s����|d�kr|�j�j���nxtjj|�}|j|�jdd�}|d�jtj d��|j |�||�jjdd�}|spt jtd�|��dS�x|D�]}|�j�j|d ��qvW�d S�)NF)r��rq���)� reponame__neqT)r��r��r ��zNo package %s installed.r���)r���r����)r���Zdistupgrade_allr���rs���rt���r��r`���rr���rK���ZSYSTEM_REPO_NAMEr��r4���r��rM���r����r���Zdistupgrade)r3���r��rs���r��r��r��r5���r5���r6����distro_sync���s���� zBase.distro_syncc�������������C���s����t�|||g�r�||7�}d}|rF|rFx4|D�]}td�}tj||��q(W�n|rX|�j|�rXd}xX|D�]P}y|�j||d��W�n4�tjjk r��} �ztj t | ���W�Y�dd} ~ X�q^X�d}q^W�|s�tjtd���n4|�jj��j |�jj|�jjd�} x| D�]}|�j|��q�W�dS�)z�Removes all 'leaf' packages from the system that were originally installed as dependencies of user-installed packages but which are no longer required by any such package.FzNot a valid form: %sT)r��NzNo packages marked for removal.)rb���)�anyr���rM���rd���r���r����r���rQ���r ��r����r����r`���rq���r���r����r���r4���rb���r��)r3���r��r���r��� filenamesr���Zgrp_specr����r��rU���r}��r����r5���r5���r6���r������s,���� zBase.autoremovec����������������sp���t�jj|�j�j|d�}���fdd�|j��D��}|sB�j||�����jj}x|D�]}�j j ||d��qPW�t|�S�)z'Mark the specified package for removal.)r��c����������������s(���g�|�] }��d�ks �j�j|���kr|�qS�)N)r����rS���)rZ���r����)rm���r3���r5���r6���r\������s����zBase.remove.<locals>.<listcomp>)r���)r���rs���rt���rv���r`���r�����"_raise_package_not_installed_errorr4���r���r���r���rp���)r3���r��rm���r��r ��r����r���r����r5���)rm���r3���r6���r�������s���� zBase.removec����������������s��t�jj|�}|j�j�}���fdd�|j��D��}|j��} |d�k rL| j|d��|d�k r`| j|d��t�jj | �} |s�t�j jd|| j����d}�j j}x\|D�]T} y| t| ��}W�n*�tk r����|s�w��jj| |d��Y�nX��jj|��|d7�}q�W�|dk�rt�j jd||��|S�) Nc����������������s(���g�|�] }��d�ks �j�j|���kr|�qS�)N)r����rS���)rZ���r����)�old_reponamer3���r5���r6���r\������s����z"Base.reinstall.<locals>.<listcomp>)rm���)r$��zno package matchedr���)r���r����)r���rs���rt���rv���r`���r����r��rr���rq���Z_per_nevra_dictrQ���r!��r����r4���r���r ����KeyErrorr���r���r���ZPackagesNotAvailableError)r3���r��r)��Znew_reponameZnew_reponame_neqZ remove_nar|���r��r���Zavailable_qZavailable_nevra2pkgr���r���Z installed_pkgZ available_pkgr5���)r)��r3���r6���� reinstall���s6���� zBase.reinstallc�������������C���s ���|�j�|�S�)z�Mark a package to be downgraded. This is equivalent to first removing the currently installed package, and then installing an older version. )�downgrade_to)r3���r��r5���r5���r6���� downgrade ��s����zBase.downgradec������� ������C���s��t�jj|�}|j|�j�}|s6td�|�}t�jj||��d}|j��}t |j ��j���}|�jj��j ��j|d�} t| �dkr�td�|�}t�jj|||��xn| j ��j��D�]^} |j��j| d�}|s�td�}tj|| ��q�t�jj|�j�}|j|d��|�jj||�d��d}q�W�|S�) z�Downgrade to specific version if specified otherwise downgrades to one version lower than the package installed. zNo match for argument: %sr���)r����z6Packages for argument %s available, but not installed.zDPackage %s of lowest version already installed, cannot downgrade it.)r����)r���r���r����)r���rs���rt���rv���r`���r���rQ���r��r��r��� _name_dictr���rq���r����rr���rp���r!��Z downgradesr����rM���rd���r���r���r���r���r���) r3���r��r|��r|���r��r����r���Zavailable_pkgsZavailable_pkg_namesZq_installedr"��Zdowngrade_pkgsr��r5���r5���r6���r,�� ��s.����zBase.downgrade_toc����������������s����|�j�j��j��d�}|r |��gfS�tjj|�j����}|r>|��gfS���jd�sR��jd�r^d���g}n&��jd�rr|��gfS���fdd�d D��}|�j�j��j|d�|fS�)N)Z file__glob�/bin/�/sbin/z/usrrs��c����������������s���g�|�]}|����qS�r5���r5���)rZ����prefix)� provides_specr5���r6���r\���E ��s���z!Base.provides.<locals>.<listcomp>� /usr/bin/� /usr/sbin/)r/��r0��r3��r4��)r`���rq���rr���r���Z_by_provides� startswith)r3���r2��Z providersZbinary_providesr5���)r2��r6���r���6 ��s���� z Base.providesc������� ������C���s����ddd�}||krt�d��||�}|rDd|�} |�jj| t���j|��|rfd|�} |�jj| t���j|��|r�d|�} |�jj| t���j|��|r�d|�} |�jj| t���j|��|r�d |�} |�jj| t���j|��d S�)a��� It modifies results of install, upgrade, and distrosync methods according to provided filters. :param cmp_type: only 'eq' or 'gte' allowed :param types: List or tuple with strings. E.g. 'bugfix', 'enhancement', 'newpackage', 'security' :param advisory: List or tuple with strings. E.g.Eg. FEDORA-2201-123 :param bugzilla: List or tuple with strings. Include packages that fix a Bugzilla ID, Eg. 123123. :param cves: List or tuple with strings. Include packages that fix a CVE (Common Vulnerabilities and Exposures) ID. Eg. CVE-2201-0123 :param severity: List or tuple with strings. Includes packages that provide a fix for an issue of the specified severity. Z__eqgZ __eqg__gt)�eqZgtez Unsupported value for `cmp_type`Z advisory_type�advisoryZadvisory_bugZadvisory_cveZadvisory_severityN)r����r/���� setdefaultr���r<���) r3���Zcmp_typer���r7��ZbugzillaZcvesZseverityZcmp_dictZcmpr���r5���r5���r6����add_security_filtersI ��s&���� zBase.add_security_filtersc�������������C���s ���i�|�_�dS�)z, Reset all security filters N)r/���)r3���r5���r5���r6����reset_security_filtersn ��s����zBase.reset_security_filtersc������� ������C���s>��|�j�p |�j�s|�r|S�|�jj��jdd�}|�jrRx|�jD�]}|j|�}q8W�|g|�_|�j�r�x<|�j�j��D�].\}}|rx|d�}||i} |j|jf�| ��}qdW�|j|�}|�s:|�r:|j ��}t |j��j���} | dk�r:|dk�rt d�j| �}t d�j| �}tjt||| ���n2t d�j|| �}t d �j|| �}tjt||| ���|S�) z� Merge Queries in _update_filters and return intersection with q Query @param q: Query @return: Query T)ri���Z __upgrader���Nz3No security updates needed, but {} update availablez4No security updates needed, but {} updates availablez<No security updates needed for "{}", but {} update availablez=No security updates needed for "{}", but {} updates available)r/���r.���r`���rq���rr���ru����itemsr����r���r���rp���r.��r���r���rO���rM���rd���r ���) r3���r��r��rd���r���Zmerged_queriesrq���Zfilter_namer�����kwargsrZ��Zmsg1Zmsg2r5���r5���r6���r���u ��s>���� zBase._merge_update_filtersc���������� ������s����j�rtd�}t|�����|�j��j���j|�jk}|r:g�n�j}���fdd�}d}|�jj�j���x |D��]} t j j| ��} �x�| D��]�}tj |�j|j|j�dkr�td�}tj|| |j��q�|�jjr�t jjj|j|j�}t jjj|�} tjt jj|| ���| |_|�jj�rt j j|| ��nt j j |��d}|�jj!�r:d}n�|�jj"�r�|�jj�r�| t jj#j$t jj#j%fk�r�d}tjt jj&td����nd}tjt jj&td ����nd}n<|�r�|��|j|j| |j'|jd ��}n|�r�|��|j|j�}|�s�d}q�|�jj(t)j*�}|�r|�jj+��}|�jj,|t)j*���|�jj-tj.|j��}|�rD|�jj,|��|dk�rjtd�|�}t j/j0||���tjtd���d}q�W�qhW�|��r�|�r�t j/j0td ���|�s�td��j1�}t j/j0||���|�j2���\}}|dk�r|�r�td�}tj|��t3|�}t j/j0||���dS�)a���Retrieve a key for a package. If needed, use the given callback to prompt whether the key should be imported. :param po: the package object to retrieve the key of :param askcb: Callback function to use to ask permission to import a key. The arguments *askcb* should take are the package object, the userid of the key, and the keyid :param fullaskcb: Callback function to use to ask permission to import a key. This differs from *askcb* in that it gets passed a dictionary so that we can expand the values passed. :raises: :class:`dnf.exceptions.Error` if there are errors retrieving the keys z6Unable to retrieve a key for a commandline package: %sc����������������s0���|�t�d����d�7�}�|�t�d�dj�j��7�}�|�S�)Nz. Failing package is: %sz zGPG Keys are configured as: %sz, )r���r����r���)r����)r���rS���r5���r6����_prov_key_data� ��s����z1Base._get_key_for_package.<locals>._prov_key_dataFr���z)GPG key at %s (0x%s) is already installedTzThe key has been approved.zThe key has been rejected.)r����useridZhexkeyid�keyurl�fingerprint� timestampzKey import failed (code %d)zKey imported successfullyzDidn't install any keysz�The GPG keys listed for the "%s" repository are already installed but they are not correct for this package. Check that the correct key URLs are configured for this repository.z+Import of key(s) didn't help, wrong key(s)?N)4r��r���r����r^���r~���rP���r1���r���r����r���ZcryptoZretriever ���ZkeyInstalledr����Zrpm_idrA��rM���r����Zshort_idr4���r����r����ZKeyInfoZfrom_rpm_key_objectr>��Zraw_keyZDNSSECKeyVerificationZverifyZ nice_user_msg�urlZlog_dns_key_importZlog_key_importZassumenoZ assumeyesZValidityZVALIDZPROVEN_NONEXISTENCEZany_msgr@��r9��r(���r:��Z getTsFlagsr����ZpgpImportPubkeyZ procgpgkeyrQ���rc���r����r���r ���)r3���r����askcb� fullaskcbr����Z key_installedZkeyurlsr=��Zuser_cb_failr?��r���r����Z dns_input_keyZ dns_resultZrcZ test_flagZ orig_flagsr����errmsgr5���)r���rS���r6����_get_key_for_package� ��s����� zBase._get_key_for_packagec�������������C���s���|�j�|||��dS�)a���Retrieve a key for a package. If needed, use the given callback to prompt whether the key should be imported. :param pkg: the package object to retrieve the key of :param askcb: Callback function to use to ask permission to import a key. The arguments *askcb* should take are the package object, the userid of the key, and the keyid :param fullaskcb: Callback function to use to ask permission to import a key. This differs from *askcb* in that it gets passed a dictionary so that we can expand the values passed. :raises: :class:`dnf.exceptions.Error` if there are errors retrieving the keys N)rF��)r3���r����rC��rD��r5���r5���r6����package_import_key$ ��s����zBase.package_import_keyc�������������C���s4���g�}|�j�j���x |�j�j��D�]}|jt|���qW�|S�)N)r����r���Zproblemsrw���r ���)r3����resultsZprobr5���r5���r6���r4��5 ��s ���� zBase._run_rpm_check�w+bc�������������K���s���t�jj||�j||f|�S�)z� Open the specified absolute url, return a file object which respects proxy setting even for non-repo downloads )r���r����Z_urlopenr4���)r3���rB��rS����moder<��r5���r5���r6����urlopen@ ��s����zBase.urlopenc�������������C���s,���|d�kr|�j�jtjd�}|j|�jjd�}|S�)N)r����)r���)r���rq���rK���r����r����r4���r����)r3���r��Zinstallonlyr5���r5���r6���r����H ��s����zBase._get_installonly_queryc�������������C���sr���t�jj|dd�}|j|�jdddd�}|d�rn|d�rn|d�jrn||d�d�jkrntjtd�j |d�d�j���d�S�) NT)r���F)rj���rk���rl���rq���r ��r���z * Maybe you meant: {}) r���rs���rt���r��r`���r����rM���r����r���rO���)r3���r��r|���r��r5���r5���r6����_report_icase_hintN ��s���� zBase._report_icase_hintc�������������C���s����dd��}g�}g�}x6|D�].}|j���r:|jtjkrD|j|��q|j|��qW�td�}|||�sjtjjtd���|�j j r�td�}|||�s�tjjtd���g�}||fS�)a�� Check checksum of packages from local repositories and returns list packages from remote repositories that will be downloaded. Packages from commandline are skipped. :param install_pkgs: list of packages :return: list of remote pkgs c�������������S���sx���d}xn|�D�]f}d}y|j���}W�n0�tk rN�}�ztjt|���W�Y�d�d�}~X�nX�|dk r tj|j||j���d}q W�|S�)NTF)ZverifyLocalPkgrL���rM���r����r����rO���rm���)Zpkg_listZ logger_msgZall_packages_verifiedr����Zpkg_successfully_verifiedrU���r5���r5���r6����_verification_of_packages] ��s���� z;Base._select_remote_pkgs.<locals>._verification_of_packagesz>Package "{}" from local repository "{}" has incorrect checksumz;Some packages from local repository have incorrect checksumz8Package "{}" from repository "{}" has incorrect checksumzVSome packages have invalid cache, but cannot be downloaded due to "--cacheonly" option)Z _is_local_pkgrm���rK���ZCMDLINE_REPO_NAMErw���r���r���rQ���rc���r4���r����)r3���Zinstall_pkgsrM��ry��Zlocal_repository_pkgsr����r����r5���r5���r6���rt��V ��s&���� zBase._select_remote_pkgsc�������������C���s���x|D�]}t�|��qW�d�S�)N)�_msg_installed)r3���r���r����r5���r5���r6���r���� ��s���� zBase._report_already_installedc������� ������C���s����|�j�jtjd�}tjj|�}|j|�j�|d|d�}|d�k rH|d�j|d��|d�sdtj j td�|��nB|�j�jtjd�}|d�j |�}|r�td�}ntd�}tj j ||��d�S�) N)r����F)r��r��rq���rq���)rm���zNo match for argumentz?All matches were filtered out by exclude filtering for argumentz?All matches were filtered out by modular filtering for argument)r`���rq���rK���r����r���rs���rt���r��rr���rQ���r��r���ZIGNORE_REGULAR_EXCLUDESr���) r3���r��r��rm���� all_queryrs���r��Zwith_regular_queryr����r5���r5���r6���r��� ��s���� z#Base._raise_package_not_found_errorc������� ���������s�����j�jtjd�j��}tjj|�}|j�j�|d|d�}|d�sNtj j td�|����d�k rp���fdd�|d�D��}n|d�}|s�td�}ntd �}tj j ||��d�S�) N)r����F)r��r��rq���rq���zNo match for argumentc����������������s ���g�|�]}�j�j|���kr|�qS�r5���)r����rS���)rZ���r����)rm���r3���r5���r6���r\���� ��s����z;Base._raise_package_not_installed_error.<locals>.<listcomp>zCAll matches were installed from a different repository for argumentz?All matches were filtered out by exclude filtering for argument)r`���rq���rK���r����r����r���rs���rt���r��rQ���r!��r���) r3���r��r��rm���rO��rs���r��r����r����r5���)rm���r3���r6���r(��� ��s���� z'Base._raise_package_not_installed_errorc�������������C���s���|�j�j|�jdd��dS�)z� Setup DNF file loggers based on given configuration file. The loggers are set the same way as if DNF was run from CLI. T)Zfile_loggers_onlyN)r$���Z_setup_from_dnf_confr4���)r3���r5���r5���r6���� setup_loggers� ��s����zBase.setup_loggersc����������������s����|�j�jtjtjB�tjB�@�r d}nd}t|�j��}|�j|dd�}|jf�|�}|�rl|rlt j j|j���}t j|��t|jdd��}t|jdd��|�} dd������fdd�|D���t���fd d�|D���} t���fd d�| D���}| |fS�)z�returns set of conflicting packages and set of packages with broken dependency that would be additionally installed when --best and --allowerasingTF)r��r��Zignore_weak)r��c�������������S���s���t�j|�j|�j|�j|�j|�jd�S�)N)r�����epoch�version�releaser����)rK���ZNEVRAr����rQ��rR��rS��r����)�itemr5���r5���r6���r��� ��s����z&Base._skipped_packages.<locals>._nevrac����������������s���g�|�]}��|��qS�r5���r5���)rZ���r*��)r��r5���r6���r\���� ��s����z*Base._skipped_packages.<locals>.<listcomp>c����������������s���g�|�]}��|��kr|�qS�r5���r5���)rZ���r����)r���transaction_nevrasr5���r6���r\���� ��s����c����������������s���g�|�]}��|��kr|�qS�r5���r5���)rZ���r����)r��rU��r5���r6���r\���� ��s����)r���ZactionsrK����INSTALLZUPGRADEZUPGRADE_ALLr���r0���r��r���r����r��r��rM���rd���r����problem_conflictsZproblem_broken_dependency)r3���Zreport_problemsr����r��ZngZparamsr��r����rW��Zproblem_dependencyZskipped_conflictsZskipped_dependencyr5���)r��rU��r6����_skipped_packages� ��s(���� zBase._skipped_packages)N)F)F)TT)T)N)FFF)F)F)N)T)NN)TN)rh���NNFN)N)NTN)NT)TNN)NT)T)NNTN)NTN)F)T)N)N)N)N)NNNN)NN)NNNF)F)NTF)NN)NN)NrI��)N)��__name__� __module__�__qualname__r7���r8���r:���r;���r?���rV����staticmethodr���rg���r���r�����propertyr���r4���r^����deleterr���r����Zlazyattrr����r`���ra���r�����setterr����r����r����r����r����r����r����r����r����r9���r����r����r����r(���ZRPMTRANS_FLAG_NOSCRIPTSZRPMTRANS_FLAG_NOTRIGGERSZRPMTRANS_FLAG_NODOCSr:��ZRPMTRANS_FLAG_JUSTDBZRPMTRANS_FLAG_NOCONTEXTSZRPMTRANS_FLAG_NOFILEDIGESTr����r/��r����r���r���r����r����r����r����r����r����r��r ��r ��r��r��r!��rA��r8��rL��r;��rU��rq��rz��r~��r���r���r����r���r���r���r���r��r��r���r���r���r���r���r���r���r���r���r���r���r���r���r���r��r���r���r��r��r��r��r��r��r���r#��r%��r���r����r+��r-��r,��r���r9��r:��r���rF��rG��r4��rK��r����rL��rt��r���r��r(��rP��rX��r5���r5���r5���r6���r���[���s���� = 8 ; > = '\ 8l"] * B ; � ) �= * / % & #�& %)�-r���c�������������C���s ���t�|��}td�}tj||��d�S�)Nz Package %s is already installed.)r ���r���rM���r����)r����r����r����r5���r5���r6���rN��� ��s����rN��)H�__doc__Z __future__r���r���r���r���r���r���Zlibdnf.transactionr����rx��r���Z dnf.compsr���Zdnf.i18nr���r ���r ���Zdnf.utilr���Zdnf.db.historyr���Zdnf.yumr ����collections.abcr����ImportError�collectionsr����Zdnf.callbackZdnf.confZ dnf.conf.readZ dnf.cryptoZ dnf.dnssecZdnf.drpmZdnf.exceptionsZdnf.goalZdnf.historyZdnf.lockZdnf.loggingZdnf.module.module_basero���Z dnf.persistorZ dnf.pluginZ dnf.queryZdnf.repoZdnf.repodictZdnf.rpm.connectionZdnf.rpm.miscutilsZdnf.rpm.transactionZdnf.sackZdnf.selectorZdnf.subjectZdnf.transactionZdnf.yum.rpmtransr����r����rK���r���r#���rH��r����r����rE��r(���r����rw��Z getLoggerrM����objectr���rN��r5���r5���r5���r6����<module>���s���� ���������������������