403Webshell
Server IP : 88.99.149.37  /  Your IP : 216.73.216.141
Web Server : nginx/1.31.2
System : Linux server-88-99-149-37 6.12.0-124.56.5.el10_1.x86_64 #1 SMP PREEMPT_DYNAMIC Fri May 15 06:12:08 EDT 2026 x86_64
User : muralimurth ( 1015)
PHP Version : 8.4.23
Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /lib/python3.12/site-packages/dnf/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/python3.12/site-packages/dnf/__pycache__/base.cpython-312.opt-1.pyc
�

�jL���x�dZddlmZddlmZddlmZddlmZddlZddlZddlZ	ddl
mZddlm
Z
dd	lmZmZmZdd
lmZddlmZddlmZ	dd
lmZddlZddlZddlZddlZddlZddl Zddl!Zddl"Zddl#Zddl$Zddl%Zddl&Zddl'Z	ddl(ZdZ)ddl*Zddl+Zddl,Zddl-Zddl.Zddl/Zddl0Zddl1Zddl2Zddl3Zddl4Zddl5ZddlZddl6Zddl7Z7ddl8Z8ddl9Z9ddl:Z:ddl;Z;ddl<Z<ddl=Z=ddl>Z>ddl?Z?ddl@Z@ddlAZAddlBZBddlCZCe;j�d�ZEGd�deF�ZGd�ZHy#e$r	dd
lmZY��wxYw#e$rdZ)Y��wxYw)z
Supplies the Base class.
�)�absolute_import)�division)�print_function)�unicode_literalsN)�deepcopy)�
CompsQuery)�_�P_�ucd)�_parse_specs)�
SwdbInterface)�misc)�SequenceTF�dnfc	�(�eZdZdyd�Zd�Zd�Zd�Zd�Zd�Ze	d��Z
d	�Zdzd
�Zd�Z
ed��Zed
��Zed��Zej$d��Zeej(j+d�d���Zed��Zed��Zed��Zej4d��Zd�Zd{d�Zd�Zd�Zd�Zdzd�Z d|d�Z!d}d�Z"d�Z#d�Z$dyd �Z%d~d!�Z&d"�Z'e(jRe(jTe(jVe(jXe(jZe(j\e(j^e(j`d#�Z1e2e(d$�re(jfe1d%<d&e(jhe(jjziZ6ed'��Z7ed(��Z8e8j$d)��Z8dzd*�Z9d+�Z:ed,�d-�d.�d/�0�Z;d1�Z<d2�Z=d3�Z>d4�Z?d5�Z@d6�ZAdzd7�ZBdd8�ZCd9�ZDd:�ZEd;�ZFdyd<�ZGd}d=�ZHd�d>�ZId�d?�ZJd@�ZKdA�ZLdB�ZM		d�dC�ZN	dydD�ZOdE�ZPdF�ZQdG�ZRdH�ZSd�dI�ZTdJ�ZUd�dK�ZVd�dL�ZWdM�ZXdN�ZYdO�ZZdP�Z[dQ�Z\dR�Z]d�dS�Z^dT�Z_dU�Z`dV�Zad}dW�Zbd�dX�Zcd�dY�ZddzdZ�Zed}d[�Zfd\�Zgd]�Zhd^�Zidyd_�Zjdyd`�Zkdyda�Zldydb�Zmd�dc�Znd�dd�Zo		d�de�Zpdf�Zqdzdg�Zrdh�Zsd�di�Ztdj�Zud�dk�Zvd�dl�Zwd�dm�Zxdn�Zyd�do�Zzdydp�Z{dq�Z|dr�Z}ds�Z~dt�Zdu�Z�dv�Z�dw�Z�dx�Z�y)��BaseNc�<�d|_|xs|j�|_d|_d|_d|_d|_d|_d|_tjj�|_d|_
t�|_t�|_tj"j%�|_tj(j+�|_tj.j1�|_tt4j6g�|_tj:j=�|_d|_ d|_!d|_"g|_#i|_$d|_%t�|_&tNjPjR|_*d|_+y)NF),�_closed�_setup_default_conf�_conf�_goal�_repo_persistor�_sack�_transaction�_priv_ts�_compsr�comps�TransactionBunch�_comps_trans�_history�set�
_tempfiles�_trans_tempfiles�callback�Depsolve�_ds_callback�logging�Logging�_logging�repodict�RepoDict�_repos�rpm�RPMPROB_FILTER_OLDPACKAGE�_rpm_probfilter�plugin�Plugins�_plugins�_trans_success�_trans_install_set�_tempfile_persistor�_update_security_filters�_update_security_options�_allow_erasing�_repo_set_imported_gpg_keys�libdnf�transaction�TransactionPersistence_UNKNOWN�_persistence�output)�self�confs  �-/usr/lib/python3.12/site-packages/dnf/base.py�__init__z
Base.__init__^s5������7�T�5�5�7��
���
�#�����
� �����
�����I�I�6�6�8�����
��%��� #�����L�L�1�1�3������+�+�-��
��l�l�+�+�-���"�C�$A�$A�#B�C����
�
�*�*�,��
�#���"'���#'�� �(*��%�(*��%�#���+.�5��(�"�.�.�M�M������c��|S�N��r?s rA�	__enter__zBase.__enter__|s���rCc�$�|j�yrE��close)r?�exc_argss  rA�__exit__z
Base.__exit__����
�
�rCc�$�|j�yrErJrGs rA�__del__zBase.__del__�rNrCc��|jr|jj|�y|jjry|j
j|�yrE)rr#�updater@�destdirr")r?�filess  rA�_add_tempfileszBase._add_tempfiles�sA������!�!�(�(��/�
�Y�Y�
�
���O�O�"�"�5�)rCc�*�|j�t|jd��}d|jjvrd|d<|j
rd|d<	|jj|jfddi|��y#tj$r~}tjtd�j|j|��t j"j%td�j|j���d}~wwxYw)	NT��load_presto�load_updateinfo�	filelists�load_filelists�
load_other�build_cache�loading repo '{}' failure: {}z"Loading repository '{}' has failed)�load�dict�deltarpmr@�optional_metadata_types�load_metadata_otherr�	load_repo�_repo�hawkey�	Exception�logger�debugr	�format�idr�
exceptions�	RepoError)r?�repo�mdload_flags�es    rA�_add_repo_to_sackzBase._add_repo_to_sack�s����	�	����
�
�,0�2���$�)�)�;�;�;�-1�L�)�*��#�#�)-�L��&�	I� �D�J�J� � ����N��N��N�����	I��L�L��:�;�B�B�4�7�7�A�N�O��.�.�*�*��6�7�>�>�t�w�w�G�I�
I��	I�s�)B�D�A9D
�
Dc���tjj�}|j}d|vr@tjj|j�\}}}||d<|�||d<|�||d<|S)N�
releasever�releasever_major�releasever_minor)rr@�Conf�
substitutionsr-�detect_releasevers�installroot)r@�substrs�major�minors     rArzBase._setup_default_conf�sx���x�x�}�}����"�"���u�$����*�*�4�+;�+;�<�
%�J��u�",�E�,��� �,1��(�)�� �,1��(�)��rCc	��|jj�D�cgc]}|js�|j��}}	|jj|j||jj|jjd|jj|jj��}|r@t$j'tj(j*j-|d��yycc}w#tj$r-}tjj!t#|���d}~wwxYw)NF)�update_only�debugsolver�module_obsoletesr)�repos�iter_enabled�module_hotfixesrk�sack�filter_modules�_moduleContainerr@ry�module_platform_id�debug_solverr�rfrgrrl�Errorrrh�warning�module�module_base�format_modular_solver_errors)r?�i�
hot_fix_repos�
solver_errorsrps     rA�_setup_modular_excludeszBase._setup_modular_excludes�s���'+�z�z�'>�'>�'@�V�'@�!�A�DU�DU����'@�
�V�	/� �I�I�4�4��%�%�}�d�i�i�6K�6K��	�	�,�,�%�T�Y�Y�Mc�Mc�!%���!;�!;�5�=�M���N�N��
�
�&�&�C�C�M�RS�DT�U�
W���W�����	/��.�.�&�&�s�1�v�.�.��	/�s#�C?�C?�A<D�E�(D?�?Ec
�	�t|jj�}d|vrtr|j	�yg}g}|�s�|j
j
�D�]�}|j|vr�t|j�dkDr�|jj�jd��}t|j�D]O}tjj|�}|j!|j#|jddd���}�Q|j|j��|j%|j'�|jf�|jj�jd��}	t|j(�D]O}
tjj|
�}|	j!|j#|jddd���}	�Q|	j|j��|	s���|j%|	|jf����d|v�r�|jj�jd��}t|jj�dkDrqt|jj�D]O}tjj|�}|j!|j#|jddd���}�Q|jj�jd��}t|jj(�D]O}
tjj|
�}|j!|j#|jddd���}�Qt|jj�dkDr6|jj+|�|jj-d�|r|jj/|�|rA|D]<\}
}|jj+|
�|jj-d|��>|r%|D] \}
}|jj/|
��"|str|j	�yyy)	N�allrT��emptyF��
with_nevra�
with_provides�with_filenames��reponame�main)r!r@�disable_excludes�WITH_MODULESr�r�r�rk�len�includepkgsr��query�filtermr�subject�Subject�union�get_best_query�append�apply�excludepkgs�add_includes�set_use_includes�add_excludes)r?�	only_main�disabled�
repo_includes�
repo_excludes�r�
incl_query�incl�subj�
excl_query�excl�
include_query�
exclude_queryr��repoids               rA�_setup_excludes_includeszBase._setup_excludes_includes�s����t�y�y�1�1�2���H����(�(�*���
��
���Z�Z�,�,�.���4�4�8�#���q�}�}�%��)�!%�����!2�!:�!:��!:�!F�J� #�A�M�M� 2��"�{�{�2�2�4�8��%/�%5�%5�d�6I�6I� �I�I�$�e�\a�7J�7c�&d�
�!3��&�&����&�5�!�(�(�*�*:�*:�*<�a�d�d�)C�D�!�Y�Y�_�_�.�6�6�T�6�B�
���
�
�.�D��;�;�.�.�t�4�D�!+�!1�!1�$�2E�2E��	�	�d�%�X]�3F�3_�"`�J�/��"�"�A�D�D�"�1��!�(�(�*�a�d�d�);�<�%/�,��!� �I�I�O�O�-�5�5�D�5�A�M��4�9�9�(�(�)�A�-���	�	� 5� 5�6�D��;�;�.�.�t�4�D�$1�$7�$7��8K�8K��	�	�d�%�X]�9L�9_�%`�M�7�!�I�I�O�O�-�5�5�D�5�A�M��D�I�I�1�1�2���{�{�*�*�4�0�� -� 3� 3�D�4G�4G��I�I�$�e�TY�5H�5[�!\�
�3��4�9�9�(�(�)�A�-��	�	�&�&�}�5��	�	�*�*�4�0���	�	�&�&�}�5��!.�
��v��	�	�&�&�u�-��	�	�*�*�4��8�"/��!.�
��v��	�	�&�&�u�-�"/��\��(�(�*�*�yrCc���|jr�|jjs�|jj	�D�cgc]4}|j
r&|jj�r|j��6}}|jjj|�|jj�|jr|jj�yycc}wrE)
rr@�	cacheonlyr�r��metadatare�	isExpiredrk�expired_to_addrR�saver5)r?r��expireds   rA�_store_persistent_datazBase._store_persistent_data�s�������	�	�(;�(;�%)�Z�Z�%<�%<�%>�@�%>���:�:�!�'�'�*;�*;�*=��t�t�%>�G�@�� � �/�/�6�6�w�?�� � �%�%�'��#�#��$�$�)�)�+�$��@s�9C!c�V�|j�|jd��|jS)NT)�arch_filter)r�
read_compsrGs rArz
Base.comps�s&���;�;���O�O��O�-��{�{�rCc��|jSrE)rrGs rAr@z	Base.conf����z�z�rCc��|jSrE�r,rGs rAr�z
Base.reposs���{�{�rCc��d|_yrEr�rGs rAr�z
Base.reposs����rC�
_priv_rpmconnc�|�tjjj|jj
�SrE)rr-�
connection�
RpmConnectionr@ryrGs rA�_rpmconnz
Base._rpmconns)���w�w�!�!�/�/��	�	�0E�0E�F�FrCc��|jSrE)rrGs rAr�z	Base.sackr�rCc��|j�tjjd��|jj�pt
jjd|jj|jjd|jj�|j_|jjS)NzSack was not initializedF�arch)r�rrlr�r�r:r��ModulePackageContainerr@ryrw�
persistdirrGs rAr�zBase._moduleContainers����9�9���.�.�&�&�'A�B�B��9�9�%�%�-�)/���)M�)M��t�y�y�,�,�d�i�i�.E�.E�f�.M�t�y�y�Oc�Oc�*e�D�I�I�&��y�y�)�)�)rCc��|jSrE)rrGs rAr;zBase.transaction(s��� � � rCc�@�|jrtd��||_y)Nztransaction already set)r�
ValueError�r?�values  rAr;zBase.transaction-s!������6�7�7�!��rCc�t�tjj|jj�|_yrE)r�	persistor�
RepoPersistorr@�cachedirrrGs rA�_activate_persistorzBase._activate_persistor4s#��"�}�}�:�:�4�9�9�;M�;M�N��rCc��|jjr'|jj|j||�|jj	||�y)z&Load plugins and run their __init__().N)r@�pluginsr2�_load�	_run_init)r?�
disabled_glob�enable_plugins�clis    rA�init_pluginszBase.init_plugins7s?���9�9����M�M����	�	�=�.�I��
�
����c�*rCc�8�|jj�y)z#Run plugins pre_configure() method.N)r2�_run_pre_configrGs rA�pre_configure_pluginszBase.pre_configure_plugins>s��	
�
�
�%�%�'rCc�8�|jj�y)zRun plugins configure() method.N)r2�_run_configrGs rA�configure_pluginszBase.configure_pluginsCs��	
�
�
�!�!�#rCc�8�|jj�y)zRun plugins unload() method.N)r2�_unloadrGs rA�unload_pluginszBase.unload_pluginsHs��	
�
�
���rCc�B�|jj}|j�|j�|j}|�rtj
j
�r!td�}tj|�ytj
j�dur!td�}tj|�y|dkr!td�}tj|�y|j�}|�$||krtjtd��y|jj�D]}|jjd��|jj!�sQtjtd�j#d	j%|jj&���y|jj)�D�]}|j+�\}}	|	�*tjtd
�|j,��C|r|	dkrDtj/td�|j,�|jj1���|rL|	|krGtd�}tj/||j,|	�|jj1���tj/td
�|j,|	���|rd|_|j5dd��tjtd��y)NzCMetadata timer caching disabled when running on metered connection.Fz:Metadata timer caching disabled when running on a battery.rz 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.)r@�metadata_timer_syncrr�r�util�on_metered_connectionr	rh�info�on_ac_power�since_last_makecacher��valuesre�setMaxMirrorTries�_any_enabledrj�join�reposdirr��_metadata_expire_inrkri�expire�reset_last_makecache�	fill_sack)
r?�timer�periodr��msgr�rnr��is_cache�
expires_ins
          rA�update_cachezBase.update_cacheMs`�����.�.�����'��$�$�&��(�(�	���x�x�-�-�/��>�?�����C� ���x�x�#�#�%��.��5�6�����C� ����{��:�;�����C� ��#,�#A�#A�#C� �#�/�4H�6�4Q����A�B�C�D���
�
�)�)�+���
�
�,�,�Q�/�,��z�z�&�&�(��K�K��F�G�N�N����D�I�I�.�.�/�1�
2�����(�(�*�A�%&�%:�%:�%<�"�X�z��!����A�T�U�WX�W[�W[�\���q�����Q�G�H�!�$�$�O������ ��:��.��]�^�����S�!�$�$�
�3������ ����Q�B�C�Q�T�T�'�)�+� �-1�I�*�����D��I����A�/�0�1�rCc
��tjjd�}|jdd��tjj|�|_tjj|jj|jj�}|5|dur	|jjd��|�rg}d}tj�}|jjr(tj j"j%�|j&j)�D]�}	|j+|�|j,j/�|kDr|j,j/�}|j,j1�|kr|j,j1�}t2j5t7d�|j8tj:j=|j,j?�����|r.t2jIt7d�djO|��|j&jQ�r�|dk7r�|dk7r�t2jSt7d
�tUjVtY|���tj:j=|��n(|j&j[�jM�d
d
d
�|j}
|jj]|
j^|
j`|
jb�|je�|�tjfji|j�|_5|
jl|jj_6|jnjq�|jS#t$r
|dk7r�Y��wxYw#tj@jB$ru}	|j,jE�|jFdur�t2jId	|	�|jK|j8�|jM�Yd
}	~	��3d
}	~	wwxYw#1swY���xYw)z'Prepare the Sack and the Goal objects. �
sack setupT�r��goalF�r]�autor�%s: using metadata from %s.z	Error: %sN�Ignoring repositories: %s�, z-Last metadata expiration check: %s ago on %s.)�seconds)9rr'�Timer�resetr��_build_sackr�lock�build_metadata_lockr@r��exit_on_lockr��IOError�time�gpgkey_dns_verification�dnssec�RpmImportedKeys�check_imported_keys_validityr�r�rqre�getTimestamp�getAgerhrir	rkr��normalize_time�getMaxTimestamprlrmr�skip_if_unavailabler�r��disabler�r�r��datetime�	timedelta�intr��
_configure�installonlypkgs�installonly_limit�allow_vendor_changer�r�Goalr�protect_running_kernelr2�run_sack)r?r�r�rr�error_repos�mts�ager�rpr@s           rArzBase.fill_sack�s1�����!�!�,�/���
�
��4�
�(��X�X�)�)�$�/��
��x�x�+�+�D�I�I�,>�,>��	�	�@V�@V�W��
��u�,���J�J�/�/�E�/�B�$� �����i�i�k���9�9�4�4��J�J�.�.�K�K�M����0�0�2�A�$��.�.�q�1��7�7�/�/�1�C�7�"#�'�'�"6�"6�"8�C��7�7�>�>�+�c�1�"#�'�'�.�.�"2�C����Q�'D�%E�q�t�t�%(�X�X�%<�%<�)*���)@�)@�)B�&D�E�3�"��N�N��5�6��	�	�+�8N�P��:�:�*�*�,��a�x�C�1�H����A�&U�$V�$,�$6�$6�s�3�x�$H�$'�H�H�$;�$;�C�$@�B��
�
��� �(�(�*�U�V�y�y���
�
���d�2�2�D�4J�4J�D�Ld�Ld�e��%�%�'�
���X�X�]�]�4�:�:�.��
�,0�,G�,G��
�
�)��
�
��� ��z�z���Y��'�6�1��2���(�>�>�3�3�$������(��0�0�E�9�!����{�A�6�#�*�*�1�4�4�0��	�	����
$��5�T�s^�!Q1�'O�A6Q1�:CO�CQ1�O�Q1�O�Q1�Q.�9A*Q)�#Q1�)Q.�.Q1�1Q;c
��tjjd�}|jdd��tjj|�|_tjj|jj|jj�}|5|dur	|jjd��g}|jjr(tjj j#�|j$j'�D]�}	|j(j+dd��t-|j.d��}d	|jj0vrd|d
<|j2rd|d<|jj4|j(fi|��t6j9t;d�|j<tj>jA|j(jC�����|r.t6jWt;d�djY|��ddd�|j}|jj[|j\|j^|j`�|jc�|�tjdjg|j�|_4|jj|jh_5|jljo�|jS#t$r
|dk7r�Y��_wxYw#tDtFjHf$r�}|jJdurBtjLjOt;d
�jQ|j<|���t6j9t;d
�jQ|j<|��|jS|j<�|jU�Yd}~���d}~wwxYw#1swY���xYw)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.
        r
