<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
ft`4]                 @   s   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d dlZd dlZd dlZd dlZejdZG dd dejZG dd	 d	ejZdS )
    )unicode_literals)_)_parse_specsNdnfc                   s   e Zd Z fddZ  ZS )MultilineHelpFormatterc                s"   d|kr|j  S tt| j||S )N
)
splitlinessuperr   _split_lines)selftextwidth)	__class__ #/usr/lib/python3.6/option_parser.pyr
   '   s    z#MultilineHelpFormatter._split_lines)__name__
__module____qualname__r
   __classcell__r   r   )r   r   r   &   s   r   c                   s  e Zd ZdZd. fdd	Zdd ZG dd dejZG d	d
 d
ejZ	G dd dej
ZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd/ fd*d+	Zd0 fd,d-	Z  ZS )1OptionParserz5ArgumentParser like class to do things the "yum way".Tc                s>   t t| jdtd d | _d | _| j  |r:i | _t | _	d S )NF)add_helpZformatter_class)
r	   r   __init__r   command_positional_parsercommand_group_add_general_options
_cmd_usageset_cmd_groups)r   Zreset_usage)r   r   r   r   /   s    zOptionParser.__init__c             C   s&   | j   tjtd| tjd dS )zOutput an error message, and exit the program.
           This method overrides standard argparser's error
           so that error output goes to the logger.

        :param msg: the error message to output
        zCommand line error: %s   N)print_usageloggerZcriticalr   sysexit)r   msgr   r   r   error9   s    zOptionParser.errorc               @   s   e Zd Zdd ZdS )zOptionParser._RepoCallbackc                s@   |dkrdnd t || j}|j fddtjd|D  d S )Nz--disablerepodisableenablec             3   s   | ]}| fV  qd S )Nr   ).0x)	operationr   r   	<genexpr>H   s    z6OptionParser._RepoCallback.__call__.<locals>.<genexpr>z\s*[,\s]\s*)getattrdestextendresplit)r   parser	namespacevaluesopt_strlr   )r)   r   __call__E   s    z#OptionParser._RepoCallback.__call__N)r   r   r   r5   r   r   r   r   _RepoCallbackD   s   r6   c               @   s   e Zd Zdd ZdS )z OptionParser._RepoCallbackEnablec             C   s$   |j j|d df t|d| d S )Nr   r&   Zreponame)repos_edappendsetattr)r   r0   r1   r2   r3   r   r   r   r5   K   s    z)OptionParser._RepoCallbackEnable.__call__N)r   r   r   r5   r   r   r   r   _RepoCallbackEnableJ   s   r:   c                   s$   e Zd ZdZdZ fddZ  ZS )zOptionParser._SplitCallbackzN Split all strings in seq, at "," and whitespace.
        Returns a new list. z\s*[,\s]\s*c                sD   d}x:t j| j|D ](}|s |r8ttj| j|||| d}qW d S )NTF)r.   r/   SPLITTERr	   r   _SplitCallbackr5   )r   r0   r1   r2   r3   firstval)r   r   r   r5   T   s    z$OptionParser._SplitCallback.__call__)r   r   r   __doc__r;   r5   r   r   r   )r   r   r<   O   s   r<   c               @   s   e Zd ZdZdd ZdS )z%OptionParser._SplitExtendDictCallbackz[ Split string at "," or whitespace to (key, value).
        Extends dict with {key: value}.c       	      C   sh   y"|j d\}}| s| r tW n, tk
rN   td| }tj| |Y nX t|| j}|||< d S )N,zbad format: %s)r/   
ValueErrorr   argparseZArgumentErrorr+   r,   )	r   r0   r1   r2   r3   keyr>   r#   Zdctr   r   r   r5   b   s    z.OptionParser._SplitExtendDictCallback.__call__N)r   r   r   r?   r5   r   r   r   r   _SplitExtendDictCallback_   s   rD   c               @   s   e Zd ZdZdd ZdS )zOptionParser._SetoptsCallbackzY Parse setopts arguments and put them into main_<setopts>
            and repo_<setopts>.c             C   s  |j d}t|dkr*tjtd| d S t|dk rJtjtd| d S |\}}|jd}|dkr|d | }	||d d  }t|dr|j}
ni }
|
j|	i j|g j	| t
|d| j |
 n:t|d	r|j}ni }|j|g j	| t
|d
| j | d S )N=   z'Setopt argument has multiple values: %sz Setopt argument has no value: %s.r   repo_setoptsZrepo_main_setoptsZmain_)r/   lenr    Zwarningr   rfindhasattrrH   
setdefaultr8   r9   r,   rI   )r   r0   r1   r2   r3   valskvZperiodrepoZrepooptsZmainoptsr   r   r   r5   p   s,    



z&OptionParser._SetoptsCallback.__call__N)r   r   r   r?   r5   r   r   r   r   _SetoptsCallbackm   s   rS   c               @   s   e Zd Zdd ZdS )z'OptionParser.ParseSpecGroupFileCallbackc             C   s   t || d S )N)r   )r   r0   r1   r2   r3   r   r   r   r5      s    z0OptionParser.ParseSpecGroupFileCallback.__call__N)r   r   r   r5   r   r   r   r   ParseSpecGroupFileCallback   s   rT   c                   s$   e Zd Z fddZdd Z  ZS )zOptionParser.PkgNarrowCallbackc                s   i | _ y&x dD ]}|| | j |< ||= qW W n6 tk
rb } ztd| jj|f W Y d d }~X nX g |d< ttj| j|| d S )Nchoicesdefaultz"%s() missing mandatory argument %s)rU   rV   )		pkgnarrowKeyError	TypeErrorr   r   r	   r   PkgNarrowCallbackr   )r   argskwargsrP   e)r   r   r   r      s    
"z'OptionParser.PkgNarrowCallback.__init__c             C   sV   | j d }| s"|d | jd kr.| jd }n
|jd}t||| t|| j | d S )NZ_actionr   rU   rV   )r,   rW   popr9   )r   r0   r1   r2   r3   Zdest_actionZnarrowr   r   r   r5      s    

z'OptionParser.PkgNarrowCallback.__call__)r   r   r   r   r5   r   r   r   )r   r   rZ      s   rZ   c               @   s   e Zd Zdd ZdS )zOptionParser.ForceArchActionc             C   s   d|_ ||_d S )NT)Z
ignorearchZarch)r   r0   r1   r2   r3   r   r   r   r5      s    z%OptionParser.ForceArchAction.__call__N)r   r   r   r5   r   r   r   r   ForceArchAction   s   r_   c          
   C   s  | j tdjtjjd}|jdddddtdd	 |jd
ddddtdd |jddddtdd |jdddtdjtjjdd |jdtddd |jdddgdtdd |jd d!dd"td#d$ |jd%d&g | jtd'd(d) |jd*d+g | jtd,d(d) |jd-dtd.d/ |jd0d1g | jtd2d3 |jd4d5ddtd6d |jd7d8d9dd:td;d< |jd=ddtd>d |j	 }|jd?d@ddAdtdBdC |jdDd!dAtdEd< |jdFdGdHddtdId |jdJdKdLt
ddMtdNdO |jdPdQdRdSdtdTt
dU |jdVddtdWd |jdXdYddtdZd |jd[d\dt
td]d^ |jd_dd`dtdajtjjddb |jdcdtdddedf |jdgdhddtdid |jdjddtdkd |jdl| jdmg dntdodp |j	 }|jdq| jdmg dntdrdp |jdsdtdndu| jg tdvdw |j	 }|jdxdydzdtd{db |jd|dyd}dtd~db |jdddg d| jtddd |jddg d| jtddnd |jdi | jdtdd |jdd!ddtdd$ |jdd!ddtdd$ |jdddtdd |jdddtdd |jdddtdddd |jdddtdddd |jddddtdd |jddddytdd |jdddtdd |jddtdd |jddtdd |jddtdd |jddtdd |jdddg | jtdd3 |jddg d| jtddb |jddg d| jtddb |jddddddgg d| jtdʃdˍ |jddtj| jttjjj td΃dύ |jddtjdҍ dS )z0 Standard options known to all dnf subcommands. zGeneral {prog} options)progz-cz--configZconfig_file_pathNz[config file]zconfig file location)r,   rV   metavarhelpz-qz--quietquiet
store_truezquiet operation)r,   actionrV   rb   z-vz	--verbosezverbose operation)re   rV   rb   z	--versionzshow {prog} version and exitz--installrootzset install rootz[path])rb   ra   z--nodocsstore_constZnodocsZtsflagszdo not install documentations)re   constr,   rb   z--nopluginsZstore_falseZpluginszdisable all plugins)re   rV   r,   rb   z--enablepluginZenablepluginzenable plugins by namez[plugin])r,   rV   re   rb   ra   z--disablepluginZdisablepluginzdisable plugins by namez--releaseverz:override the value of $releasever in config and repo files)rV   rb   z--setoptZsetoptsz%set arbitrary config and repo options)r,   rV   re   rb   z--skip-brokenZskip_brokenz.resolve depsolve problems by skipping packagesz-hz--helpz
--help-cmdrb   zshow command help)re   r,   rb   z--allowerasingz;allow erasing of installed packages to resolve dependenciesz-bz--bestZbestz8try the best available package versions in transactions.)re   r,   rV   rb   z--nobestz2do not limit the transaction to the best candidatez-Cz--cacheonlyZ	cacheonlyz2run entirely from system cache, don't update cachez-Rz--randomwaitZ	sleeptimez	[minutes]zmaximum command wait time)r,   typerV   ra   rb   z-dz--debuglevelZ
debuglevelz[debug level]zdebugging output level)r,   ra   rV   rb   rh   z--debugsolverz)dumps detailed solving results into filesz--showduplicatesZshowdupesfromreposz2show duplicates, in repos, in list/search commandsz-ez--errorlevelzerror output level)rV   rh   rb   z--obsoletesZ	obsoleteszenables {prog}'s obsoletes processing logic for upgrade or display capabilities that the package obsoletes for info, list and repoquery)rV   r,   re   rb   z--rpmverbosityzdebugging output level for rpmz[debug level name])rV   rb   ra   z-yz--assumeyesz*automatically answer yes for all questionsz
--assumenoz)automatically answer no for all questionsz--enablerepor7   z[repo]z]Enable additional repositories. List option. Supports globs, can be specified multiple times.)re   r,   rV   ra   rb   z--disablerepozSDisable repositories. List option. Supports globs, can be specified multiple times.z--repoz--repoidrR   zUenable just specific repositories by an id or a glob, can be specified multiple times)ra   r,   re   rV   rb   z--enableFZset_enabledz>enable repos with config-manager command (automatically saves)z	--disableZset_disabledz?disable repos with config-manager command (automatically saves)z-xz	--excludez--excludepkgsZexcludepkgsz exclude packages by name or globz	[package])rV   r,   re   rb   ra   z--disableexcludesz--disableexcludepkgsZdisable_excludeszdisable excludepkgsz--repofrompathz[repo,path]zolabel and path to an additional repository to use (same path as in a baseurl), can be specified multiple times.)rV   re   ra   rb   z--noautoremoveZclean_requirements_on_removez7disable removal of dependencies that are no longer usedz--nogpgcheckZgpgcheckz5disable gpg signature checking (if RPM policy allows)z--colorZcolorzcontrol whether color is used)r,   rV   rb   z	--refreshZfreshest_metadataz2set metadata as expired before running the command)r,   re   rb   z-4Z
ip_resolvezresolve to IPv4 addresses onlyZipv4)r,   rV   rb   re   rg   z-6zresolve to IPv6 addresses onlyZipv6z	--destdirz--downloaddirZdestdirz!set directory to copy packages toz--downloadonlyZdownloadonlyzonly download packagesz	--commentZcommentzadd a comment to transactionz--bugfixz,Include bugfix relevant packages, in updates)re   rb   z--enhancementz1Include enhancement relevant packages, in updatesz--newpackagez0Include newpackage relevant packages, in updatesz
--securityz.Include security relevant packages, in updatesz
--advisoryz--advisoriesZadvisoryz=Include packages needed to fix the given advisory, in updatesz--bzz--bzsZbugzillaz7Include packages needed to fix the given BZ, in updatesz--cvez--cvesZcvesz8Include packages needed to fix the given CVE, in updatesz--sec-severityz--secseverityZCriticalZ	ImportantZModerateZLowZseverityzDInclude security relevant packages matching the severity, in updates)rU   rV   r,   re   rb   z--forcearchZARCHz Force the use of an architecture)ra   r,   re   rU   rb   command?)nargsrb   )add_argument_groupr   formatr   utilZMAIN_PROG_UPPERadd_argumentr<   rS   Zadd_mutually_exclusive_groupint	MAIN_PROGr6   rD   rB   ZSUPPRESSr_   sortedZrpmZ_BASEARCH_MAPkeys)r   Zgeneral_grpZ
best_groupZ
repo_groupZenable_groupr   r   r   r      s:   























