a
    ©!cê  ã                   @   s„   d dl mZ d dl mZ d dlmZ d dlmZ d dlmZ d dl	Z
d dlZd dlZd dlZ
d dlZe d¡ZG dd	„ d	ejƒZdS )
é    )Úabsolute_import)Úunicode_literals)Úcommands)Ú_)ÚOptionParserNÚdnfc                   @   sb   e Zd ZdZejejejejejejdœZde	e 
¡ ƒ ZedƒZedd„ ƒZdd„ Zd	d
„ ZdS )ÚRemoveCommandzRemove command.)zremove-nz	remove-nazremove-nevrazerase-nzerase-nazerase-nevra)ÚremoveZeraseZrmz-remove a package or packages from your systemc                 C   sf   |   ¡ }|jdddtdƒd |jddtjd |jddtd	ƒd | jd
dtdƒtjtdƒd d S )Nz--duplicatesÚ
store_trueÚ
duplicatedzremove duplicated packages)ÚactionÚdestÚhelpz--duplicated)r   r   z--oldinstallonlyz*remove installonly packages over the limitZpackagesÚ*zPackage to removeZPACKAGE)Únargsr   r   Úmetavar)Zadd_mutually_exclusive_groupÚadd_argumentr   ÚargparseZSUPPRESSr   ZParseSpecGroupFileCallback)ÚparserZmgroup© r   ú;/usr/lib/python3.9/site-packages/dnf/cli/commands/remove.pyÚset_argparser0   s"    þÿÿÿþzRemoveCommand.set_argparserc                 C   s^   | j j}d|_d|_d|_| jjr*d|_n0tj	j
rN| jjrNd|_d|_d|_nd|_d|_d S )NTF)ZcliÚdemandsZ	resolvingZ	root_userZsack_activationÚoptsr   Zavailable_reposr   ÚbaseÚWITH_MODULESÚ	grp_specsZfresh_metadataZallow_erasing)Úselfr   r   r   r   Ú	configure?   s    zRemoveCommand.configurec                 C   sB  g }| j j| jv r"| j| j j g}| j  j| j j7  _d}| j jr:| jj ¡ }| j 	| 
¡ ¡}| ¡  |¡}|s‚tj tdƒ¡‚| ¡  ¡ D ]¦\\}}}t|ƒdk r¨qŽ|jdd z| j t|d ƒ¡ W nF tjjy   d}	tdƒ}
t |
| jjj t|d ƒ¡|	¡ Y n0 |d	d … D ]}| j |¡ q qŽd S | j jrÖ| jj ¡ }| j 	| 
¡ ¡ d
¡}| jj ¡ }|d ur¢|j |j!|j"|j#d}|r¢| |¡}|rÂ|D ]}| j |¡ q¬ntj tdƒ¡‚d S | j j$r|r| j j$D ]&}tdƒ}
t |
| jjj |¡¡ qînš| j j$r²tjj%rftj&j' (| j¡}| )| j j$¡}t| j j$ƒt|ƒkrnd}n| j j$}|r²|D ]8}z| j *|g¡r’d}W n tjjy¬   Y n0 qx| j jD ]n}z| jj)||d W nN tjj+y  } z0d ,|j-| jjj |¡¡}
t .|
¡ W Y d }~nd }~0 0 d}qº|s>t tdƒ¡ d S )NFz)No duplicated packages found for removal.é   T)Úreverser   Ú z%Installed package %s%s not available.é   éÿÿÿÿ)ÚepochÚversionÚreleasez.No old installonly packages found for removal.zNot a valid form: %s)Úformsz{}: {}zNo packages marked for removal.)/r   ZcommandÚnevra_formsZ	pkg_specsÚ	filenamesr   r   ZsackÚqueryZ_get_installonly_queryZ	installedÚ
differencer   Ú
exceptionsÚErrorr   Z_na_dictÚitemsÚlenÚsortZ	reinstallÚstrZPackagesNotAvailableErrorÚloggerZwarningÚoutputZtermZboldZpackage_removeZoldinstallonlyZlatestZget_running_kernelÚfilterr$   r%   r&   r   r   ÚmoduleÚmodule_baseZ
ModuleBaser	   Zenv_group_removeZMarkingErrorÚformatÚvalueÚinfo)r   r'   ZdoneÚqZinstonlyZdupsÚnameZarchZ	pkgs_listZxmsgÚmsgZpkgZkernelZrunning_installonlyZgrp_specr6   Zskipped_grpsÚgroupZpkg_specÚer   r   r   ÚrunP   sˆ    
(

ÿ
ÿ


 zRemoveCommand.runN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚhawkeyZ	FORM_NAMEZFORM_NAZ
FORM_NEVRAr(   ÚtupleÚkeysÚaliasesr   ZsummaryÚstaticmethodr   r   r?   r   r   r   r   r   #   s   û
r   )Z
__future__r   r   Zdnf.clir   Zdnf.i18nr   Zdnf.cli.option_parserr   Zdnf.baser   r   rD   Zdnf.exceptionsZloggingZ	getLoggerr2   ZCommandr   r   r   r   r   Ú<module>   s   