TrFr
r)�throwExcept�
ignoreMissingrWrZr[r\rr^Nrr)8rr'rrr�rrrrr@r�rr�rrrrrr�r�re�	loadCacher`rarbrcrdrhrir	rkr�r!r"�RuntimeErrorrfrgr#rlrmrjr�r$r�r�r(r)r*r+r�rr,rr-r2r.)	r?r�rrr/rnrorpr@s	         rA�fill_sack_from_repos_in_cachez"Base.fill_sack_from_repos_in_cache�s	�����!�!�,�/���
�
��4�
�(��X�X�)�)�$�/��
��x�x�+�+�D�I�I�,>�,>��	�	�@V�@V�W��
��u�,���J�J�/�/�E�/�B�
�K��y�y�0�0��
�
�*�*�G�G�I��
�
�/�/�1��#��J�J�(�(�T��(�N�#'�D�M�M�8<�$>�L�"�d�i�i�&G�&G�G�9=��%5�6��/�/�59��\�2�(�D�J�J�(�(����D�|�D��L�L��#@�!A�4�7�7�!$���!8�!8�%)�Z�Z�%?�%?�%A�"C�D�2�.�����1�2�D�I�I�k�4J�L�M�R�y�y���
�
���d�2�2�D�4J�4J�D�Ld�Ld�e��%�%�'�
���X�X�]�]�4�:�:�.��
�,0�,G�,G��
�
�)��
�
��� ��z�z���U��'�6�1��2���.%�f�&6�&6�7�#��/�/�5�8�!�n�n�6�6��=�>�E�E�d�g�g�q�Q�S�S����Q�'F�%G�%N�%N�t�w�w�XY�%Z�[��&�&�t�w�w�/��L�L�N�N��#��;�T�s]�!P�'L�AP�!C(L&�	2P�L#�P�"L#�#P�&O=�?B3O8�2P�8O=�=P�P
c���tjj|jj�|_|jjs�|j|j�|jru|jj|j
j��|j
j�|jrK|j|j�n/|j
jj|j�|j
jret j#t%d��t j#t%d�dj'tj(j*���|j,�|j.j1�|j3�|j5�d|_	y)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)rr��TempfilePersistorr@r�r5�	keepcache�_clean_packagesr"r3r#rR�get_saved_tempfilesr�r4�tempfiles_to_addrhr�r	rjr��	MAIN_PROGr �historyrKr��_closeRpmDBrGs rA�_finalize_basezBase._finalize_base�se��#&�=�=�#B�#B��I�I���$ �� ��y�y�"�"�� � ����1��"�"��%�%�,�,��,�,�@�@�B�D��(�(�.�.�0��*�*��(�(��)>�)>�?��(�(�9�9�@�@��)�)�+��#�#�4�4��K�K��C�D�
E��K�K��"�#�$;�$B�$B����HZ�HZ�$B�$[�
]��=�=�$��L�L��� ��#�#�%�����#��rCc���|jrytjtjj
d�d|_|j
�|jddd��d|_y)ztClose all potential handles and clean cache.

        Typically the handles are to data sources and sinks.

        NzCleaning up.T)r�r�r)	rrh�logrr'�DDEBUGrCrr2rGs rArKz
Base.closesR���<�<���
�
�3�;�;�%�%�~�6���������
�
��D�t�
�4���
rCc�0�tjjj|j|�}|D]}	|jj|�� y#tjj$r}tj|�Yd}~�Yd}~wwxYw)z?Read repositories from the main conf file and from .repo files.N)
rr@�read�
RepoReaderr��addrl�ConfigErrorrhr�)r?�opts�readerrnrps     rA�read_all_reposzBase.read_all_repos,sl�������)�)�$�)�)�T�:���D�
"��
�
���t�$����>�>�-�-�
"����q�!�!��
"�s�A�B�6B�Bc�v�|rd|_|r#tjj�|_|r�d|_|j�Stjj|j�|_|jj|j
_	|jr&|jr|jj�|j�|jj�tjj!�|_d|_g|_|r|rt)j*�yyy)z1Make the Base object forget about various things.N)rrr*r+r,rrr,r@r-r��rollbackr rArKrrrrr6�gc�collect)r?r�r�rs    rArz
Base.reset7s�����D�J���,�,�/�/�1�D�K���D�J��z�z�%� �X�X�]�]�4�:�:�6��
�48�I�I�4T�4T��
�
�1��z�z�d�3�3��%�%�.�.�0��}�}�(����"�"�$� #�	�	� :� :� <�D�� $�D��(*��%��D�N
�J�J�L�O�4rCc��|`y)z6Closes down the instances of rpmdb that could be open.N)�_tsrGs rArBzBase._closeRpmDBts���HrC)�	noscripts�
notriggers�nodocs�test�justdb�
nocontexts�nocrypto�deploops�RPMTRANS_FLAG_NOCAPS�nocapsr[c��|jSrE)rrGs rArz	Base.goal�s���z�z�rCc���|j�|jStjjj	|j
j�|_|jjd�|j
jD]�}|jj|�}|� tjtd�|��@|jj|�|jj|�}|��y|jj!|���|j
j"s)|j$j'tj(�|j
j*r)|j$j'tj,�t/j0t2j4|j$d�}|jj7|�|jS)zMSet up the RPM transaction set that will be used
           for all the work.rz!Invalid tsflag in config file: %s)rrr-r;�TransactionWrapperr@ry�setFlags�tsflags�_TS_FLAGS_TO_RPM�getrh�criticalr	�	addTsFlag�_TS_VSFLAGS_TO_RPM�pushVSFlags�diskspacecheckr/rJ�RPMPROB_FILTER_DISKSPACE�
ignorearch�RPMPROB_FILTER_IGNOREARCH�	functools�reduce�operator�or_�
setProbFilter)r?�flag�rpm_flag�vs_flag�
probfilters     rArTzBase._ts�sd���=�=�$��=�=� ����+�+�>�>��I�I�!�!�#��
��
�
���q�!��I�I�%�%�D��,�,�0�0��6�H�������"E� F��M���M�M�#�#�H�-��-�-�1�1�$�7�G��"��
�
�)�)�'�2�&��y�y�'�'�� � �$�$�S�%A�%A�B��9�9���� � �$�$�S�%B�%B�C��%�%�h�l�l�D�4H�4H�!�L�
��
�
�#�#�J�/��}�}�rCc�d�|j�y|jj�|`d|_y)z"Releases the RPM transaction set. N)rrKrGs rArTzBase._ts�s-���=�=� ���
�
�����M���
rCc���tjjd�}tjj	�|_tjtjjd�|jj�D�]Q}|js�|js�|jj�}|s�;tjtjjd|j�t j"j%t j"j'|�d�}t j"j%|d�}d}	t j"j)|�st!j*|d��t-j.||d	�
�	|j
j=|�|s��B|jE���T|r=|j
jFjI|jJjLd
g�|�|j
S#t0tj2j4f$r;t7j8�}|j:}t-j.||d�
�Y��wxYw#tj2j>$r7}tAd�}	tjC|	|j|�Yd}~��d}~wwxYw)z6Create the groups object to access the comps metadata.z
loading compszGetting group metadataz%Adding group file from repository: %s�genz
groups.xmlNi�)�modeT)�dest�check_timestampsFz1Failed to add groups file for repository: %s - %s�basearch)'rr'rr�CompsrrhrErFr�r��enablegroupsr�re�
getCompsFnrk�os�pathr��dirname�exists�makedirsr�
decompress�PermissionErrorrl�	MiscError�tempfile�NamedTemporaryFile�name�_add_from_xml_filename�
CompsErrorr	rfrK�_ir�rrw)
r?r�rrn�comps_fn�gen_dir�gen_file�	temp_filerprs
          rAr�zBase.read_comps�s�����!�!�/�2���i�i�o�o�'����
�
�3�;�;�%�%�'?�@��J�J�+�+�-�D��$�$���=�=���z�z�,�,�.�H����J�J�s�{�{�)�)�>����
I��g�g�l�l�2�7�7�?�?�8�#<�e�D�G��w�w�|�|�G�\�:�H��I�
Q��w�w�~�~�g�.��K�K��e�4�����x�$�O�

1����2�2�8�<�����!�9.�<��K�K�N�N�&�&����)�)�*�5�6�
8�
���{�{���!$�S�^�^�%=�%=�>�
Q�$�7�7�9�	�$�>�>������x�%�P�
Q���>�>�,�,�
1��K�L������T�W�W�a�0�0��
1�s,�AH2�.J�2AJ�J�K'�0,K"�"K'c��|j�<|jj}t|jj|��|_|jS)zeauto create the history object that to access/append the transaction
           history information. )rs)r r@rsr
