a ©2ÑhS½ã@sŠdZddlmZddlmZddlmZzddlmZWneyVddlmZYn0ddlm Z ddl Z ddl m Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZd d lmZdd lmZdd lmZmZddlZddlZddlZddl Zddl!Zddl"Zddl#Zddl$Zddl%Zddl&Zddl'Zddl(Zddl)Zddl*Zddl+Zddl,Zddl-Zddl.Zddl/Zddl0Zddl1Zddl2Zddl3Zddl4Zddl5Zddl6Zddl7Zddl8Zddl9Zddl:Zddl;ZddlZddl?Zddl@ZddlAZddlBZddlCZddlDZddlEZddlFZe  Gd ¡ZHddd„ZIdd„ZJdd„ZKdd„ZLGdd„dejMƒZNGdd„deOƒZPdS)z/ Command line interface yum class and related. é)Úprint_function)Úabsolute_import)Úunicode_literals)ÚSequence)Ú defaultdictN)Úfnmatché)Úoutput)ÚCliError)ÚucdÚ_ÚdnfÚcCs|t|jƒdt|jƒt|ƒ}t|jƒ}t|jƒ}d|fd|fd|ffD],\}}|| |d¡|||d7<qJdS)zl Get the length of each pkg's column. Add that to data. This "knows" about simpleList and printVer. rÚnaÚverÚridrN)ÚlenÚnameÚarchZevrZ _from_repoÚ setdefault)ÚdataÚpkgÚindentrrrÚdÚv©rú//usr/lib/python3.9/site-packages/dnf/cli/cli.pyÚ_add_pkg_simple_list_lens_s    rcCs¸iiidœ}|j|j|j|j|j|jfD]}|D]}t||ƒq0q(t|jƒdkrx|j D] \}}t||ƒt||ddqV|d|d|dg}|j |dd }|d |d |d  fS) zA Work out the dynamic size of the columns to pass to fmtColumns. )rrrrz )rrrrr)Zremainder_columné) Ú installedÚ availableÚextrasÚ autoremoveÚupdatesÚrecentrrÚ obsoletesÚobsoletesTuplesZ calcColumns)r ÚyplrZlstrZnpkgZopkgÚcolumnsrrrÚ_list_cmd_calc_columnsjs ÿ r)c CsÎdd„}tj |¡}d}| ¡ ¡j|dD]œ}|r.sm_ui_timeF)rrTÚ0z%s-%s.%sz %s:%s-%s.%sz Installed: %s-%s at %sz Built : %s at %s)r ÚsackÚ rpmdb_sackÚqueryrÚfiltermÚprintZepochÚversionÚreleaserÚtermÚboldrr Z installtimeZpackagerZ buildtime) ÚpkgsÚbaser r.r1ZdonerrrrrrÚprint_versions{s&   ÿ ÿÿr;c Cs:tdƒ}| ¡D]$\}}t | ||d|d¡¡qdS)NzTThe operation would result in switching of module '{0}' stream '{1}' to stream '{2}'rr)r ÚitemsÚloggerÚwarningÚformat)ÚswitchedModulesZmsg1Z moduleNameZstreamsrrrÚreport_module_switch”srAcsšeZdZdZd!‡fdd„ Zd"‡fdd„ Zdd „Zd d „Zd d „Zdd„Z d#dd„Z dd„Z ggdfdd„Z d$dd„Z d%dd„Z‡fdd„Zdd „Z‡ZS)&ÚBaseCliz#This is the base class for yum cli.Ncs4|p tj ¡}tt|ƒj|dt ||j¡|_dS)N)Úconf)r rCZConfÚsuperrBÚ__init__r ZOutput)ÚselfrC©Ú __class__rrrEžszBaseCli.__init__rc sÐtjjrJ|jjsJt|j ¡ƒ}|rJt|ƒt dƒj tj j d}tj  |¡‚|j}|j |¡}|rjt |¡|râg}g}d}|D]>} | jtjjvrž| | j¡q~| jtjjvr~d}| | j¡q~|`|sÔ|j |¡n|j ||¡|s|j ¡s|jrL|jjs|jjrL|jj r6t t dƒj tj j!d¡n(d|jj"vr^t t dƒj tj j!d¡tj j# $¡oŠt%j& '|jj(¡dkoŠ|jj } d } | rì|jj)d kr¾t t d ƒ¡t*t d ƒƒ‚|jj)d vsÐJ‚tj  #¡} |  +¡s6|jj)dkr t t dƒ¡t*t d ƒƒ‚|jj)dksJ‚|  ,¡s6t t dƒ¡t-jj.|_/t0t1ƒ} |D]D} t2| j3ƒD]2}|jj4D]"}t5||ƒrf| | j6 |¡qfqZqL| rt t dƒ¡|  7¡D].\}}t |¡|D]}t d|¡qÄq®t*t dƒƒ‚n$|jj)dkrt*t dƒƒ‚t-jj8|_/| 9¡r<|jj:s0|j ;¡s||jj?|¡Wn^tj j@yô}z@tjAj  BtC|ƒ¡}t dƒd|}tDƒtj  |¡‚WYd }~n d }~00| E|¡|jj rd StF|tGƒs |g}t H¡gt1|ƒ}tItJ|ƒ K|¡}|d urt|jL M|g¡d}tjNj O|jL|jP¡}nd }|rÌtDƒtDd Q|j R|¡¡ƒtDƒ|D]&} | jSt-jjTkr¤tj  t dƒ¡‚q¤|S)zóTake care of package downloading, checking, user confirmation and actually running the transaction. :param display: `rpm.callback.TransactionProgress` object(s) :return: history database transaction ID or None aQIt is not possible to switch enabled streams of a module unless explicitly enabled via configuration option module_stream_switch. It is recommended to rather remove all installed content from the module, and reset the module using '{prog} module reset ' command. After you reset the module, you can install the other stream.©ÚprogTFz7{prog} will only download packages for the transaction.ÚtestzP{prog} will only download packages, install gpg keys, and check the transaction.ú/NZpersistz:Persistent transactions aren't supported on bootc systems.zOperation aborted.)ÚautoÚ transientrMzžThis bootc system is configured to be read-only. Pass --transient to perform this transaction in a transient overlay which will reset when the system reboots.rNz¼A transient overlay will be created on /usr that will be discarded on reboot. Keep in mind that changes to /etc and /var will still persist, and packages commonly modify these directories.zÓThis operation would modify the following paths, possibly introducing inconsistencies when the transient overlay on /usr is discarded. See the usr_drift_protected_paths configuration option for more information.z %szeOperation aborted. Pass --setopt=usr_drift_protected_paths= to disable this check and proceed anyway.z;Transient transactions are only supported on bootc systems.zNothing to do.zDownloading Packages:zError downloading packages:z %srÚ zTransaction failed)Ur r:Z WITH_MODULESrCZmodule_stream_switchÚdictZ_moduleContainerZgetSwitchedStreamsrAr r?ÚutilÚ MAIN_PROGÚ exceptionsÚErrorZ transactionr Zlist_transactionr=ÚinfoÚactionZFORWARD_ACTIONSÚappendrZBACKWARD_ACTIONSZ_tsZreportRemoveSizeZreportDownloadSizeZ isChangedZ_historyÚgroupÚenvÚ downloadonlyÚMAIN_PROG_UPPERZtsflagsZ _BootcSystemZis_bootc_systemÚosÚpathÚrealpathÚ installrootZ persistencer Z is_writableZis_unlocked_transientÚlibdnfZ TransactionPersistence_TRANSIENTZ _persistencerÚlistÚsortedÚfilesZusr_drift_protected_pathsrÚnevrar<ZTransactionPersistence_PERSISTÚ _promptWantedÚassumenoÚ userconfirmZ make_writableZdownload_callback_total_cbZdownload_packagesÚprogressZ DownloadErrorÚcliZ indent_blockr r4Ú gpgsigcheckÚ isinstancerZCliTransactionDisplayrDrBÚdo_transactionÚhistoryÚoldZdbZRPMTransactionZ_transÚjoinZpost_transaction_outputÚstateZTransactionItemState_ERROR)rFZdisplayr@ÚmsgZtransZpkg_strZ install_pkgsZrmpkgsZ install_onlyZtsiZis_bootc_transactionZ bootc_systemZtransaction_protected_pathsrZ pkg_file_pathZprotected_patternrdZprotected_pathsZprotected_pathZtotal_cbÚeZspecificZerrstrÚtidrGrrrl£sæû   ÿÿÿ  ÿ  ÿÿþ              "    zBaseCli.do_transactionc sög}|D]À}ˆ |¡\}}|dkr&qq|dkr¾ˆjjo>ˆjj }tjrPtj ¡sd|sdtj  t dƒ¡‚‡fdd„}zˆ  ||¡WqÈtjj t fyº}z|  t|ƒ¡WYd}~qÈd}~00q|  |¡q|rò|D]} t | ¡qÒtj  t dƒ¡‚dS)aPerform GPG signature verification on the given packages, installing keys if possible. :param pkgs: a list of package objects to verify the GPG signatures of :raises: Will raise :class:`Error` if there's a problem rrzTRefusing to automatically import keys when running unattended. Use "-y" to override.cs ˆj ¡S©N)r rg)r-ÚyÚz©rFrrÚaóz%BaseCli.gpgsigcheck..NzGPG check FAILED)Z_sig_check_pkgrCÚ assumeyesrfÚsysÚstdinÚisattyr rSrTr Z_get_key_for_packageÚ ValueErrorrWÚstrr=Úcritical) rFr9Zerror_messagesÚpoÚresultÚerrmsgZayÚfnrrrqrrwrrjIs& &  zBaseCli.gpgsigcheckcsVd‰|jj d|j¡D]&}|tj}|rtj |d¡‰q>q‡fdd„|j Dƒ}|S)zBReturn list of changelogs for package newer then installed versionNrrcs$g|]}ˆdus|dˆkr|‘qS)NÚ timestampr)Ú.0Zchlog©ZnewestrrÚ zsÿz-BaseCli.latest_changelogs..) Z_rpmconnZ readonly_tsZdbMatchrÚrpmZRPMTAG_CHANGELOGTIMEÚdatetimeÚdateZ fromtimestampÚ changelogs)rFÚpackageÚmiZchangelogtimesZchlogsrr‡rÚlatest_changelogsps zBaseCli.latest_changelogscCs4d|d d¡tj |d¡tj |d¡f}|S)z*Return changelog formatted as in spec filez * %s %s %s r…z%a %b %d %X %YZauthorÚtext)r+r Zi18nr )rFZ changelogZ chlog_strrrrÚformat_changelog~s  ýzBaseCli.format_changelogcCsŒtƒ}|D]}| |jp|jg¡ |¡q t| ¡ƒD]P}||}ttdƒ  d  dd„|Dƒ¡¡ƒ|  |d¡D]}t|  |¡ƒqrq6dS)NzChangelogs for {}ú, cSsg|] }t|ƒ‘qSr)r)r†rrrrrˆŽryz,BaseCli.print_changelogs..r) rPrÚ source_namerrWrbÚkeysr4r r?rorr‘)rFZpackagesZbysrpmÚpr“Z bin_packagesZchlrrrÚprint_changelogs†s"zBaseCli.print_changelogsTFc CsJ|jd||d}|jjs |jjr@|jd||d}|j|_|j|_|rúr:Ú cli_commandsÚcommandr riZdemandZ DemandSheetÚdemandsÚregister_commandZcommandsÚaliasZ AliasCommandr"ZAutoremoveCommandÚcheckZ CheckCommandZcleanZ CleanCommandZ distrosyncZDistroSyncCommandZdeplistZDeplistCommandZ downgradeZDowngradeCommandrXZ GroupCommandrmZHistoryCommandÚinstallZInstallCommandZ makecacheZMakeCacheCommandZmarkZ MarkCommandÚmoduleZ ModuleCommandZ reinstallZReinstallCommandÚremoveZ RemoveCommandÚrepolistZRepoListCommandZ repoqueryZRepoQueryCommandÚsearchZ SearchCommandÚshellZ ShellCommandZswapZ SwapCommandZ updateinfoZUpdateInfoCommandZupgradeZUpgradeCommandZupgrademinimalZUpgradeMinimalCommandZ InfoCommandZ ListCommandZProvidesCommandZCheckUpdateCommandZRepoPkgsCommandZ HelpCommand)rFr:rrrrE¥sBz Cli.__init__c Cs|j |¡|jrZ|j ¡D]<\}}|jjj||jj|gd}| |¡|j  |df¡q|j r†|j  dd¡|j  dd„|j Dƒ¡t ƒ}zt|jD]h\}}|jj |¡}|sâ|jjjrØ|dkrØtdƒ} tj | |¡‚| |¡|dkrô| ¡q”| ¡q”WnHtjjyH} z*t | ¡|j ¡t d¡WYd} ~ n d} ~ 00|D]}t td ƒ|¡qN|jj  ¡} | durˆ|jj !¡} | D]$} |jj "| ¡}|rŒ|j# $¡qŒ|jj% &¡\} |j_'|jj (¡ )| ¡t% *|j|jj%¡}|jj (¡ +|¡dS) N)ZbaseurlÚenabler)Ú*ÚdisablecSsg|] }|df‘qS)rÞr)r†ÚrrrrrˆÔryz(Cli._configure_repos..zUnknown repo: '%s'rzNo repository match: %s),r:Zread_all_reposZ repofrompathr<ÚreposZ add_new_reporCÚ_configure_from_optionsZrepos_edrWÚrepoÚinsertrÈÚsetZ get_matchingr¶r r rSZ RepoErrorÚaddrÞràÚ ConfigErrorr=r€Ú optparserÚ print_helpr{Úexitr>Z_repo_persistorZget_expired_reposr”ÚgetÚ_repoÚexpirer Zsetup_progress_callbacksZ _ds_callbackr»Úset_progress_barZ CliKeyImportZ_set_key_import)rFÚoptsZlabelr]Z this_repoZnotmatchräZ operationrÛrqrrZ expired_reposrZbarZ key_importrrrÚ_configure_reposÉsL          zCli._configure_reposcCsvt djtjjdtjj¡t tj j d|j ¡t tj j d|j j j¡t tj j d|j j j¡t d|j j j¡dS)Nz{prog} version: %srIz Command: %szInstallroot: %szReleasever: %sz cachedir: %s)r=Údebugr?r rQr[ÚconstÚVERSIONÚlogÚloggingÚDDEBUGÚ cmdstringr:rCr_Ú releaseverÚcachedirrwrrrÚ_log_essentialsüsÿ ÿ  ÿ ÿzCli._log_essentialscCsð|j}|jj}|jr.tj ¡s.tj t dƒ¡‚|j rH|  ¡D] }d|_ q<|j sX|jjj r‚d|jj_ | ¡D]}|j tjj¡qjnD|jr¢|  ¡D]}|j ¡qn$|jsÆ| ¡D]}|j tjj¡q°|jrì|jj|jjrÞdnd|jjddS)Nz[This command has to be run with superuser privileges (under the root user on most systems).TrMF)Úload_system_repoZload_available_repos)rÔr:râZ root_userr rQZ am_i_rootrSrTr rŒÚ iter_enabledZload_metadata_otherÚ cacheonlyrCÚvaluesríZsetSyncStrategyräZSYNC_ONLY_CACHEÚfreshest_metadatarîZfresh_metadataZ SYNC_LAZYZsack_activationZ fill_sackrüZavailable_repos)rFrÔrârärrrÚ_process_demandss2 ÿ     þzCli._process_demandscCs°|j}|j |¡}|dur~t tdƒ|tjd¡|jj j r`t tdƒj t j jt j jd|¡nt tdƒj t j jd¡t‚||ƒ|_t t jjd|¡t t jjd |¡dS) z,Check that the requested CLI command exists.Nz)No such command: %s. Please use %s --helprzLIt could be a {PROG} plugin command, try: "{prog} install 'dnf-command(%s)'")rJZPROGzRIt could be a {prog} plugin command, but loading of plugins is currently disabled.rIzBase command: %szExtra commands: %s)rÓrÒrìr=r€r r{Úargvr:rCZpluginsr?r rQrRr[r rõrör÷)rFrðrÉrÃÚ command_clsrrrÚ_parse_commands&s&   ÿ   þþ þ zCli._parse_commandsNc Csœtjj ¡}| |¡}|dur*tjj ¡n||_|j |¡}|j rpt tj j ƒt |jjj|j|jjƒt d¡|jr‚d|_d|_|jr˜tj j|_|_zp|jrÄ|jj d|jjjtjj¡d|j_|jj |¡| |j |j!|j"¡d|vrú|j#|jj_#|jj $¡Wn tj%j&t'fyP}z&t( )t*dƒ|¡t d¡WYd}~nbd}~0t+y¨}z@d t,t-|ƒƒt.|j/ƒf}t( )t*dƒ|¡t d¡WYd}~n d}~00|j0durò|j0|jj_0|jjj1sò|j2d vròt( )t*d ƒ¡t d¡|j3s|j4r&|j2d kr&t( )t*d ƒ¡t d¡|j5durHt6 7t8 9|j5d¡¡|j :|j;d¡|j <|j=|j>|¡|j :|j;d¡|j2s˜|j ?¡t d¡||j_@|jjAd|_B|jj@D]}|jBd|7_Bq¶| C¡z| D||¡WntEyt d¡Yn0|jFr(|j ?|j2¡t d¡|j G|j2|¡}|jHrR|jH|j_Id|j_J|jKrd|jK|j_K|jLrvd|jj_M|jNrˆd|jj_N|j2 O¡|j P¡|j Q¡| R|¡|j S¡|jj |¡|j2 T¡|jjj0rtjU V|jjj0¡|jjj0|jjW X¡_Y|jjjZdkr,|jjj[j\|jjjZdt] ^d¡dvr˜d}|jjW _¡D]}|j`r\qLd|_`d}qL|jjjas„d|jj_ad}|r˜t( bt*dƒ¡dS)aParse command line arguments, and set up :attr:`self.base.conf` and :attr:`self.cmds`, as well as logger objects in base instance. :param args: a list of command line arguments :param option_parser: a class for parsing cli options NrrrúTrzConfig error: %srz%s: %s)Zdownloadzsystem-upgradeZreposyncZ modulesynczb--destdir or --downloaddir must be used with --downloadonly or download or system-upgrade command.zconfig-managerz_--enable, --set-enabled and --disable, --set-disabled must be used with config-manager command.é<ÚmainZpluginú z%s rM)Úcolorz%_pkgverify_level)Z signaturer»Fz‘Warning: Enforcing GPG signature check globally as per active RPM security policy (see 'gpgcheck' in dnf.conf(5) for how to squelch this message))cr riÚaliasesZAliasesÚresolveÚ option_parserZ OptionParserréZparse_main_argsr5r4rórôr;r:rCZhistory_record_packagesr r{rëÚquietZ debuglevelZ errorlevelr¢Z VERBOSE_LEVELrþZ _set_valueZsystem_cachedirZ PRIO_DEFAULTrÔrãÚ_read_conf_filerùÚreleasever_majorÚreleasever_minorrZ_adjust_conf_optionsrSrèr~r=r€r ÚIOErrorr rÚreprÚfilenameZdestdirrZrÓZ set_enabledZ set_disabledZ sleeptimer*ÚsleepÚrandomZ randrangeZ add_commandsrÒZ init_pluginsZ disablepluginZ enablepluginrêrÉrJrørûrr ÚhelpZparse_command_argsZ allowerasingZ allow_erasingZ_allow_erasingrZ debugsolverZ debug_solverr%Z pre_configureZpre_configure_pluginsZ_activate_persistorrñZconfigure_pluginsÚ configurerQZ ensure_dirrâr»Zpkgdirrr7Zreinitr‰Z expandMacrorýZgpgcheckZlocalpkg_gpgcheckr>) rFrÉr r rðrrr¸Zforcingrärrrr<sÌ  ÿÿ  ÿ ÿ     ÿ                   ÿz Cli.configurec Csxtj d¡}|jj}| d¡| d¡| d¡}| d¡tjj krft j   |¡sftj  tdƒ |¡¡‚|jtjjd| d¡}| d¡tjj kr–d}|j}|j|| d¡dd} d} |durà|jduràtj |j¡\}} } n|dkrútj |¡\}} } d d „} | ||jƒ|_| || |jƒ|_| || |jƒ|_|jdurJt td ƒ¡d D]} | | ¡qN|jj |¡|ƒ|S) NZconfigZconfig_file_pathzConfig file "{}" does not exist)ÚpriorityZreposdirÚvarsdirrL)rcWs|D]}|dur|SqdSrtr)rÉr¸rrrÚor_elseïs z$Cli._read_conf_file..or_elsezPUnable to detect release version (use '--releasever' to specify release version))rúZlogdirZ persistdir) r röÚTimerr:rCZ_check_remote_fileZ_search_inside_installrootÚ _get_valueZ _get_priorityZPRIO_COMMANDLINEr\r]ÚisfilerSrèr r?ÚreadZPRIO_MAINCONFIGZ substitutionsZupdate_from_etcrùr‰Zdetect_releaseversr_rrr=r>Zprepend_installrootÚ_loggingZ_setup_from_dnf_conf) rFrùrrZtimerrCrZ from_rootÚsubstZ det_majorZ det_minorrÚoptrrrr Ës@     ÿ  zCli._read_conf_fileÚeqcCsŒ|dur|durdSg}|js"|r,| d¡|js6|r@| d¡|jsJ|rT| d¡|js^|rh| d¡|jj|||j|j|j |j ddS)zz :param opts: :param cmp_type: string supported "eq", "gte" :param all: :return: NÚbugfixÚ enhancementÚ newpackageÚsecurity)ÚtypesÚadvisoryÚbugzillaÚcvesÚseverity) r"rWr#r$r%r:Zadd_security_filtersr'r(r)r*)rFrðZcmp_typer»r&rrrÚ _populate_update_security_filters        þz$Cli._populate_update_security_filtercCs4|dur|jjj |¡|dur0|jjj |¡dS)zü Change minimal logger level for terminal output to stdout and stderr according to specific command requirements @param stdout: logging.INFO, logging.WARNING, ... @param stderr:logging.INFO, logging.WARNING, ... N)r:rZstdout_handlerZsetLevelZstderr_handler)rFÚstdoutÚstderrrrrÚredirect_loggerszCli.redirect_loggercCs.tjj |¡}||jj_|jj ¡ |¡dSrt) r rirhZMultiFileProgressMeterr:r râr»rï)rFÚforhrrrÚredirect_repo_progress*s zCli.redirect_repo_progresscCs€|jj ¡}|durdS|jj ¡j|jd}| ¡}|jdd|}|D]}||krJ|}qJ||kr|td|ƒtd|ƒdS)N)rÇr%)Z advisory_typez,Security: %s is an installed security updatez-Security: %s is the currently running version)r:r0Zget_running_kernelr2r3rrr4)rFZkernelÚqZikpkgrrrrÚ_check_running_kernel/s   zCli._check_running_kernelcCs*t|j ¡ƒtj td ||¡ƒ¡‚dS)Nz)argument {}: not allowed with argument {})r4réÚ print_usager rSrTr r?)rFZoption_string_1Zoption_string_2rrrÚ_option_conflictAs ÿzCli._option_conflictcCs8|jD],}||jvr(tj tdƒ|¡‚||j|<qdS)zRegister a Command. :apizCommand "%s" already definedN)r rÒr rSrèr )rFrrrrrrÕFs  zCli.register_commandc Csè| ¡|jjjr8t tdƒd tt |jjjƒƒ¡¡|jjj rht tdƒd tt |jjj ƒƒ¡¡|jj   ¡D]h}|jrªt tdƒ|j dd tt |jƒƒ¡¡|j rtt tdƒ|j dd tt |j ƒƒ¡¡qt|j ¡S)a2Call the base command, and pass it the extended commands or arguments. :return: (exit_code, [ errors ]) exit_code is:: 0 = we're done, exit 1 = we've errored, exit with error string 2 = we've got work yet to do, onto the next stage zExcludes in dnf.conf: r’zIncludes in dnf.conf: zExcludes in repo z: zIncludes in repo )rr:rCZ excludepkgsr=ròr rorbræZ includepkgsrârýÚidrÓÚrun)rFrärrrr6Ms&  ÿ ÿÿÿzCli.run)N)NNN)r!N)NN)rÌrÍrÎrErñrûrrrr r+r.r{r-r0r2r4rÕr6rrrrrѤs$3   9  rÑ)r)QrÏZ __future__rrrÚcollections.abcrÚ ImportErrorÚ collectionsrrŠrrör¨r\rr‰r{r*rÂZlibdnf.transactionr`rr Zdnf.clir Zdnf.i18nr r r Zdnf.cli.aliasesZdnf.cli.commandsZdnf.cli.commands.aliasZdnf.cli.commands.autoremoveZdnf.cli.commands.checkZdnf.cli.commands.cleanZdnf.cli.commands.deplistZdnf.cli.commands.distrosyncZdnf.cli.commands.downgradeZdnf.cli.commands.groupZdnf.cli.commands.historyZdnf.cli.commands.installZdnf.cli.commands.makecacheZdnf.cli.commands.markZdnf.cli.commands.moduleZdnf.cli.commands.reinstallZdnf.cli.commands.removeZdnf.cli.commands.repolistZdnf.cli.commands.repoqueryZdnf.cli.commands.searchZdnf.cli.commands.shellZdnf.cli.commands.swapZdnf.cli.commands.updateinfoZdnf.cli.commands.upgradeZdnf.cli.commands.upgrademinimalZdnf.cli.demandZdnf.cli.formatZdnf.cli.option_parserZdnf.confZdnf.conf.substitutionsZ dnf.constZdnf.db.historyZdnf.exceptionsZ dnf.loggingZ dnf.persistorZ dnf.pluginZdnf.rpmZdnf.sackZdnf.transactionZdnf.utilZ dnf.yum.miscZ getLoggerr=rr)r;rAZBaserBÚobjectrÑrrrrÚs–