z!OptionParser._add_general_optionsc             C   sH   t jj|j}t jj|jd }|| jkrD||f| j|< | jj| dS )z- store usage info about a single dnf command.r   N)r   Zi18nZucdsummaryaliasesr   r   add)r   cmdgrouprt   namer   r   r   _add_cmd_usaged  s
    
zOptionParser._add_cmd_usagec             C   s&   x t |j D ]}| j|| qW dS )z store name & summary for dnf commands

        The stored information is used build usage information
        grouped by build-in & plugin commands.
        N)r   r2   rz   )r   Zcli_cmdsrx   rw   r   r   r   add_commandsl  s    zOptionParser.add_commandsc             C   s   t dt dd}dtjj }xfd	D ]^}|| jkr4q$|d||  7 }x<t| jj D ]*}| j| \}}||krT|d||f 7 }qTW q$W |S )
z- get the usage information to show the user. zList of Main Commands:zList of Plugin Commands:)mainpluginz%s [options] COMMAND
r|   r}   z
%s

z	%-25s %s
)r|   r}   )r   r   rn   rq   r   rr   r   rs   )r   ZdescusageZgrpry   rx   rt   r   r   r   	get_usageu  s    

zOptionParser.get_usagec             C   s~   dt jj|jf | _|j| _tj| jdd| _	| j
| j	_
d | j	j_| jdj|jj | _| j| j_|j| j_|j| j d S )Nz%s %sF)r   z{} command-specific options)r   rn   rq   _basecmdr`   rt   descriptionrB   ArgumentParserr   r   _positionalstitlerl   rm   
capitalizer   cmd_add_argumentro   _commandZset_argparser)r   ri   r   r   r   _add_command_options  s    



z!OptionParser._add_command_optionsc                sB   t  fdd|D r0t jj jf||S  jj||S d S )Nc                s   g | ]}|d   j kqS )r   )Zprefix_chars)r'   arg)r   r   r   
<listcomp>  s    z1OptionParser.cmd_add_argument.<locals>.<listcomp>)allrh   r   ro   r   )r   r[   r\   r   )r   r   r     s    zOptionParser.cmd_add_argumentc             C   s`   xZ|D ]R}y|j d W q tk
rV } z"tjjtd|t|f W Y d d }~X qX qW d S )Nzutf-8zCannot encode argument '%s': %s)encodeUnicodeEncodeErrorr   
exceptionsZConfigErrorr   str)r   r[   r   r]   r   r   r   _check_encoding  s    
zOptionParser._check_encodingc             C   s   | j | | j|\}}|S )N)r   parse_known_args)r   r[   r1   Z_unused_argsr   r   r   parse_main_args  s    
zOptionParser.parse_main_argsc             C   s2   | j | | j|\}}| jj||}||_|jS )N)r   r   r   
parse_argsZopts)r   ri   r[   r1   Zunused_argsr   r   r   parse_command_args  s
    
zOptionParser.parse_command_argsNc                s,   | j r|  j| j j7  _tt| j| d S )N)r   _actionsr	   r   r   )r   Zfile_)r   r   r   r     s    zOptionParser.print_usagec                sd   |rH| j  s| j j|jkr$| j| |  j| jj7  _| jj| jj n
| j	 | _
tt| j  d S )N)r   r   r   r   r   r   Z_action_groupsr8   r   r   r~   r	   r   
print_help)r   ri   )r   r   r   r     s    

zOptionParser.print_help)T)N)N)r   r   r   r?   r   r$   rB   ZActionr6   r:   Z_AppendActionr<   rD   rS   rT   rZ   r_   r   rz   r{   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   ,   s.   
 ;	r   )Z
__future__r   Zdnf.i18nr   Zdnf.utilr   rB   Zdnf.exceptionsr   Zdnf.rpmZdnf.yum.miscZloggingZos.pathosr.   r!   Z	getLoggerr    ZHelpFormatterr   r   r   r   r   r   r   <module>   s   