r�)r?rss  rA�_getHistoryzBase._getHistory�s?���=�=� ����-�-�J�)�$�)�)�*>�*>�:�V�D�M��}�}�rCc�"�|j�SrE)r�rGs rA�<lambda>z
Base.<lambda>�s
���)9�)9�);rCc��t|d|�S�Nr ��setattrr�s  rAr�z
Base.<lambda>�s�����U�14rCc��t|dd�Sr�r�rGs rAr�z
Base.<lambda>�s
����z�4�)HrCzDNF SWDB Interface Object)�fget�fset�fdel�docc�
���jj}t|j��}�j	�}|j�|j
�j�}|j�D]f}|j|�}|d}�jj|d��jj|d�|j|||dd��h|j�D]�}�jj|d�|j|�}t|�}	g}
|D]4}t|�|	k(r|
jd|��$|
j|��6|
d}|j!|||
dd���|j#�D�]}�jj|d�|j|�}|D�
cgc]"}
|
|vs|
j$|j$k(s�!|
��$}}
|j'|�}||vr-|j)|j$��r|j'|�}|D]9}|j'|�}t*j,j/||�dk(s�8|}�;|j1|||��fd	�}t2j4j7||���|j9�D�]}|j|�}d}|D]}
|
j$|j$k(s�|
}n|�|j;d�}n|j=|�|D�
cgc]"}
|
|vs|
j$|j$k(s�!|
��$}}
�fd
�}t2j4j7||�||vr|j1||�n/|j?|||��jj|d��jj|d���|jA�}|�r
�jBjEtFjH�
�j
�}|jK|��|j�|D]�}|j)|j$|jL��}|rA|d}|j'|��jjO||j'|���jj|d�|j'|�}|jQ||���|Scc}
wcc}
w)Nr�dd�dr�r�r��r����c�<���jj|d�S�N�od�r&�	pkg_added��pkgr?s �rAr�z(Base._goal2transaction.<locals>.<lambda>����T�.�.�8�8��d�CrCc�<���jj|d�Sr�r�r�s �rAr�z(Base._goal2transaction.<locals>.<lambda>0r�rC�ud�u��flags)�pkg__neq�r�r�rp))rAr-r!�list_obsoleted�_get_installonly_queryr��	installed�list_downgrades�obsoleted_by_packager&r��
add_downgrade�list_reinstalls�str�insertr��
add_reinstall�
list_installsr��
get_reason�filterr:r;�TransactionItemReasonCompare�add_installrr��mapall�
list_upgrades�pop�remove�add_upgrade�
list_erasuresr�r�rf�IGNORE_EXCLUDESr�r��
set_reason�	add_erase)r?r�ts�
all_obsoleted�installonly_query�installonly_query_installedr��obs�
downgraded�	nevra_pkg�	obsoletes�obs_pkg�reinstalledr��reason�obsolete�reason_obsolete�cb�upgraded�erasures�remaining_installed_query�tmp_remaining_installed_query�	remainings`                      rA�_goal2transactionzBase._goal2transaction�sv���
�\�\�
�
���D�/�/�1�2�
� �7�7�9�����!�&7�&A�&A�&C�&I�&I�&K�#��'�'�)�C��+�+�C�0�C��Q��J����'�'�
�D�9����'�'��S�1����S�*�c�!�"�g�6�*��'�'�)�C����'�'��S�1��+�+�C�0�C��C��I��I����w�<�9�,��$�$�Q��0��$�$�W�-�	�
$�A�,�K����S�+�y���}�=�*��%�%�'�C����'�'��S�1��+�+�C�0�C�"�N�c��Q�-�%7�1�6�6�S�X�X�;M�1�c�C�N��_�_�S�)�F�
�'�'�,G�,N�,N�TW�T\�T\�,N�,]����s�+�� ��"$�-�-��"9���%�%�B�B�6�?�[�_a�a�,�F� �

�N�N�3��V�,�C�B��H�H�O�O�B��$�1(�2�%�%�'�C��+�+�C�0�C��H����6�6�S�X�X�%� �H��	�
���7�7�1�:���
�
�8�$�"�N�c��Q�-�%7�1�6�6�S�X�X�;M�1�c�C�N�C�B��H�H�O�O�B��$��'�'����s�C�(����s�H�c�2��!�!�+�+�H�d�;����'�'��S�1�3(�4�%�%�'���(,�	�	���f�>T�>T��(U�(_�(_�(a�%�%�-�-�x�-�@�%�+�+�-���0I�0P�0P�VY�V^�V^�eh�em�em�0P�0n�-�0� =�a� @�I��M�M�)�,��L�L�+�+�I�r�}�}�Y�7O�P��!�!�+�+�C��5�����-�����S�&�)� ��	��wO��FOs�"S:�3S:�("S?�S?c��|j�}|j�}|j�j�}g}g}|D]2}||vr|j||d��|j||��4||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�	availabler�)r?�q�inst�
inst_per_arch�avail_per_arch�avail_l�inst_l�nas        rA�_query_matches_installedzBase._query_matches_installedHs}���{�{�}���
�
��
�����/�/�1������ �B��]�"��
�
�m�B�/��2�3����~�b�1�2�	!�
�w��rCc��|jj�j�j|j	���}t|�S)z� See if sltr matches a patches that is (in older version or different
            architecture perhaps) already installed.
        �r�)r�r�r�r��matches�list)r?�sltrr�s   rA�_sltr_matches_installedzBase._sltr_matches_installed\s;���y�y��� �*�*�,�4�4�����4�H���D�z�rCc�f���fd��jj�j�D�S)z5Get iterator over the packages installed by the user.c3�X�K�|]!}�jj|�r|���#y�wrE)rA�user_installed)�.0r�r?s  �rA�	<genexpr>z*Base.iter_userinstalled.<locals>.<genexpr>es+�����5�<���<�<�.�.�s�3��<�s�'*)r�r�r�rGs`rA�iter_userinstalledzBase.iter_userinstalledcs(���5�t�y�y���0�:�:�<�5�	5rCc���|j||jj|jj��}|jjr|jd�|S)N)�allow_uninstall�
force_best�ignore_weak_depsz./debugdata/rpms)�runr@�best�install_weak_depsr��write_debugdata)r?r�
allow_erasing�rets    rA�_run_hawkey_goalzBase._run_hawkey_goalhsV���h�h�)�d�i�i�n�n�"&�)�)�"=�"=�=��@���9�9�!�!�� � �!3�4��
rCc��|jj�|jjr|jj�|jjD]k}t
jj|�}|j|jddd��}|j�}|jj|��my)z�
        Add exclude_from_weak from configuration and autodetect unmet weak deps exclude them from candidates to satisfy
        weak dependencies
        TFr�N)r�reset_exclude_from_weakr@�exclude_from_weak_autodetect�exclude_from_weakrr�r�r�r�r��add_exclude_from_weak)r?�weak_excluder�r�s    rA�_set_excludes_from_weak_to_goalz$Base._set_excludes_from_weak_to_goalps���
	
�
�
�*�*�,��9�9�1�1��J�J�3�3�5� �I�I�7�7�L��;�;�&�&�|�4�D��'�'��	�	�d�RW�hm�'�n�E��O�O�%�E��J�J�,�,�U�3�	8rCc�4�d}|j�tjjd�}|jj�|j}|j�rC|j|jj�j�|j�n7|jjs!|j�}|j!|�|j#|jj�j%|jj&���|j)�|j+||�sv|jj,dk\r|j/�tj0j3|j5��}tj6j9|�}n|j;|�|_|jj?�|�|j<duxrtA|j<�dkD}|r;|j<jC�}|rtj6jE|�}|�|�|jFjI�|jjK�}||jjM�z
}||jjO�z
}||jjQ�z
}|jjS|jT|�|S)zBuild the transaction set.N�depsolver��r)+�_finalize_comps_transrr'rr&�startr�
req_has_erase�push_userinstalledr�r�r�rAr@�upgrade_group_objects_upgrade�_build_comps_solver�'_exclude_packages_from_installed_groups�
add_protectedr��protected_packagesrr�
debuglevel�
log_decisionsr��_format_resolve_problems�
problem_rulesrl�
DepsolveErrorr�r�endr��_rpm_limitationsr�r2�run_resolvedr�r�r�r��set_modules_enabled_by_pkgsetr�)	r?r��excrr�solverr�got_transaction�new_pkgss	         rA�resolvezBase.resolvesa�����"�"�$����!�!�*�-�������!��z�z�������#�#�D�I�I�O�O�$5�$?�$?�$A�$(�L�L�
2����8�8��-�-�/�F��:�:�4�@����4�9�9�?�?�,�4�4����-�-�5�/�	0�	
�,�,�.��$�$�T�=�9��y�y�#�#�q�(��"�"�$��(�(�3�3�D�4F�4F�4H�I�C��.�.�.�.�s�3�C� $� 6� 6�t� <�D��������
���+�+�4�7�'���!�!�"�Q�&�	���#�#�4�4�6�C���n�n�*�*�3�/���?��I��
�
�"�"�$��:�:�+�+�-���D�J�J�,�,�.�.���D�J�J�.�.�0�0���D�J�J�.�.�0�0���	�	�/�/��0E�0E�x�P��rCc���t|t�s|g}tjjj�gt
|�z}|j�s�|jj�|jj�|j�r|jjs|jjr�d}t|d�r(|jrdj!|j�}n3t|d�r'|j"rdj!|j"�}|j$j'�}|�|j(j+�}n|j,}|j$j/|gg||j0��|j$j3|�|j4j7�|j4j9�d|_yd}t<j?tAd��tjBjE|jFjH|jFjJ�}|5|jjM|j(�|jO�}|r[tAd�}t<jQ|�|D]}t<jQ|��tjRjU|��t<j?tAd��tjVjYd	�}	t<j?tAd
��|j(j[�|j(j]�tjjj_|d��}
|j(ja|
�}tc|�dkDr�|
je�D]/}t<jgtAd
�ji|���1tAd�dz}|D]}
|dtk|
�zz
}�|jm|�}|r|d|zz
}tjRjo|��~
t<j?tAd��|j(jqtrjt�r
	ddd�y|	�|jj�|jj�tjVjYd�}	tjjj_||��}|jFjvdkr|jxD]	}d|_=�|j4j7�t<j?tAd��|j}|��}ddd�	�|j4j|j�|j4j9�d�}tj�j�||j|�D]}t<j�|��|S#1swY��xYw)N�args� �cmds)�cmdline�persistenceTzRunning transaction checkz%Error: transaction check vs depsolve:zTransaction check succeeded.ztransaction testzRunning transaction test)rXr�RPM: {}zTransaction test error:�
z  %s
zTransaction test succeeded.r;)�displays�FzRunning transaction)r�c	�l�g}|D],}|jdj|t|����.|S)Nz{}: {})r�rjr�)�action�tsis�msgs�tsis    rA�
_pto_callbackz*Base.do_transaction.<locals>._pto_callbacks1���D������H�O�O�F�C��H�=�>���KrC)C�
isinstancerr�yum�rpmtrans�LoggingTransactionDisplayr�r;r�r��updateFailSafeDatar �group�env�hasattrr$r�r&rA�lastrT�dbCookie�end_rpmdb_version�begr=rr2�run_pre_transaction�run_transactionr3rhr�r	r�build_rpmdb_lockr@r�r�_populate_rpm_ts�_run_rpm_check�errorrl�TransactionCheckErrorr'r�order�clean�RPMTransactionrXr��messagesrfrjr�_trans_error_summaryr��isTsFlagSetr-�RPMTRANS_FLAG_TESTrr+r>�_run_transaction�unload_removed_pluginsr��_post_transaction_outputri)r?�displayr'�old�
rpmdb_version�tidrr0rr�testcb�tserrors�	errstring�descr�summaryr��display_r2s                  rA�do_transactionzBase.do_transaction�s����'�8�,��i�G�
�W�W�
�
�
7�
7�
9�:�T�'�]�J�	�����!�!�&�&�(��!�!�4�4�6��}�}�$�-�-�"5�"5����9J�9J����4��(�T�Y�Y�!�h�h�t�y�y�1�G��T�6�*�t�y�y�!�h�h�t�y�y�1�G��l�l�'�'�)���;�$(�H�H�$5�$5�$7�M�$'�$9�$9�M���� � ���B��UY�Uf�Uf� �g���� � ��/��M�M�-�-�/��M�M�)�)�+�"&�D��������A�1�2�3��x�x�(�(����)=�)=�)-���)?�)?�A��
����-�-�d�h�h�7��&�&�(�D���?�@�����S�!��C��L�L��%� ��n�n�:�:�3�?�?��K�K��8�9�:��K�K�%�%�&8�9�E��K�K��4�5�6��H�H�N�N���H�H�N�N���W�W�%�%�4�4�T��4�E�F��x�x�}�}�V�,�H��8�}�q� �!�?�?�,�C��O�O�A�i�L�$7�$7��$<�=�-��7�8�4�?�	�%�E���C��J�!6�6�I�&��3�3�I�>�������/�I��n�n�*�*�9�5�5���K�K��7�8�9��x�x�#�#�C�$:�$:�;��O�T�P
�G�
�!�!�&�&�(��!�!�4�4�6��K�K�%�%�m�4�E����!�!�0�0���0�H�B��y�y�#�#�a�'� "���H�&+�H�O�!,�
�M�M�-�-�/��K�K��/�0�1��'�'�2�'�.�C�u�v	���
�
�,�,�T�-=�-=�>��
�
�%�%�'�	�
�8�8�4�4�T�4�;K�;K�]�[�C��L�L���\��
�Q�T�s�I!Y�DY�Y%c	�z�d}tjd�}i}|j|�D]�}|jd�dk(rt	|jd��n/tjt	|jd��dz�}|jd�|vr|||jd�<||jd�|ks��|||jd�<��|rD|td�d	zz
}|D].}|d
tdd||�j|||�zd	zz
}�0|sytd
�dz|z}|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�finditerr8r'�math�ceilr	r
rj)r?rVrX�p�disk�m�
size_in_mb�ks        rArJzBase._trans_error_summary&s@�����J�J�S�T�������I�&�A�,-�G�G�A�J�#�,=��Q�W�W�Q�Z��4�9�9��A�G�G�A�J��&�(�D*�J��w�w�q�z��%�#-��Q�W�W�Q�Z� ��A�G�G�A�J��*�,�#-��Q�W�W�Q�Z� �
'���q�-�.��5�5�G����5�2�M�M���G�$�$�V�D��G�Q�/�0�37�7�7������O�$�':�:�W�D���rCc��|jjxr*|jjtj
�SrE)r@�history_recordrTrKr-rLrGs rA�_record_historyzBase._record_historyHs4���y�y�'�'�=����$�$�S�%;�%;�<�<�	=rCc�
�d}|j��r�t|jj�}|jj�j
�}|j|��j�}|jj�}|jj�}|�|j}|�||k7rFtjt!d�j#t$j&j(���d}t+|d�r(|j,rdj/|j,�}n3t+|d�r'|j0rdj/|j0�}|jj2r|jj2nd}	|jj5||g||	|j6�	�}|jj8r.t;j<d
�}
|
r	t;j<|
�tj?t$j@jBd�|jj|jDd�}tj?t$j@jBd�|jj8r	t;j<
�t$j&jG|j|jH�|��nktK|�d
k(r�|jD�cgc]}|jM�s�|��}
}|
�s0|jO�D]/}tjQt!d
�j#|���1t!d�}t$jRjU|��tjQt!d��|D]#}tjQtW|d
���%|j�rD|jjYtZj\�s|jj_�t!d�}t$jRjU|��dD]1}t+||�s�ta||�}	tcjd|��3tk|jHjl�|_7|jjYtZj\�s|jq�|S#d
}
Y���xYw#Y��GxYwcc}w#tfthf$r$t!d�}tjQ||�Y��wxYw)zh
        Perform the RPM transaction.

        :return: history database transaction ID or None
        Nr�z RPMDB altered outside of {prog}.r9r$r%r&r\)r'�commentr(rzRPM transaction start.zRPM transaction over.r)zCould not run transaction.zTransaction couldn't start:)�	ts_all_fn�
ts_done_fnz$Failed to remove transaction file %s)9rkr�r@�history_record_packagesr�r�r�r�r�rTr<rAr;r=rhrir	rjrr��MAIN_PROG_UPPERr:r$r�r&rmr>r=�
reset_nicer��nicerEr'rFr$�_sync_rpm_trans_with_swdbrr��FailedrIrfrlr�rrKr-rLr�getattrr�unlink_fr�OSError�bool�install_setr4�_verify_transaction)r?r�rS�using_pkgs_pats�installed_query�
using_pkgs�rpmdbv�lastdbvr'rm�onice�errors�el�failedrrpr��fns                  rArMzBase._run_transactionLs��������!�"�4�9�9�#D�#D�E�O�"�i�i�o�o�/�9�9�;�O�(�/�/�_�/�E�I�I�K�J��X�X�&�&�(�F��l�l�'�'�)�G��"�!�3�3����&�G�"3����Q�A�B�I�I����1�1�J�3�4��G��t�V�$�����(�(�4�9�9�-����v�&�4�9�9��(�(�4�9�9�-��+/�9�9�+<�+<�d�i�i�'�'�"�G��,�,�"�"�6�:�r�7�+2��@Q�@Q�#�S�C��9�9����G�G�A�J�E����G�G�U�F�O�	�
�
�3�;�;�%�%�'?�@������b�k�k�2�.���
�
�3�;�;�%�%�'>�?��9�9���
������	���*�*�4�8�8�T�5F�5F�G��>��
��[�A�
�$(�8�8�;�8�R�r�y�y�{�b�8�F�;���;�;�=�C��O�O�A�i�L�$7�$7��$<�=�)��4�5���n�n�*�*�3�/�/��O�O�A�;�<�=�������A�a�D�	�*���#�#�%�d�h�h�.B�.B�3�CY�CY�.Z���� � ��(��0�1�C��.�.�&�&�s�+�+�,�A��r�1�~��R��^��-��M�M�"�%�	-�#'�t�'8�'8�'D�'D�"E����x�x�#�#�C�$:�$:�;��$�$�&��
��q��E��
���<��( ��)�-��B�C�C��O�O�C��,�-�s6�:S6�)T�T�(T�T
�6S=�T�
0U�?Uc�b���|jD�cgc]+}|jtjjk7r|��-}}t	|����fd�}t
jjd�}d}t
jj|�}|j�j�}t|D�	cgc]}	|	j��c}	�}
|jjD][}|j!�}|j#�D]6}
|
j%�|
vs�|
j'd�|
j)��8�]|D]}||j*|�}�|j,j/�}|jj1|�|�d|_ycc}wcc}	w)Nc�*��|dz
}��
�||��|S�Nr�rF)r��count�total�
verify_pkg_cbs  ��rA�display_bannerz0Base._verify_transaction.<locals>.display_banner�s#����Q�J�E��(��c�5�%�0��LrCzverify transactionrT)r;r.r:�#TransactionItemAction_REASON_CHANGEr�rr'rr��
rpmdb_sackr�r�r!r�rAr8�getCompsGroupItem�getPackages�getName�setInstalledr�r�rTr<rr3)r?r�r1�transaction_itemsr�rr�r�r�r��names�ti�grdrr�s `             @rAr{zBase._verify_transaction�sk����+�+�U�+�C��z�z�V�/�/�S�S�S�
�+�	�U��%�&��	����!�!�"6�7�����X�X�(�(��.�
�
����(�(�*���Q�'�Q��Q�V�V�Q�'�(���,�,�$�$�B��$�$�&�A��]�]�_���9�9�;�%�'��N�N�4�(��F�F�H�%�%�%�C�"�3�7�7�E�2�E�%����"�"�$�������� �
��"����OU��$(s�0F'�;F,c
�B��tjj|jj|jj
�}|5t
j�}td�|D��}t|D�	cgc])}	t|	tjj�s�(|	��+c}	�}
|jjjdk(r|jt|�||
��n|jt|�|�tjj!|||���j#�r-tj$j'�j#���t�fd�|D��}tjj)d|�j*�}|jj,}
|
dk(}�j*�rl|s|
dkD�rd|
dkDr|
dz}
t/d�}t0j3|��j*D�cgc]}|��}}|D�cgc];}tjj5||tjj6���=c}}td	�|D��}|jt|�|�tjj!|||���j#�r-tj$j'�j#���|t�fd
�|D��z
}tjj)||i�}�j*r|r��]|
dkDr��d�j*rHtj$j&j9�j*�}t0j3|�ddd�|�	|�\}}||k7rV||krt/d�}d||zdzz
}n||kDrt/d
�}d||zdzz
}t0j3|dz|dz�yycc}	wcc}wcc}w#1swY��xYw)Nc3�4K�|]}|j���y�wrE��
download_size�r��ploads  rAr�z1Base._download_remote_payloads.<locals>.<genexpr>�s����!L�8�%�%�"5�"5�8����)�total_drpmsc3�@�K�|]}�j|����y�wrE��_bandwidth_used�r�r�r�s  �rAr�z1Base._download_remote_payloads.<locals>.<genexpr>�s$�����5�+3�%�%�4�4�U�;�+3���)rrrr�z,Some packages were not downloaded. Retrying.c3�4K�|]}|j���y�wrEr�r�s  rAr�z1Base._download_remote_payloads.<locals>.<genexpr>�s����&=�3;�%�',�&9�&9�3;�r�c3�@�K�|]}�j|����y�wrEr�r�s  �rAr�z1Base._download_remote_payloads.<locals>.<genexpr>s�����L�8�%��.�.�u�5�8�r�z?Delta RPMs reduced %.1f MB of updates to %.1f MB (%.1f%% saved)�dzIFailed Delta RPMs increased %.1f MB of updates to %.1f MB (%.1f%% wasted)i)rr�build_download_lockr@r�rr�sumr�r3�drpm�DeltaPayloadr
�__code__�co_argcountrn�_download_payloads�_irrecoverablerl�
DownloadError�_update_saving�_recoverable�retriesr	rhr��_pkg2payload�
RPMPayload�
errmap2str)r?�payloadsr��progress�callback_total�	fail_fastr�beg_download�est_remote_size�payload�
total_drpm�remote_size�savingr��foreverrr��remaining_pkgs�real�full�percentr�s                     @rA�_download_remote_payloadszBase._download_remote_payloads�s�����x�x�+�+�D�I�I�,>�,>��	�	�@V�@V�W��
��9�9�;�L�!�!L�8�!L�L�O��(0�_��W�J�w����H]�H]�4^���_�a�J��~�~�&�&�2�2�a�7����s�8�}�o�:��V����s�8�}�o�>��X�X�0�0��4��K�F��$�$�&��n�n�2�2�6�3H�3H�3J�K�K��5�+3�5�5�K��X�X�,�,�V�X�-3�-@�-@�B�F��i�i�'�'�G���l�G��%�%�7�g��k��Q�;��q�L�G��F�G�����C� �17�1D�1D�!E�1D�#�#�1D��!E�!/�0� .���X�X�*�*�3��#�(�(�:M�:M�N� .�0��#&�&=�3;�&=�#=�����s�8�}�o�>����4�4�X�t�Y�O���(�(�*��.�.�6�6�v�7L�7L�7N�O�O���L�8�L�L�M�����0�0���2�F��+�%�%�7�g��k�.�"�"��n�n�2�2�=�=��'�'�)�����C� �a�d�%��;��5����t��4�<��d�{��)�*����t��c� 1�1������*�+����t��c� 1�1���K�K��T�I�-�t�i�/?��I���e`��2"F��0�?�T�sL�0P�<)P
�&P
�*E(P�	P�P�!AP�!CP�7P�>AP�P�Pc	�2�|j|�\}}|�r
|�tjj�}tjj|jj�j�||jj�}|j|D�cgc]}|j���c}�|D�cgc]F}tjj|||jtjj ���H}}|j#||||�|jj$r�|D]�}|j&rHt(j*j-|j/�|j0j3d��}	nMt(j*j-|jj4|j0j3d��}	t7j8|	|jj$���yycc}wcc}w)aDownload 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.

        N�/)�_select_remote_pkgsrr$�NullDownloadProgressr��	DeltaInfor�r�r�r@�deltarpm_percentagerU�localPkgrnr��
delta_factoryr�r�rS�baseurlr�r�r��get_local_baseurl�location�lstrip�pkgdir�shutil�copy)
r?�pkglistr�r��remote_pkgs�
local_pkgsr�r�r�r�s
          rA�download_packageszBase.download_packagess���#'�":�":�7�"C���Z�����<�<�<�<�>���8�8�%�%�d�i�i�o�o�&7�&A�&A�&C�&.��	�	�0M�0M�O�D����;� G�;�C�����;� G�H�$/�0�#.�C����-�-�c�8�T�=O�=O�.1�h�h�.A�.A�C�#.�
�0�
�*�*�8�T�8�^�T��9�9���!���;�;�!�w�w�|�|�C�,A�,A�,C�,/�L�L�,?�,?��,D� F�H� "�w�w�|�|�C�H�H�O�O�S�\�\�=P�=P�QT�=U�V�H����H�d�i�i�&7�&7�8�
"���
!H��0s
�"H�AHc���g}|s|S|jj�r(tjj	td���g}|D]�}tjj|�sAd|vr=tjj||j|�}|j|g�	|j|jj|����|j'd��|r4|r2t!td�j)dj+|����|S#t $r1}t"j%|�|j|�Yd}~��d}~wwxYw)NzACannot add local packages, because transaction job already existsz://T)r�zCould not open: {}r%)r�
req_lengthrrlr�r	r�r�r�r��_urlopen_progressr@rUr�r��add_cmdline_packagerrhr�r�rjr�)r?�	path_list�strictr��pkgs�
pkgs_errorr�rps        rA�add_remote_rpmszBase.add_remote_rpms5s#������K��:�:� � �"��.�.�&�&��U�V�X�
X��
��D��7�7�>�>�$�'�E�T�M��x�x�1�1�$��	�	�8�L���#�#�T�F�+�
(����D�I�I�9�9�$�?�@�
�	
�%�%��%�5��&��!�0�1�8�8����*�9M�N�O�O����
�
(����q�!��!�!�$�'�'��
(�s�1*D'�'	E!�0&E�E!c��|jr|jj}d}n3|j|j}|j
}|j}|�r"|jj}tjjj|�}tjjj||j��}tj j#|j��}~|dk(rd}	d}
|	|
fS|dk(r|rd}	nd}	t%d�|z}
|	|
fS|dk(rd}	t%d�|z}
|	|
fS|dk(r|rd}	nd}	d}	t%d�|z}
|	|
fS|d	k(rd}	t%d
�|z}
	
fSd}	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.
        rr\r�r,z"Public key for %s is not installedzProblem opening package %sr^z Public key for %s is not trustedr�zPackage %s is not signed)�
_from_cmdliner@�localpkg_gpgcheckr�r��gpgcheck�gpgkeyryrr-r;�initReadOnlyTransaction�	miscutils�checkSigr�r�r��basenamer	)r?�po�check�	hasgpgkeyrn�rootr��	sigresult�localfn�resultrs           rA�_sig_check_pkgzBase._sig_check_pkgMs�������I�I�/�/�E��I��:�:�b�i�i�(�D��M�M�E� $���O�+�I���9�9�(�(�D����$�$�<�<�T�B�B����)�)�2�2�2�r�{�{�}�E�I��g�g�&�&�r�{�{�}�5�G���A�~�����:�s�{��7�a����F��F��<�=��G��,�s�{��)�a�����4�5��?��$�s�{��!�a����F��F����:�;�g�E���s�{���a�����2�3�g�=���s�{���F��C��s�{�rCc�$�|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��r?r�s  rA�package_signature_checkzBase.package_signature_check�s���"�"�3�'�'rCc�J�|D]p}tjj|�s�#	tj|�t
j
tjjtd�|��ry#t$r"t
jtd�|�Y��wxYw)Nz
%s removedzCannot remove %s)
r�r�r�rrwrhrErr'rFr	rxr�)r?�packagesr�s   rAr=zBase._clean_packages�s{���B��7�7�>�>�"�%��
0��
�
�b�!�
�
�
�3�;�;�-�-��\�?�B�0���
�
����q�!3�4�b�9��
�s�A7�7(B"�!B"c��|�|jj}|�|j|||||�Stj|j||||��}|�t|�dk(r|d�St
||�}tjd�|�S)aRReturn 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_caser�rc�$�|j|�SrE)�merge_lists)�a�bs  rAr�z(Base._do_package_lists.<locals>.<lambda>�s
��Q�]�]�1�-=rC)r@�showdupesfromrepos�
_list_patternrn�partialr��mapro)r?�	pkgnarrow�patternsr�r�r��list_fn�yghss        rA�_do_package_listszBase._do_package_lists�s���4���y�y�3�3�H����%�%��8�X�{�H�F�
F��#�#����	�H�#�h�8����s�8�}��1��4�=� ��7�H�%����� =�t�D�DrCc�����)���fd��)�)fd�}�fd�}tj|��}g}	g}
g}g}g}
g}g}g}g}g}|}�jj�}|�>tj
j
||��}|j�jd��}|dk(�rNi}i}|j�D]>}|||j<|r�|j|jf}||vs	|||kDs�:|||<�@t||j���}	||j��}|s|jd	�
�}|D]�}|r2|j|vr|j!|��%|
j!|��7|j|jf}|j|vr|j!|��o||vs|j#||�r|
j!|���|j!|����n�|dk(r_||�jd	��}
�j%|
d	�
�}
|
jddg��|
j'�j)�}
�nL|dk(r!t||j���}	�n&|dk(�r�|r�||�j�}|j�j+�}|D]�}|j|jf}|j-|g�}|D�cgc]}|j.|j.k(r|��}}t1|�dkDr|j!|��u|
j!|����n^||�j�jd	�
�j+�} |j�j'�j+�}| D]�\}!}"| |!|"fd}|j-|!|"fdg�d}#|#r|j#|#�r|
j!|��M|j3|#�r|j!|��p|j!|����nw|dk(r=||�j5�j6j8�}$|$j)�}�n5|dk(r(|j;�D�cgc]
}�)|�s�|��}}�n|dk(r�|j�}%|�jj��j=|%��}�j%|dd	��}|jddg��g}|D]?}&|&j>}'|jA|%j=|'��D�(cgc]}(|&|(f��c}(��AnT|dk(rO|j�}|s|jd	�
�}||�jC�jDjF�}|	|_|
|_||_$||_%|
|_&||_||_'||_#||_||_(|Scc}wcc}wcc}(w)Nc�F����y�jj|��k(S)z:Test whether given package originates from the repository.T)rArn)�packager�r?s ��rA�is_from_repoz(Base._list_pattern.<locals>.is_from_repo�s&�������<�<�$�$�W�-��9�9rCc����fd�|D�S)�=Filter out the packages which do not originate from the repo.c3�4�K�|]}�|�s�|���y�wrErF)r�rrs  �rAr�z=Base._list_pattern.<locals>.pkgs_from_repo.<locals>.<genexpr>�s�����M�8��|�G�7L�G�8�s�
�rF)r�rs �rA�pkgs_from_repoz*Base._list_pattern.<locals>.pkgs_from_repo�s���M�8�M�MrCc�0����|S|j���S)rr�)r�)r�r�s �rA�query_for_repoz*Base._list_pattern.<locals>.query_for_repo�s��������<�<��<�2�2rC)�iter�r�F)r�r�T��latest_per_arch_by_priority�upgrades)�upgrades_by_priority)�upgrade�src�nosrc��	arch__neqr�r�r�
autoremove�extrasr�)�obsoletes_by_priority)r�r��provides�recent))r�
GenericHolderr�r�rr�r�r�r��pkgtupr�r�r�r�r�r�r��evr_gt�_merge_update_filters�latestr�r�re�evrr��evr_eq�	_unneededrA�swdbrr�r��extend�_recentr@r#�reinstall_available�
old_available�updates�obsoletesTuplesr)*r?r�patternr�r�r�rr�yghr�r�r/r0r1r�r2r#rr�icr�r��dinst�ndinstr��key�availr��installed_dict�	avail_pkg�installed_pkgs�same_ver�available_dictr�r��inst_pkg�autoremove_qr��new�obsoleted_reldepsrQrs*`    `                                   @rArzBase._list_pattern�s����	:�	N�	3�� � �i�0���	��	� ���
����	��������
����I�I�O�O������;�;�&�&�w�B�&�?�D��#�#�D�I�I�U�#�C�A�����E��F��k�k�m��#%��b�i�i� ����w�w����(���f�$��V�C�[�(8�"$�F�3�K�
$��^�E�L�L�N�;�<�I�"�1�;�;�=�1�E���
�
�$�
�G������z�z�U�*�+�2�2�3�7�!�(�(��-��8�8�S�X�X�.�C��z�z�U�*�+�2�2�3�7��F�*�c�j�j����.E�!�(�(��-�%�,�,�S�1�� �*�
$�$�Q�'�/�/�T�/�J�G��0�0��$�0�G�G��O�O�u�g�&6�O�7��n�n�&�*�*�,�G��+�
%��^�A�K�K�M�:�;�I��+�
%��&�q�)�3�3�5��!"����!7�!7�!9��!&�I�$�>�>�9�>�>�:�C�%3�%7�%7��R�%@�N�/=� =�~��#&�7�7�i�m�m�#;�!$�~�H� =��8�}�q�(�+�2�2�9�=�!�(�(��3�"'�"0��"� �y�{�7�7�t�7�#L�X�X�Z��!"����!5�!5�!7�!@�!@�!B��$2�L�T�4� .��d�|� <�Q� ?�I�-�1�1�4��,���G��J�H�#�y�'7�'7��'A�!�(�(��3�"�)�)�(�3�+�2�2�9�=�%�,�,�Y�7�%3��,�
&�)�!�,�6�6�t�|�|�7H�7H�I�L�%�)�)�+�J��(�
"�%&�X�X�Z�E�Z�c�<��3D�c�Z�F�E��+�
%��;�;�=�D�&��	�	���!�#�#)�6��6�#E�
��2�2�9�e�UY�2�Z�I������(8��9� �O� ��$'�M�M�!��&�&��[�[�*;�[�<�>�<�%(�c�3�Z�<�>�?�!��(�
"��K�K�M�E���
�
�$�
�G��#�E�*�2�2�4�9�9�3C�3C�D�F�!��
�!��
�"5���)������!��
�-�����
���
�#����
��A =��8F��>s�'"W&�
W+�W+�5W0
c�B�|xj|z
c_t|�SrE)rr�)r?�transs  rA�_add_comps_transzBase._add_comps_transjs�����U�"���5�z�rCc�t�|j�}|sy|j|jjd��}|j	|D�cgc]4}|jj
j
|j�s�3|��6c}��}|j|�}|D]6}|jj|tjj��8|j|�}|j|�}|r9|D]3}|jj||j j"���5yycc}w)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�r�r���
clean_deps)r��_safe_to_removerAr,r�r8�is_removable_pkgr��
differencer�r:r;� TransactionItemReason_DEPENDENCY�intersectionr�eraser@�clean_requirements_on_remove)r?r��
unneeded_pkgsr��unneeded_pkgs_history�pkg_with_dependent_pkgsr��remove_packagess        rA�_remove_if_unneededzBase._remove_if_unneededns�����!�����-�-�d�l�l�.?�.?�e�-�T�
� %���!�Q�E�q�T�\�\�%7�%7�%H�%H����%P��E�Q�!-�!S��"7�"B�"B�=�"Q��+�C��L�L�#�#�C��);�);�)\�)\�]�+�%�2�2�3H�I�
��,�,�]�;���&���
�
� � �����1W�1W� �X�'���Rs�
4D5�?D5c�����j}�jjd}�fd�}�fd�}d�}�jj	�jd��}|jtj|d��f|jtj|d��f|j|f|j|ff}|D�]\}}	|D�]}
d	|
ji}|
jr|jd
|i��jj	�j
di|��j�}|jddg�
�|sN|
j}
|
jr|
d|zz
}
t j#t%d�j'|
����|	|||
�}�j(j*j-|
j������j/|�y)Nr}c���tjj�j�}|j	|���j
j
|��|S)Nr���select)r�selector�Selectorr�r!rr)r��remove_query�	comps_pkgr�r?s    �rA�
trans_upgradez1Base._finalize_comps_trans.<locals>.trans_upgrade�sD����<�<�(�(����3�D��H�H��H���J�J���d��+��rCc�b���jjdk(r�|js�j||��|S|j	�j�}�j
|�tjj�j�}|jdj|j|j����jj||��|Stjj�j�}|jr7|jdj|j|j���n��jj r�|j	�r:|j#�jj%�j'|���}nI|j#�jj%�j'|j)d�����}|j|�	��jj||��|S)
Nr��r�z
({} if {})r!�rY�optional�r�Trr�)r@�multilib_policy�requires�_install_multiarchr�r��_report_already_installedrrZr[r�r!rjr�r�installr�r�r�r�r�)r�r\r]r�r}r�r?s      �rA�
trans_installz1Base._finalize_comps_trans.<locals>.trans_install�s�����y�y�(�(�E�1� �)�)��+�+�E�&�+�A�6 ��1',�o�o�&7�&=�&=�&?�O��2�2�?�C��<�<�0�0����;�D��H�H�l�&9�&9�)�.�.�)�J\�J\�&]�H�^��J�J�&�&�d��Z�&�H�( ��#�|�|�,�,�T�Y�Y�7���%�%��H�H�l�&9�&9�)�.�.�)�J\�J\�&]�H�^��y�y�*�*�!�?�?�,�$)�K�K��	�	���0A�0I�0I�TY�0I�0Z�$[�E�$)�K�K��	�	���0A�0I�0I�*/�,�,�SW�,�*X�1J�1Z�%[�E��H�H��H�'��
�
�"�"�$�V��"�D��rCc�(�|j|�}|SrE)r�)r�r\r]s   rA�trans_removez0Base._finalize_comps_trans.<locals>.trans_remove�s��'�-�-�e�4�L��rCTr�r`Fr�r�rrr�.zNo match for group package "{}"rF)rr@rwr�r�r�rhrnr�install_optrr�r��basearchonlyrRr�rhr�r	rjr�
group_membersrJrU)r?rDr}r^rirkr\�attr_fn�attrr�r]�
query_argsr��package_strings`             rArzBase._finalize_comps_trans�s�����!�!���9�9�*�*�:�6��	 �	 �@	 ��y�y���(�0�0�t�0�<���M�M�9�#4�#4�]�4�#P�Q��%�%�y�'8�'8��u�'U�V��M�M�=�1��L�L�,�/�1��
"�J�T�2�!�	�$�i�n�n�5�
��*�*��%�%�v�x�&8�9�-�D�I�I�O�O�%�-�-�;�
�;�A�A�C���	�	�U�G�$4�	�5��%.�^�^�N� �-�-�&�#��.�8���N�N�1�%F�#G�#N�#N�~�#^�_��!�!�\�9�=���
�
�(�(�,�,�Y�^�^�<�"�"� 	
� � ��.rCc�x���fd�}tjj�j�j|�S)Nc����jj�j�j|��}|sy	�jj
j
|d�S#t$rtjjcYSwxYw)Nr�r)r�r�r�r�rAr-r��AttributeErrorr:r;�TransactionItemReason_UNKNOWN)�pkgnamer�r?s  �rA�	reason_fnz+Base._build_comps_solver.<locals>.reason_fn�sx����	�	���!�+�+�-�5�5�7�5�C�A���
H��|�|�'�'�2�2�1�Q�4�8�8��!�
H��)�)�G�G�G�
H�s�'A&�&#B�B)rr�SolverrAr)r?rys` rArzBase._build_comps_solver�s,���	H��y�y������d�k�k�9�E�ErCc���|j�}t|t�stjj|�}|j
|||xs
t�||�}|sy|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)	rr3r'r:r;�listToCompsPackageType�_environment_installr!rE)r?�env_id�types�excluder��exclude_groupsrrDs        rA�environment_installzBase.environment_install�si���)�)�+���%��%��&�&�=�=�e�D�E��+�+�F�E�7�;K�c�e�V�Uc�d�����$�$�U�+�+rCc�f�|j�}|j|�}|j|�SrE)r�_environment_removerE�r?r~rrDs    rA�environment_removezBase.environment_remove�s3���)�)�+���*�*�6�2���$�$�U�+�+rCc�����fd�}d}|r4|D�cgc]
}||���}}tjj|�}�j�}	t	|t
�stjj|�}|	j||||�}
|
sy|r
|
j}n|
j}tjtd�||��j|
�Scc}w)anInstalls 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���tjj|�r7�jj	�j|��}t
d�|�S|fS)N��
name__globc��|jSrEr�)rds rAr�zABase.group_install.<locals>._pattern_to_pkgname.<locals>.<lambda>s��Q�V�VrC)rr��is_glob_patternr�r�r�r)r3r�r?s  �rA�_pattern_to_pkgnamez/Base.group_install.<locals>._pattern_to_pkgnamesI����x�x�'�'��0��I�I�O�O�%�-�-��-�A���+�Q�/�/��z�!rCNrz#Adding packages from group '%s': %s)�	itertools�chain�
from_iterablerr3r'r:r;r|�_group_installrhrmrhrir	rE)r?�grp_id�	pkg_typesr�r�r��exclude_pkgnamesrd�nested_excludesrrD�instlogs`           rA�
group_installzBase.group_install�s����	"� ���?F�G�w�!�2�1�5�w�O�G�(���<�<�_�M���)�)�+���)�S�)��*�*�A�A�)�L�I��%�%�f�i�9I�6�R������m�m�G��'�'�G����Q�<�=��W�	&��$�$�U�+�+��#Hs�C!c
�~�t|j|jtjtjztj
�}d}d}|D]n}		|j
|	�}
|
jD]!}|r||vs�
||j||||��z
}�#|
jD]}
||j!|
||||��z
}��p|s*|r(tjj#t%d���|S#tjj$r*}tjt|��d}Yd}~��d}~wwxYw)NrTF)r�r�)r�r�r�zNothing to do.)rrrA�ENVIRONMENTS�GROUPS�	AVAILABLErerrlr�rhrDr�groupsr��environmentsr�r�r	)r?rrr�r�r�r��cnt�doner3�res�err�group_idr~s              rA�env_group_installzBase.env_group_installs*���t�z�z�4�<�<��1H�1H�:�K\�K\�1\�!�+�+�
-�������G�
��e�e�G�n��
 �J�J��%���)G��4�-�-�h��w�W]�-�^�^�C�'��*�*���t�/�/���w�W]�?M�0�O�O��+� ����.�.�&�&�q�)9�':�;�;��
���>�>�,�,�
����S��X�&�����
�s�C5�5D<� D7�7D<c�f�|j�}|j|�}|j|�SrE)r�
_group_removerE�r?r�rrDs    rA�group_removezBase.group_remove3s3���)�)�+���$�$�V�,���$�$�U�+�+rCc�4�t|j|jtjtjztj
�}	|j|�}d}|jD]}||j!|�z
}�|j"D]}||j%|�z
}�|S#tjj$rL}tjdt|��tjjtd���d}~wwxYw)NzWarning: %szNo groups marked for removal.r)rrrAr�r��	INSTALLEDrerrlr�rhrDrr�r	r�r�r�r�)r?rr�r�r�r�r9�grps        rA�env_group_removezBase.env_group_remove:s����t�z�z�4�<�<�!�.�.��1B�1B�B�!�+�+�
-��	K��!�%�%��"�C����#�#�C��4�*�*�3�/�/�C�$��:�:�C��4�$�$�S�)�)�C���
���~�~�(�(�	K��L�L���C��1��.�.�&�&�q�)H�'I�J�J��	K�s�B.�.D�AD�Dc�v�t|j|jtjtjztj
�}d}|D]^}	|j
|�}|jD]}	|j|�d}�|jD]}	|j!|�d}��`|s*t#d�}	tj$j'|	��y#tjj$r(}tjt|��Yd}~��d}~wwxYw#tjj$r(}tjt|��Yd}~��d}~wwxYw#tjj$r)}tjt|��Yd}~��d}~wwxYw)NFTzNo group marked for upgrade.)rrrAr�r�r�rerrlr�rhrDrr��environment_upgrader��
group_upgrader	r��CliError)
r?rr��group_upgradedr3r�r�r9r�rs
          rA�env_group_upgradezBase.env_group_upgradeJs_���t�z�z�4�<�<�!�(�(�:�+B�+B�B�!�+�+�
-�����G�
��e�e�G�n���'�'����,�,�S�1�%)�N�(��z�z����&�&�s�+�%)�N�"� �(��2�3�C��'�'�"�"�3�'�'���#�>�>�,�,�
����S��X�&���
���~�~�0�0���L�L��S��*������~�~�0�0���L�L��S��*����sH�C"�9D*�E2�"D'�?D"�"D'�*E/�E*�*E/�2F8�F3�3F8c�f�|j�}|j|�}|j|�SrE)r�_environment_upgraderEr�s    rAr�zBase.environment_upgradegs3���)�)�+���+�+�F�3���$�$�U�+�+rCc�f�|j�}|j|�}|j|�SrE)r�_group_upgraderEr�s    rAr�zBase.group_upgradens3���)�)�+���%�%�f�-���$�$�U�+�+rCc��|jjdz}tjj	|�ry|jj
}tjjj|��}|jtjtjz�|jdd�}t|�}~~|dk(rytjj|�}tjj	|�stj |�t#|d�}|j%�~y)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�w)r@r�r�r�r�ryrr-r;r�ri�_RPMVSF_NOSIGNATURES�_RPMVSF_NODIGESTS�dbMatchr�r�r��openrK)r?�gpgkeyscheckedry�myts�idx�keys�mydir�fos        rA�_gpg_key_checkzBase._gpg_key_checkus������+�+�.D�D��
�7�7�>�>�.�)���i�i�+�+���w�w�"�"�:�:��:�L�����3�3�3�c�6K�6K�K�L�M��l�l�6�<�0���3�x�����1�9���G�G�O�O�N�3�E��7�7�>�>�%�(����E�"��n�c�*�B��H�H�J��rCc�\�|j|�\}}|j|�|D]�}tjj	|j
�}|j
j
�j|��}|jjrI|j|j
j
�j|jd�����}|j|��}|�|j|��}|jj||����t|�S)Nr�Trrcr�ra)r�rgrrZr[r�r�r�r@r�r�r�r!rrhr�)	r?r�r�r��already_instr�r�r�r�s	         rArfzBase._install_multiarch�s���"&�"?�"?��"F���i��&�&�|�4�!�H��<�<�(�(����3�D��	�	���!�)�)�h�)�7�A��y�y�"�"��G�G�D�I�I�O�O�-�5�5��h�h�4�h�H�6�J�K���8�8��8�?�D��#��x�x��x�2���J�J���d�&�j��B�"��9�~�rCc��tj�}tj�}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
        )�argparse�	Namespacer)r?rhr��
install_specs�
exclude_specss     rA�_categorize_specszBase._categorize_specs�s?��!�*�*�,�
� �*�*�,�
��]�G�,��]�G�,��m�+�+rCc���|jD�cgc]#}tjj|�r|��%}}|jD�cgc]}||vr|��
}}|jj�j
|��}|jj�j
|��}|jj|�|jj|�ycc}wcc}w)Nr�r�)�	pkg_specsrr�r�r�r�r�r�)r?r�r��
glob_excludes�excludesr��glob_exclude_querys       rA�_exclude_package_specszBase._exclude_package_specs�s���0=�0G�0G�?�0G�W��H�H�4�4�W�=�!�0G�
�?�+8�+B�+B�5�+B���m�3��+B��5��	�	���)�0�0�h�0�?�
�!�Y�Y�_�_�.�5�5��5�O���	�	���}�-��	�	���1�2��?��5s�(C!�
C&c���t�}t|j|jtjtj
ztjtjz�}|D]�}	|j|�}|j|j �|j|j"�|j"D]M}|jj%|�}|j'�D]}	|j)|	j*���O��t-|�S#tjj$r)}tjdt|��Yd}~��d}~wwxYw)NzWarning: Module or %s)r!rrrAr�r�r�r�rerrlr�rhrDrrRr�r��_environment_by_id�groups_iterrJrkr�)
r?�group_specsr�r�r3r�r��environment_id�environmentr8s
          rA�_expand_groupszBase._expand_groups�s������t�z�z�4�<�<�!�.�.��1B�1B�B�!�+�+�j�.B�.B�B�
D��#�G�
��e�e�G�n��

�M�M�#�*�*�%��M�M�#�*�*�+�"%�"2�"2��"�j�j�;�;�N�K��(�4�4�6�E��J�J�u�x�x�(�7�#3�#��F�|����>�>�,�,�
����4�c�#�h�?���
�s�1D!�!E'�>E"�"E'c�^�|D]q}	|jj}d|vr*|jd�}|d}|djd�}|j|g|||j|j
��sy#tjj$r|jd|z�Y��wxYw)Nr�rr��,�@)
r@�group_package_types�splitr�r��	grp_specsrrlr�r�)r?r�r��skippedr��
group_specrr�s        rA�_install_groupszBase._install_groups�s���%�J�
1��	�	�5�5���*�$�&�,�,�S�1�E�!&�q��J�!�!�H�N�N�3�/�E��&�&�
�|�U�F�H�DV�DV�'/�'9�'9�;�&���>�>�'�'�
1����s�Z�/�0�
1�s�A.A8�81B,�+B,c�0�|�g}g}g}g}g}	|j||�\}
}|j|�|
jD]}	|j||||���g}d}trS|
jrG	tjjj|�}|j|
j|�n|
j}|r4|j)|j�|_|j+||||�|s|s|s|	s|r$tj
j!||||	|���y#tj
j$r:}
tjt|
��|j|�Yd}
~
��;d}
~
wwxYw#tj
j $rv}
|
j"r"|
j"D]}|j|��|
j$r%|
j$D]}|jd|z��|
j&}Yd}
~
��Md}
~
wwxYw)N)r�r��formsrFr�)�no_match_group_specs�error_group_specs�no_match_pkg_specs�error_pkg_specs�module_depsolv_errors)r�r�r�rhrrl�MarkingErrorrhrDr�r�r�r�r�r��
ModuleBase�
MarkingErrorsr�r�r�r�r�)r?rhr�r�r�r�r�r�r�r�r�r��specrp�no_match_module_specsr�r��e_specs                  rAr�zBase.install_specs�s����?��G�!��������'+�'=�'=�g�w�'O�$�
�}��#�#�M�2�!�+�+�D�
0����T�H�V�5��Q�,�!#�� "���M�3�3�

@�!�j�j�4�4�?�?��E���#�#�M�$;�$;�V�D�%2�$;�$;�!� �&*�&9�&9�-�:Q�:Q�&R�M�#�� � �!6�
�G[�]c�d��#4�8J�o�(��.�.�.�.�DX�AR�BT�?N�EZ�	/�\�
\�)��5�>�>�.�.�
0����S��V�$�"�)�)�$�/�/��
0���>�>�/�/�
@��)�)�"#�"8�"8��-�4�4�V�<�#9��&�&�"#�"5�"5��)�0�0��v��>�#6�()�(?�(?�%��
@�s2�D(�1AF�(E?�/E:�:E?�H�A+H�Hc�~�|dd�}|rd|d<d|d<d|d<tjj|�}|j|jfi|��}|j
jdk(s|j|�rB|d}|�|j|�	�|s|j|||�|j|||�
�S|j
jdk(rf|j|||j
j|d|��}	|	s|j|||�|	D] }
|jj|
|�
��"yy)z@Mark package(s) given by pkg_spec and reponame for installation.F)r��with_srcTr�r�r�r�r�r�)r�r�r�)r�r�r��reports�solutionrar�r)rr�r��get_best_solutionr�r@rd�_is_arch_specifiedr��_raise_package_not_found_errorrf�_get_best_selectorsr�rrh)r?�pkg_specr�r�r��kwargsr�r�r��sltrsr�s           rArhzBase.installsL��!�e�4���#'�F�<� �&+�F�?�#�',�F�#�$��{�{�"�"�8�,��)�4�)�)�$�)�)�>�v�>���9�9�$�$��-��1H�1H��1R���!�A��#��	�	�8�	�,���3�3�H�e�X�N��*�*�1�x��*�O�O�
�Y�Y�
&�
&�&�
0��,�,�T�38�7;�y�y�7J�7J�6>�59�6>�-�@�E���3�3�H�e�X�N����
�
�"�"�$�f�*�"�F���rCc���|jr
d}t|��|jj�j	�j|j|jdg��}|sktd�}tj||j�tjjtd�|jz|j��t|�d|kDr[tj j#|j�}|j%|g��|j&j)||��y	td
�}tj||j�y)Nz-downgrade_package() for an installed package.�noarchr�z.Package %s not installed, cannot downgrade it.�No match for argument: %srr�rar�zCPackage %s of lower version already installed, cannot downgrade it.)�_from_system�NotImplementedErrorr�r�r�r�r�r�r	rhr�rrlr�r��sortedrZr[r!rrh)r?r�r�rr�r�s      rA�package_downgradezBase.package_downgrade;s�����A�C�%�c�*�*��I�I�O�O��'�'�)�1�1�s�x�x�s�x�x�QY�FZ�1�[����D�E�C��N�N�3����)��.�.�-�-�a�0K�.L�s�|�|�.[�]`�]e�]e�f�f�
�A�Y�q�\�C�
��<�<�(�(����3�D��H�H�#��H���J�J���d�&�j��B���+�,�C��N�N�3����)�rCc�L�|jj�j|j|j|j
�}|j
|�\}}||vr|j|g�y|tjj|�vr5tjjtd�|jz��tj j#|j�}|j%|g��|j&j)||��y)Nr�r�rar�)r�r��_nevrar�r)r�r�rgr�r�r�rrl�PackageNotFoundErrorr	r�rZr[r!rrh)r?r�r�r�r�r�r�s       rA�package_installzBase.package_installQs����I�I�O�O��$�$�S�X�X�s�w�w����A��"&�"?�"?��"B���i��,���*�*�C�5�1��
�	���5�5�i�@�
@��.�.�5�5�a�8S�6T�WZ�Wc�Wc�6c�d�d��<�<�(�(����3�D��H�H�#��H���J�J���d�&�j��B�rCc��|jj�j�j|j|j
|j��r|jj|�ytd�}tj|t|��tjjtd�|j z|j��)N)r�r)r�r�z.Package %s not installed, cannot reinstall it.r�)r�r�r�r�r�r)r�rrhr	rhr�r�rrlr�r�)r?r�rs   rA�package_reinstallzBase.package_reinstall_s����9�9�?�?��&�&�(�0�0�c�h�h�C�G�G�RU�RZ�RZ�0�[��J�J���s�#���@�A�����s�C��H�%��n�n�)�)�!�,G�*H�3�<�<�*W�Y\�Ya�Ya�b�brCc�:�|jj|�yr�)rrOr�s  rA�package_removezBase.package_removegs���
�
�����rCc��|jr
d}t|��|jdk(r,td�}tj||j�y|jj�j�j�}|jjr�|jj�j|g��j|��rYtjj!|j�}|j#|g��|j$j'|��y|jd	k(r|j)|j*�
�}n)|j)|j*|jd	g��}|sktd�}tj-||j*�tj.j1td
�|jz|j*��t3|�d|krYtjj!|j�}|j#|g��|j$j'|��ytd�}tj-||j*�y)Nz+upgrade_package() for an installed package.rz<File %s is a source package and cannot be updated, ignoring.rr�rcrXr�r�r�r�z+Package %s not installed, cannot update it.r�r�zHThe same or higher version of %s is already installed, cannot update it.)r�r�r�r	rhr�r�r�r�r�r�r@r�r�rrZr[r!rrr�r�r�rlr�r�)r?r�rr�r�r�s      rA�package_upgradezBase.package_upgradeks������?�C�%�c�*�*��8�8�u���R�S�C��K�K��S�\�\�*���I�I�O�O�%�/�/�1�7�7�9�	��9�9���4�9�9�?�?�#4�#<�#<�#��#<�#G�#O�#O�Zc�#O�#d��<�<�(�(����3�D��H�H�#��H���J�J���d��+���8�8�x��� � �c�h�h� �/�A�� � �c�h�h�c�h�h��5I� �J�A���A�B�C��N�N�3����)��.�.�-�-��-�.����=�s�x�x�I�
I�
�A�Y�r�]�S�
 ��<�<�(�(����3�D��H�H�#��H���J�J���d��+���(�)�C��N�N�3����)�rCc��|jj�j�}|j|jj�j	|D�cgc]}|j
��c}���}|j�}|rf|jj�j
�j	|j|j����}|j|�}|�|j	|��|j||d��}|r�|j|j�j|D�cgc]}|j
��c}���}tjj|j�}	|	j|��|j j#|	��ycc}wcc}w)	Nr�rcr�T)r�rr�rXr�)r�r�r�rNr�r�r�r�rr'r(r�rrZr[r!rr)
r?r�r�r�r��
installed_allr�r�r}r�s
          rA�_upgrade_internalzBase._upgrade_internal�sm���	�	���)�3�3�5�
����t�y�y���0�8�8�S`�>a�S`�C�s�x�x�S`�>a�8�b�c���+�+�-����	�	���)�3�3�5�=�=�)�/�/��
�
��=�>�?�I��K�K�	�*�E����M�M�8�M�,��*�*�5�8�T�*�R���$�K�K�
� 4� 4� 6� =� =�X]�C^�X]�QT�C�H�H�X]�C^� =� _�`�E��<�<�(�(����3�D��H�H��H���J�J���d��+���A?b��8D_s�F;�Gc��tjj|�}|j|j�}|d}|�rtj
j
|�}|�s�|d�r�|dj�r�|dj}|jj�j�j�}|jjr|j|��n)|jj�jd��}	|	�s|j|��j�}
|
sMtd�}t j#||�tj$j'td�|z|��|dj(r�tj
j
|dj(�s]|
j|dj(�	�s>td
�}t j#|dj+||dj(��|jjxr|dxr|dj-�}|j/||||�Stj$j1td�|z|��)Nr��nevrarcTr�r�z(Package %s available, but not installed.r�)r�z?Package %s available, but installed for different architecture.z{}.{})rr�r�r�r�r�r�r�r�r�r�r@r�r�r�r	rhr�rl�PackagesNotInstalledErrorr�rj�
has_just_namerr�)
r?r�r�r�r�r��wildcard�pkg_namer��
obsoleters�installed_namerr�s
             rArzBase.upgrade�s���{�{�"�"�8�,���)�)�$�)�)�4���W�����x�x�/�/��9�H���� 1�h�w�6G�6L�6L�#�G�,�1�1�� �I�I�O�O�-�7�7�9�?�?�A�	��y�y�*�*��X�X�	�X�:�04�	�	���0A�0I�0I�PT�0I�0U��!�%.�%5�%5�8�%5�%D�%J�%J�%L�N�)�� J�K�����s�H�5�!�n�n�F�F��9�:�X�E�x�Q�Q�!�'�*�/�/����8P�8P�QY�Za�Qb�Qg�Qg�8h�-�5�5�8�G�;L�;Q�;Q�5�R�"#�$e�"f�C�"�N�N�3����x��RY�IZ�I_�I_�0`�a��	�	�+�+�>���0A�>�$�W�-�;�;�=�
��)�)�!�Y��(�K�K��n�n�)�)�!�,G�*H�8�*S�U]�^�^rCc��|j|jj�|jj|d��S)N)r�)rr�r�r@r�)r?r�s  rA�upgrade_allzBase.upgrade_all�s<��
�%�%��I�I�O�O��t�y�y�2�2�H�t�&�M�	MrCc���|�|jj�y
tjj	|�}|j|jd��}|djtj��|j|||jjd��}|s tjtd�|�y|D]}|jj!|�	�� y
)NF)r�r���
reponame__neqT)r�r�r�r�rrXr�)r�distupgrade_allrr�r�r�r�r�rf�SYSTEM_REPO_NAMEr�r@r�rhr�r	�distupgrade)r?r�r�r�r�r�s      rA�distro_synczBase.distro_sync�s������J�J�&�&�(���k�k�)�)�(�3�G��0�0����U�0�K�H��W��%�%�F�4K�4K�%�L��/�/��x�:>�)�)�:M�:M�W[�0�]�E�����A�9�:�H�E�����
�
�&�&�d�&�3��rCc�>�t|||g�r�||z
}d}|r+|r)|D]#}td�}tj||��%n|r|j	|�rd}|D]}	|j||��d}�|stjtd��yy|jj�j|jj|j j"��}
|jj�j%�j'|j j(��}d}|D]*}
|
|
vs�td	�}tj||
�d}�,|rT|jj�j+|jj||j j"��}
|
D]}
|j-|
��y#tjj$r)}	tjt|	��Yd}	~	���d}	~	wwxYw)
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.rGr�z�Unneeded protected package: %s (and its dependencies) cannot be removed, either mark it as user-installed or change protected_packages configuration option.)�anyr	rhr�r�r�rrlr�r�r�r�r�r+rAr,r@r�r�r�r�_unneeded_extra_userinstalledr)r?r�r�r��	filenamesr��grp_specrr�rprQ�	protected�protected_foundr�s              rArzBase.autoremove�s����	�9�i�0�1���"�I��D��U� )�H��2�3�C��N�N�3��1�!*���(�(��3��D�%�� ��K�K���K�6� �D�
&�����q�!B�C�D��!�I�I�O�O�-�7�7����8I�8I�<@�I�I�<R�<R�8�T�M��	�	���)�3�3�5�=�=�4�9�9�C_�C_�=�`�I�#�O� ���-�'��r�s�C��N�N�3��,�&*�O�!�� $�	�	��� 1� O� O�PT�P\�P\�Pa�Pa�cl�@D�	�	�@V�@V�!P�!X�
�%���#�#�C�(�%��3�~�~�2�2�(��K�K��A��'�'��(�s�G�H�3H�Hc���d|i}|rd|d<d|d<d|d<tjj|�j|jfi|��}|j�D�cgc]$}|�|jj|�|k(r|��&}}|s|j|||�|jj}|D]}|jj||���!t|�Scc}w)z'Mark the specified package for removal.r�Tr�Fr�r�rH)rr�r�r�r�r�rArn�"_raise_package_not_installed_errorr@rPrrOr�)	r?r�r�r�r�r�r�r�rIs	         rAr�zBase.remove	s����5�!���#'�F�<� �&+�F�?�#�',�F�#�$��+�+�%�%�h�/�>�>�t�y�y�S�F�S��"�,�,�.�0�.�C����L�L���c�"�h�.�
�.�	�0���3�3�H�e�X�N��Y�Y�;�;�
��C��J�J���S�Z��8���9�~���0s�!)C&c��tjj|�}|j|j�}|j�D�cgc]$}|�|jj|�|k(r|��&}	}|j�}
|�|
j|��|�|
j|��tjj|
�}|	s/tjjd||
j���d}|jj }
|jj"}|	D]o}	|t%|�}tj&j)|j�}|j+|��|j,j/||��|dz
}�q|dk(r!tjj5d||	��|Scc}w#t0$r$|sY��|j,j3||
��Y�`wxYw)	Nr�rzno package matchedrr�rarHr�)rr�r�r�r�r�rArnr�r�r��_per_nevra_dictrlrr�r@rPr�rrZr[r!rrh�KeyErrorrO�PackagesNotAvailableError)r?r��old_reponame�new_reponame�new_reponame_neq�	remove_nar�r�r�r<�available_q�available_nevra2pkgr�rIr��
installed_pkg�available_pkgsr�s                  rA�	reinstallzBase.reinstall3	s����{�{�"�"�8�,������	�	�*���;�;�=�4�(�C��#��L�L���c�"�l�2�
�=�	�4�
�k�k�m���#������6��'����.>��?�!�i�i�7�7��D����.�.�:�:�$�h����0A�C�
C����Y�Y�;�;�
����!�!��+�M�	
G�!4�S��5G�!H���|�|�,�,�T�Y�Y�7�����^��,��
�
�"�"�$�f�*�"�F��1�H�C�,��!�8��.�.�:�:�$�h��@�
@��
��I4��,�
G� ���
�
� � ��:� �F�
G�s�
)G
�4G�G<�G<�;G<c�$�|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)r?r�s  rA�	downgradezBase.downgrade]	s��� � ��*�*rCc��tjj|�}|j|j�}|s.td�|z}tjj||��d}|j�}t|j�j��}|jj�j�j|��}	t|	�dk(r/td�|z}tjj!|||��|	j�j�D]�}
|j#�j%|
��}|s"td�}t&j)||
��Gtj*j-|j�}|j/|��|j0j3||��d}��|S)	z�Downgrade to specific version if specified otherwise downgrades
        to one version lower than the package installed.
        r�rr�z6Packages for argument %s available, but not installed.zDPackage %s of lowest version already installed, cannot downgrade it.r�rar�)rr�r�r�r�r	rlrr�r��
_name_dictr�r�r�r�r�r�
downgradesr�rhr�rZr[r!rrh)
r?r�r�r�r�rr�r2�available_pkg_names�q_installedr�downgrade_pkgsr�s
             rAr5zBase.downgrade_tog	s����{�{�"�"�8�,������	�	�*����/�0�8�;�C��.�.�5�5�c�8�D�D��������"�>�#<�#<�#>�#C�#C�#E�F���i�i�o�o�'�1�1�3�;�;�AT�;�U���{��q� ��L�M�PX�X�C��.�.�:�:�3��.�Y�Y�#�.�.�0�5�5�7�H�+�6�6�8�?�?�X�?�N�N�!��^�_�����s�H�-���<�<�(�(����3�D��H�H��H�(��J�J���d�&�j��B��D�8��rCc���|jj�j|��}|r||gfStjj	|j|�}|r||gfS|jd�s|jd�rd|zg}n(|jd�r||gfSdD�cgc]}||z��	}}|jj�j|��|fScc}w)N)�
file__glob�/bin/�/sbin/z/usrr�)r?r@z	/usr/bin/z
/usr/sbin/)r�r�r�r�_by_provides�
startswith)r?�
provides_spec�	providers�binary_provides�prefixs     rAr"z
Base.provides�	s����I�I�O�O�%�-�-��-�G�	���}�o�-�-��I�I�*�*�4�9�9�m�D�	���}�o�-�-��#�#�G�,�
�0H�0H��0R�%�
�5�6�O�
�
%�
%�c�
*��}�o�-�-�.\�]�-[�6� &�
�5�-[�
�]��y�y��� �(�(�O�(�D�o�U�U��]s�&C c�|�ddd�}||vrtd��||}|r8d|z}	|jj|	t��j	|�|r8d|z}	|jj|	t��j	|�|r8d|z}	|jj|	t��j	|�|r8d|z}	|jj|	t��j	|�|r9d	|z}	|jj|	t��j	|�y
y
)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.
        �__eqg�	__eqg__gt)�eq�gtez Unsupported value for `cmp_type`�
advisory_type�advisory�advisory_bug�advisory_cve�advisory_severityN)r�r7�
setdefaultr!rR)
r?�cmp_typerrM�bugzilla�cves�severity�cmp_dict�cmpr8s
          rA�add_security_filterszBase.add_security_filters�	s!��""�+�6���8�#��?�@�@��x� ���!�C�'�C��)�)�4�4�S�#�%�@�G�G��N���s�"�C��)�)�4�4�S�#�%�@�G�G��Q�� �3�&�C��)�)�4�4�S�#�%�@�G�G��Q�� �3�&�C��)�)�4�4�S�#�%�@�G�G��M��%��+�C��)�)�4�4�S�#�%�@�G�G��Q�rCc��i|_y)z,
        Reset all security filters
        N)r7rGs rA�reset_security_filterszBase.reset_security_filters�	s��
)+��%rCc��|js|jr|s|S|jj�j	d��}|jr*|jD]}|j|�}�|g|_|jrN|jj
�D]1\}}|r|dz}||i}	|j|jd	i|	���}�3|j|�}|s�|r�|j�}t|j�j��}
|
dkDr�|�Vtd�j|
�}td�j|
�}tj!t#|||
��|Std�j||
�}td�j||
�}tj!t#|||
��|S)
z�
        Merge Queries in _update_filters and return intersection with q Query
        @param q: Query
        @return: Query
        Tr��	__upgraderz3No 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 availablerF)r7r6r�r�r�r��itemsr�rNrr�r8r�r	rjrhr�r
)
r?r�r�r�r�merged_queriesr��filter_namer�r�r��msg1�msg2s
             rAr'zBase._merge_update_filters�	s����-�-��1N�1N�WX��H������*�2�2��2�>���(�(��6�6��!/�!5�!5�e�!<��7�.<�,<�D�)��(�(�'+�'D�'D�'J�'J�'L�#��V��"-��";�K�%�v�.��!/�!5�!5�h�a�h�h�6H��6H�!I��	(M�����7�����J�J�L���A�L�L�N�/�/�1�2���1�9��'� �"-� .�.4�f�U�m�� �"-� .�.4�f�U�m�����r�$��e�'<�=��� !�"4� 5�5;�V�H�e�5L�� �"5� 6�6<�f�X�u�6M�����r�$��e�'<�=��rCc�@����jrtd�}t|�z��|j�j��j
|jv}|rgn�j}��fd�}d}|jj�j
�|D�]-}	tjj|	��}
|
D�]}tj|j|j|j �dk\r-td�}t"j%||	|j&��i|j(j*r�tj,j.j1|j2|j4�}tj,j6j9|�}
t"j%tj,j;||
��|	|_|j(j*r!tjj?|
�ntjjA|�d}|j(jBrd}�nO|j(jDr�|j(j*r�
tj,jFjHtj,jFjJfvr>d}t"j%tj,jMtd���n�d}t"j%tj,jMtd���n]d}nZ|r8|�|j2|j&|	|jN|j d	��}n |r|�|j2|j&�}|sd}���|jjQtRjT�}|rF|jjW�}|jjY|tRjTz
�|jj[tj\|j4��}|r|jjY�|dk7r3td
�|z}tj^ja||���t"j%td��d}����0|s*|r(tj^jatd���|s=td
��jbz}tj^ja||���|je��\}}|dk7rR|r td�}t"j%|�tg|�}tj^ja||���y)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���|td��zdzz
}|td�dj�j�zz
}|S)Nz. Failing package is: %sz
 zGPG Keys are configured as: %sr)r	r�r�)rr�rns ��rA�_prov_key_dataz1Base._get_key_for_package.<locals>._prov_key_data
