
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<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 )zØOutput 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d€d�g d‚| jtdƒƒd„d…� |jd†d‡g dˆ| jtd‰ƒdnd…� |jdŠi | jd‹tdŒƒd�� |jdŽd!dd�td�ƒd$� |jd‘d!dd’td“ƒd$� |jd”d•dtd–ƒd—� |jd˜d™dtdšƒd›� |jdœd�dtdžƒddŸd � |jd¡d�dtd¢ƒdd£d � |jd¤d¥d¦dtd§ƒd—� |jd¨d©ddytdªƒd� |jd«d¬dtd­ƒd—� |jd®dtd¯ƒd°� |jd±dtd²ƒd°� |jd³dtd´ƒd°� |jdµdtd¶ƒd°� |jd·d¸d¹g | jtdºƒd3� |jd»d¼g d½| jtd¾ƒdb� |jd¿dÀg dÁ| jtdÂƒdb� |jdÃdÄdÅdÆdÇdÈgg dÉ| jtdÊƒdË� |jdÌdÍtj| jttjjjƒ ƒtdÎƒdÏ� |jdÐdÑt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	obsoletesz‡enables {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   