sI����1�/�0�B�7�%�?�?�C��1�5�6��Y�Y�t�{�{�+�-�
-�C��JrCFrz)GPG key at %s (0x%s) is already installedTzThe key has been approved.zThe key has been rejected.)r��userid�hexkeyid�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�rkr9r�rJr�crypto�retriever�keyInstalledrT�rpm_idrirhr��short_idr@rr�KeyInfo�from_rpm_key_objectre�raw_key�DNSSECKeyVerification�verify�
nice_user_msg�url�log_dns_key_import�log_key_import�assumeno�	assumeyes�Validity�VALID�PROVEN_NONEXISTENCE�any_msgrhrKr-rL�
getTsFlagsrb�pgpImportPubkey�
procgpgkeyrlr�r�r�r)r?r��askcb�	fullaskcbr�
key_installed�keyurlsrd�user_cb_failrgr�r��
dns_input_key�
dns_result�rc�	test_flag�
orig_flagsr��errmsgrns `                 @rA�_get_key_for_packagezBase._get_key_for_package�	s9�������L�M�C��S�2�X�&�&��z�z�"�)�)�$�����4�#C�#C�C�
�%�"�4�;�;��	����(�(�,�,�T�W�W�5��F��:�:�&�&�v�t�4�D����$�$�T�X�X�t�{�{�D�N�N�K�q�P��G�H�C��K�K��V�T�]�]�;���9�9�4�4�$'�J�J�$6�$6�$J�$J�4�;�;�KO�<�<�%Y�M�!$���!A�!A�!H�!H��!W�J��K�K��
�
� 8� 8��
� S�T�"����9�9�4�4��J�J�1�1�$�
�C��J�J�-�-�d�3����9�9�%�%��B��Y�Y�(�(��y�y�8�8�%�#�*�*�*=�*=�*C�*C�*-�*�*�*=�*=�*Q�*Q�*S�S�!%�B�"�K�K��
�
�(:�(:�1�=Y�;Z�([�\�!&�B�"�K�K��
�
�(:�(:�1�=Y�;Z�([�\�!���"�"����04�
�
�.4�37�3C�3C�15���	$A�B�B�
��r�4�;�;��
�
�>�B��#'�L��
!�H�H�0�0��1G�1G�H�	��!%���!4�!4�!6�J��H�H�%�%�j�3�3I�3I�&I�J����1�1�$�/�/�$�,�,�2O�P����H�H�%�%�j�1��Q�;��9�:�V�C�C��.�.�.�.�~�c�/B�C�C����A�9�:�;� $�
�]��f���.�.�&�&�q�)B�'C�D�D���'�(�+/�)�)�	4�C�
�.�.�&�&�~�c�':�;�;��,�,�R�0�����Q�;���E�F�����C� ���[�F��.�.�&�&�~�f�'=�>�>�rCc�*�|j|||�y)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)r�)r?r�r�r�s    rA�package_import_keyzBase.package_import_keyq
s��	
�!�!�#�u�i�8rCc��g}|jj�|jj�D]}|jt	|���|SrE)rTr��problemsr�r)r?�results�probs   rArCzBase._run_rpm_check�
sE�����������H�H�%�%�'�D�
�N�N�3�t�9�%�	(��rCc�\�tjj||j||fi|��S)z�
        Open the specified absolute url, return a file object
        which respects proxy setting even for non-repo downloads
        )rr��_urlopenr@)r?rurnrzr�s     rA�urlopenzBase.urlopen�
s(���x�x� � ��d�i�i��t�F�v�F�FrCc��|�*|jjtj��}|j	|j
j��}|S)Nr�r!)rr�rfr�r�r@r))r?r��installonlys   rAr�zBase._get_installonly_query�
sD���9��
�
� � �v�'=�'=� �>�A��h�h��	�	�(A�(A�h�B���rCc�b�tjj|d��}|j|jddd��}|drj|drd|dj
rT||ddj
k7r>tjtd�j|ddj
��yyyyy)	NTrFr�r�rrz  * Maybe you meant: {})
rr�r�r�r�r�rhr�r	rj)r?r�r�r�s    rA�_report_icase_hintzBase._report_icase_hint�
s����{�{�"�"�8��"�>���)�)�$�)�)��8=�e�*�U���G���'�!2�x��7H�7M�7M��H�W�-�a�0�5�5�5��K�K��3�4�;�;�H�W�<M�a�<P�<U�<U�V�W�6�8N�!2�rCc���d�}g}g}|D]S}|j�r0|jtjk7s�1|j	|��C|j	|��Utd�}|||�s(tjjtd���|jjr>td�}|||�s(tjjtd���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��d}|D]K}d}	|j�}|dus�tj|j||j��d}�M|S#t$r(}tjt	|��Yd}~�fd}~wwxYw�NTF)�verifyLocalPkgrgrhrfr�rjr�)�pkg_list�
logger_msg�all_packages_verifiedr��pkg_successfully_verifiedrps      rA�_verification_of_packagesz;Base._select_remote_pkgs.<locals>._verification_of_packages�
s���$(�!���,1�)�,�03�0B�0B�0D�-�-�D�8��O�O�J�$5�$5�c�3�<�<�$H�I�,1�)� �)�(��
!�,��O�O�C��F�+�+��,�s�A�	B�B�Bz>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)�
_is_local_pkgr�rf�CMDLINE_REPO_NAMEr�r	rrlr�r@r�)r?�install_pkgsr�r��local_repository_pkgsr�rs       rAr�zBase._select_remote_pkgs�
s���	)��� "���C�� � �"��<�<�6�#;�#;�;�)�0�0��5��"�"�3�'� ��P�Q��(�)>��D��.�.�&�&��O�P�R�
R��9�9����N�O�C�,�[�#�>��n�n�*�*��-�.�/�/��K��1�1�1rCc�(�|D]
}t|��yrE)�_msg_installed)r?r�r�s   rArgzBase._report_already_installed�
s���C��3��rCc�J�|jjtj��}tj
j
|�}|j|j|d|��}|�|dj|��|ds)tjjtd�|��|jjtj��}|dj|�}|rtd�}ntd�}tjj||��)	Nr�F�r�r�r�r�r��No match for argument�?All matches were filtered out by exclude filtering for argumentz?All matches were filtered out by modular filtering for argument)r�r�rfr�rr�r�r�r�rlrr	�IGNORE_REGULAR_EXCLUDESrN)	r?r�r�r��	all_queryr�r��with_regular_queryrs	         rAr�z#Base._raise_package_not_found_error�
s����I�I�O�O�&�*@�*@�O�A�	��+�+�%�%�h�/���,�,��I�I�U�U�)�-�E�����W��%�%�x�%�8��� ��.�.�5�5�a�8O�6P�RZ�[�[�!%�����v�7U�7U��!V��!)�'�!2�!?�!?�@R�!S��"��Y�Z���Y�Z���.�.�5�5�c�8�D�DrCc�8�|jjtj��j	�}t
jj|�}|j|j|d|��}|ds)t
jjtd�|��|�2|dD�cgc]#}|jj|�|k(s�"|��%}}n|d}|std�}	ntd�}	t
jj|	|��cc}w)Nr�Fr�r�r�zCAll matches were installed from a different repository for argumentr�)r�r�rfr�r�rr�r�r�rlrr	rArn)
r?r�r�r�r�r�r�r�r�rs
          rAr&z'Base._raise_package_not_installed_error�
s����I�I�O�O�&�*@�*@�O�A�K�K�M�	��+�+�%�%�h�/���,�,��I�I�U�U�)�-�E���� ��.�.�:�:�1�=T�;U�W_�`�`���(0��(9�`�(9��T�\�\�=N�=N�s�=S�W_�=_��(9�I�`� ��)�I���Y�Z�C��U�V�C��n�n�6�6�s�H�E�E��as�.#D�Dc�R�|jj|jd��y)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)�file_loggers_onlyN)r)�_setup_from_dnf_confr@rGs rA�
setup_loggerszBase.setup_loggers�
s��	
�
�
�*�*�4�9�9��*�MrCc���|jjtjtjztj
zzrd}nd}t
|j�}|j|dd�}|jdi|��}|sD|rBtjj|j��}tj|�t|j!d���}t|j#d���|z
}	d�}
|D�cgc]
}|
|���}}t|D�
cgc]}
|
|
�|vs�|
��c}
�}t|	D�
cgc]}
|
|
�|vs�|
��c}
�}||fScc}wcc}
wcc}
w)z�returns set of conflicting packages and set of packages with broken dependency that would
        be additionally installed when --best and --allowerasingTF)r�r��ignore_weak)r�c��tj|j|j|j|j
|j��S)N)r��epoch�version�releaser�)rf�NEVRAr�r�r�r�r�)�items rArz&Base._skipped_packages.<locals>._nevras4���<�<�T�Y�Y�d�j�j�$�,�,�(,���4�9�9�F�
FrCrF)r�actionsrf�INSTALL�UPGRADE�UPGRADE_ALLrr8r�rr�rrrhr�r!�problem_conflicts�problem_broken_dependency)r?�report_problemsr;r��ng�paramsrrr��problem_dependencyrr1�transaction_nevrasr��skipped_conflicts�skipped_dependencys                rA�_skipped_packageszBase._skipped_packagessk���:�:������&�.�.�!@�6�CU�CU�!U�V��D��D�
�d�j�j�
!��%)�%8�%8� $�!%�'���b�f�f��v������(�(�3�3�B�4D�4D�4F�G�C��N�N�3���� 4� 4�t� 4� D�E�� ��!=�!=��!=�!M�N�Qb�b��	F�
6A�A�[�c�f�S�k�[��A��-�W�-�S����DV�1V�S�-�W�Y�� �.�X�.�S�&��+�EW�2W�S�.�X�Z��!�"4�4�4��
B��W��Xs�E)�&E.�6E.�
E3�E3c���|jsytd��|jj|jjz}t	�fd�|D��S)zfCheck whether a system reboot is recommended following the transaction

        :return: bool
        F)�kernelz	kernel-rt�glibczlinux-firmware�systemd�dbuszdbus-brokerzdbus-daemonc3�:�K�|]}|j�v���y�wrEr�)r�r��need_reboots  �rAr�z%Base.reboot_needed.<locals>.<genexpr>/s�����C�l�s�3�8�8�{�*�l�s�)r;�	frozensetrz�
remove_setr)r?�changed_pkgsr�s  @rA�
reboot_neededzBase.reboot_needed"sW���
���� �!>�?���'�'�3�3�d�6F�6F�6Q�6Q�Q���C�l�C�C�CrCrE)F)rFrFN)TT)T)FFF)rF)NN)TN)r�NNFN)NTN)NT)TNN)NNTN)NNNN)NNNF)rFrFrFrFrFr�)Nzw+b)��__name__�
__module__�__qualname__rBrHrMrPrUrq�staticmethodrr�r�r��propertyrr@r��deleterrr��lazyattrr�r�r�r;�setterr�r�r�r�r�rrr7rCrKrNrrBr-�RPMTRANS_FLAG_NOSCRIPTS�RPMTRANS_FLAG_NOTRIGGERS�RPMTRANS_FLAG_NODOCSrL�RPMTRANS_FLAG_JUSTDB�RPMTRANS_FLAG_NOCONTEXTS�RPMTRANS_FLAG_NOFILEDIGEST�RPMTRANS_FLAG_DEPLOOPSrdr:r]r�r�rhrrTr�r�rAr�r�r�r�rrr"rZrJrkrMr{r�r�r�r�r�r=rrrErUrrr�r�r�r�r�r�r�r�r�r�rfr�r�r�r�r�rhr�rrrr	rrrrrr�r3r6r5r"rXrZr'r�r�rCr�r�r�r�rgr�r&r�r�r�rFrCrArr\s���<���*�
I�����W�;+�z,��������������]�]������X�X����'�G�(��G������*��*��!��!����"��"�O�+�(�
$�
 �
6�p9�v=�~$�:� 	"�;�z�&)�%@�%@�&)�&B�&B�"%�":�":� #� 6� 6�"%�":�":�&)�&B�&B�$'�$B�$B�$'�$>�$>�@���s�*�+�%(�%=�%=���"�$�c�&>�&>��/�/�'0�1����������8	�[�[����)�V��;�4�H�6�	8�G�\�|�(�5�
�
4�9�vj�X �D=�\�|(#�TAJ�F9�<�09�v
(�0�JN�37�'E�T $�[�z�Y�4D/�L
F�,�$,�(,�T�,,�� (�:,�,��<�$,�$
3��.
1�-\�^!�F�,�c��#�J#�L_�<M�� /)�b�,CG�38�(�T+��8V�&#R�J+�'�RD?�L9�"	�G��X�+2�Z �E�*F�$N�5�>
DrCrc�\�t|�}td�}tj||�y)Nz Package %s is already installed.)rr	rhr�)r�r�rs   rAr�r�1s$���s�8�D�
�.�
/�C�
�K�K��T�rC)I�__doc__�
__future__rrrrr�r�libdnf.transactionr:r�r�	dnf.compsr�dnf.i18nr	r
r�dnf.utilr�dnf.db.historyr
�dnf.yumr�collections.abcr�ImportError�collectionsr%�dnf.callback�dnf.conf�
dnf.conf.read�
dnf.crypto�
dnf.dnssec�dnf.drpm�dnf.exceptions�dnf.goal�dnf.history�dnf.lock�dnf.logging�dnf.module.module_baser��
dnf.persistor�
dnf.plugin�	dnf.query�dnf.repo�dnf.repodict�dnf.rpm.connection�dnf.rpm.miscutils�dnf.rpm.transaction�dnf.sack�dnf.selector�dnf.subject�dnf.transaction�dnf.yum.rpmtransrnrQrfr�r'rbr�rpr_r-r�rr��	getLoggerrh�objectrr�rFrCrA�<module>rs��$�'��%�'��
��� ���!�(��%�(���������������!��L����������������	�
����	��	�
���
�
��	�	�5�	!��S+D�6�S+D�jV��UX�%�$�%��&���L��s$�D�D/�D,�+D,�/D9�8D9

Youez - 2016 - github.com/yon3zu
LinuXploit