[/\c@`s,dZddlmZddlmZddlmZddlmZddlZddlZddlZ ddl m Z ddl m Z mZmZdd lmZdd lmZdd lmZdd lmZydd lmZWn!ek r dd lmZnXddlZddlZddl ZddlZddlZddl Zddl!Zddl"Zddl#Zddl$Zddl%Zddl&Zddl'Zyddl(Ze)Z*Wnek re+Z*nXddl,Zddl-Zddl.Zddl/Zddl0Zddl1Zddl2Zddl3Zddl4Zddl5Zddl6Zddl7ZddlZddl8ZddlZddl9Z9ddl:Z:ddl;Z;ddl<Z<ddl=Z=ddl>Z>ddl?Z?ddl@Z@ddlAZAe;jBdZCdeDfdYZEdZFdS(u Supplies the Base class. i(tabsolute_import(tdivision(tprint_function(tunicode_literalsN(t CompsQuery(t_tP_tucd(t _parse_specs(t SwdbInterface(tmisc(treduce(tSequenceudnftBasec B`seZdzdZdZdZdZdZdZe dZ e dZ dZ ed Zed Zed Zejd Zeejjd dZedZedZedZejdZdZd{d|dzdZdZdZe dZe e dZ!dZ"dZ#dzdZ$e e e dZ%dZ&ie'j(d6e'j)d6e'j*d 6e'j+d!6e'j,d"6e'j-d#6e'j.d$6Z/e0e'd%re'j1e/d&e d9Z?d}d:Z@d;ZAd<ZBd=ZCdzd>ZDd?ZEdzdzd@ZFe dzdAZGdBZHdCZIdDdzdze dzdEZJdzdFZKdGZLdHZMdIZNdJZOdze dzdKZPdLZQiejjRdM6ejjSdN6ejjTdO6ejjUdP6ZVe dQZWdze dRZXe dzdzdSZYdTZZdUZ[dVZ\dWZ]dXZ^dYZ_dze dZZ`d[Zad\Zbd]Zce d^Zddzdze dzd_Zedze dzd`Zfe daZge dbZhdcZiddZjdeZkdzdfZldzdgZmdzdhZndzdiZodzdzdzdzdjZpdzdzdkZqdzdzdze dlZrdmZse dnZtdoZue e dpZvdze dqZwdzdzdrZxdsZydzdtduZzdzdvZ{dwZ|dxZ}dyZ~RS(~cC`s*t|_|p|j|_d|_d|_d|_d|_d|_ d|_ t j j |_d|_t|_t|_t jj|_t jj|_t jj|_ttjg|_t jj |_!t|_"t|_#d|_$g|_%t|_&t|_'d|_(dS(N()tFalset_closedt_setup_default_conft_conftNonet_goalt_repo_persistort_sackt _transactiont_priv_tst_compstdnftcompstTransactionBuncht _comps_transt_historytsett _tempfilest_trans_tempfilestcallbacktDepsolvet _ds_callbacktloggingtLoggingt_loggingtrepodicttRepoDictt_repostrpmtRPMPROB_FILTER_OLDPACKAGEt_rpm_probfiltertplugintPluginst_pluginst_trans_successt_trans_install_sett_tempfile_persistort_update_security_filterst_allow_erasingt_repo_set_imported_gpg_keystoutput(tselftconf((s,/usr/lib/python2.7/site-packages/dnf/base.pyt__init__Zs0                cC`s|S(N((R7((s,/usr/lib/python2.7/site-packages/dnf/base.pyt __enter__uscG`s|jdS(N(tclose(R7texc_args((s,/usr/lib/python2.7/site-packages/dnf/base.pyt__exit__xscC`s|jdS(N(R;(R7((s,/usr/lib/python2.7/site-packages/dnf/base.pyt__del__{scC`s?|jr|jj|n|jjr+n|jj|dS(N(RR tupdateR8tdestdirR(R7tfiles((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_add_tempfiles~s   cC`s|j|j}|jj|tdtd|jdt}|jrWt|dWndS( Nuallitemptyt with_nevrat with_providestwith_filenamestreponameumain($RR8tdisable_excludest WITH_MODULEStrepost iter_enabledtmodule_hotfixesRUtsacktfilter_modulest_moduleContainerR`tmodule_platform_idRt debug_solverRRtwarningRtmodulet module_basetformat_modular_solver_errorstlent includepkgstquerytfiltermRLtsubjecttSubjecttuniontget_best_querytappendtapplyt excludepkgst add_includestset_use_includest add_excludes(R7t only_maintdisabledtit hot_fix_repost solver_errorst repo_includest repo_excludestrt incl_querytincltsubjt excl_querytexclt include_queryt exclude_queryRwtrepoid((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_setup_excludes_includess.  % %   ( % .   .  cC`s|jrm|jj rmg|jjD]}|jjr&|j^q&}|jjj ||jj n|j r|j j ndS(N( RR8t cacheonlyRiRjRIt isExpiredRUtexpired_to_addR?tsaveR2(R7Rtexpired((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_store_persistent_datas 4 cC`s|jS(N(R(R7((s,/usr/lib/python2.7/site-packages/dnf/base.pyRscC`s|jS(N(R(R7((s,/usr/lib/python2.7/site-packages/dnf/base.pyR8scC`s|jS(N(R)(R7((s,/usr/lib/python2.7/site-packages/dnf/base.pyRiscC`s d|_dS(N(RR)(R7((s,/usr/lib/python2.7/site-packages/dnf/base.pyRisu _priv_rpmconncC`stjjj|jjS(N(RR*t connectiont RpmConnectionR8R`(R7((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_rpmconn scC`s|jS(N(R(R7((s,/usr/lib/python2.7/site-packages/dnf/base.pyRlscC`sq|jdkr$tjjdn|jjdkrgtjjt |j j |j j d|j_n|jjS(NuSack was not initializeduarch( RlRRRVtErrorRntlibdnfRrtModulePackageContainerRR8R`R^(R7((s,/usr/lib/python2.7/site-packages/dnf/base.pyRns  (cC`s|jS(N(R(R7((s,/usr/lib/python2.7/site-packages/dnf/base.pyt transactionscC`s%|jrtdn||_dS(Nutransaction already set(Rt ValueError(R7tvalue((s,/usr/lib/python2.7/site-packages/dnf/base.pyR$s cC`stjj|jj|_dS(N(Rt persistort RepoPersistorR8tcachedirR(R7((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_activate_persistor+scC`s?|jjr(|jj|j||n|jj||dS(u&Load plugins and run their __init__().N(R8tpluginsR/t_loadt _run_init(R7t disabled_globtenable_pluginstcli((s,/usr/lib/python2.7/site-packages/dnf/base.pyt init_plugins.s cC`s|jjdS(u#Run plugins pre_configure() method.N(R/t_run_pre_config(R7((s,/usr/lib/python2.7/site-packages/dnf/base.pytpre_configure_plugins5scC`s|jjdS(uRun plugins configure() method.N(R/t _run_config(R7((s,/usr/lib/python2.7/site-packages/dnf/base.pytconfigure_plugins:sc C`s_|jj}|j}|r tjjrGtd}tj|t Stjj t krytd}tj|t S|dkrtd}tj|t S|j }|dk r||krtjtdt Sx*|j jD]}|jjdqWn|j js0tjtdt Sx|j jD]}|j\}} | dkrtjtd|jq@| s| dkrtjtd |j|jjq@|r| |krtd }tj||j| |jjq@tjtd |j| q@W|r2t|_n|jd t d ttjtdtS(NuCMetadata timer caching disabled when running on metered connection.u:Metadata timer caching disabled when running on a battery.iu Metadata timer caching disabled.u"Metadata cache refreshed recently.iuThere are no enabled repos.u4%s: will never be expired and will not be refreshed.u&%s: has expired and will be refreshed.uC%s: metadata will expire after %d seconds and will be refreshed nowu!%s: will expire after %d seconds.tload_system_repotload_available_reposuMetadata cache created.(R8tmetadata_timer_syncRRtutilton_metered_connectionRRRtinfoRt on_ac_powertsince_last_makecacheRRitvaluesRItsetMaxMirrorTriest _any_enabledRjt_metadata_expire_inRURStexpireRLtreset_last_makecachet fill_sack( R7ttimertperiodRtmsgRRXRtis_cachet expires_in((s,/usr/lib/python2.7/site-packages/dnf/base.pyt update_cache?sT              c C`s.tjjd}|jdtdt|jd k rcx)|jjD]}|j|_ qGWntj j ||_ tj j|jj|jj}|.|tk ry|j jdtWqtk r|dkrqqXn|rg}d}tj}|jjr)tjjjnx|jjD]} y|j| | jj|krv| jj}n| jj|kr| jj}nt j!t"d| j#tj$j%| jj&Wq9tj'j(k r#} | jj)| j*tkr n|j+| | j,q9Xq9Wx$|D]} t j-t"d| q/W|jj.r|dkr|dkrt j/t"d t0j1d t2|tj$j%|qqn|jj3j,Wd QX|j} |j j4| j5| j6|j7|tj8j9|j |_:|j;j<|j S( u'Prepare the Sack and the Goal objects. u sack setupRltgoalRFuautoiu%s: using metadata from %s.u%s, ignoring this repo.u-Last metadata expiration check: %s ago on %s.tsecondsN(=RR$tTimertresetRLR)RRt_init_hawkey_repoRHRlt _build_sackRtlocktbuild_metadata_lockR8Rt exit_on_lockRRtIOErrorttimetgpgkey_dns_verificationtdnssectRpmImportedKeystcheck_imported_keys_validityRiRjR\RIt getTimestamptgetAgeRRRSRRURtnormalize_timetgetMaxTimestampRVRWRtskip_if_unavailableR}tdisableRqRRtdatetimet timedeltatinttallt _configuretinstallonlypkgstinstallonly_limitRRtGoalRR/trun_sack( R7RRRRXRterrorstmtstageRR[R8((s,/usr/lib/python2.7/site-packages/dnf/base.pyRtsf!              cC`stjj|jj|_|jjs|j|j|j r|j j |jj |jj |jr|j|j qq|jjj |j n|jjrtjtdtjtddn|jdk r|jjn|j|jt|_ dS(NuRThe downloaded packages were saved in cache until the next successful transaction.u1You can remove cached packages by executing '%s'.udnf clean packages(RRtTempfilePersistorR8RR2t keepcachet_clean_packagesRR0R R?tget_saved_tempfilesRbR1ttempfiles_to_addRRRRRRthistoryR;Rt _closeRpmDBR(R7((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_finalize_bases*            cC`sV|jr dStjtjjdt|_|j|jdtdtdtdS(utClose all potential handles and clean cache. Typically the handles are to data sources and sinks. Nu Cleaning up.RlRiR( RRRtlogRR$tDDEBUGRLRR(R7((s,/usr/lib/python2.7/site-packages/dnf/base.pyR;s    cC`smtjjj|j|}xK|D]C}y|jj|Wq"tjjk rd}tj |q"Xq"WdS(u?Read repositories from the main conf file and from .repo files.N( RR8treadt RepoReaderRitaddRVt ConfigErrorRRRq(R7toptstreaderRXR[((s,/usr/lib/python2.7/site-packages/dnf/base.pytread_all_reposs  cC`s|rGd|_|jdk rGx#|jjD]}d|_q.WqGn|rbtjj|_n|rd|_|jdk rtj j |j|_n|jr|j r|j j n|j dk r|jjntjj|_d|_ndS(u1Make the Base object forget about various things.N(RRR)RRHRR'R(RRRRntrollbackRRR;RRRR(R7RlRiRRX((s,/usr/lib/python2.7/site-packages/dnf/base.pyRs"  cC`s |`dS(u6Closes down the instances of rpmdb that could be open.N(t_ts(R7((s,/usr/lib/python2.7/site-packages/dnf/base.pyRsu noscriptsu notriggersunodocsutestujustdbu nocontextsunocryptouRPMTRANS_FLAG_NOCAPSunocapscC`s|jS(N(R(R7((s,/usr/lib/python2.7/site-packages/dnf/base.pyRscC`sI|jdk r|jStjjj|jj|_|jjdx|jj D]}|j j |}|dkrt j td|qQn|jj||jj |}|dk rQ|jj|qQqQW|jjs|jjtjn|jjr|jjtjnttj|jd}|jj||jS(uMSet up the RPM transaction set that will be used for all the work.iu!Invalid tsflag in config file: %sN(RRRR*RtTransactionWrapperR8R`tsetFlagsttsflagst_TS_FLAGS_TO_RPMtgetRRtcriticalRt addTsFlagt_TS_VSFLAGS_TO_RPMt pushVSFlagstdiskspacecheckR,RtRPMPROB_FILTER_DISKSPACEt ignorearchtRPMPROB_FILTER_IGNOREARCHR toperatortor_t setProbFilter(R7tflagtrpm_flagtvs_flagt probfilter((s,/usr/lib/python2.7/site-packages/dnf/base.pyRs*     cC`s3|jdkrdS|jj|`d|_dS(u"Releases the RPM transaction set. N(RRR;(R7((s,/usr/lib/python2.7/site-packages/dnf/base.pyR/s  cC`stjjd}tjj|_tjtjjdx|j j D]}|j s_qJn|j snqJn|j j}|sqJntjtjjd|j|j jtjjkrtj|d}tjj|sqJqntj|d}y|jj|WqJtjjk rP}td}tj||j|qJXqJW|r~|jjj|j j!dgn||jS(u6Create the groups object to access the comps metadata.u loading compsuGetting group metadatau%Adding group file from repository: %su groups.xmlu1Failed to add groups file for repository: %s - %subasearch("RR$RRtCompsRRRRRRiRjt enablegroupstmetadataRIt getCompsFnRUtgetSyncStrategyRXtSYNC_ONLY_CACHER tcalculate_repo_gen_desttostpathtexiststrepo_gen_decompresst_add_from_xml_filenameRVt CompsErrorRRt_it arch_filterRR^(R7RRRXtcomps_fnt decompressedR[R((s,/usr/lib/python2.7/site-packages/dnf/base.pyt read_comps8s:        cC`s@|jdkr9|jj}t|jjd||_n|jS(ueauto create the history object that to access/append the transaction history information. t releaseverN(RRR8R!R t persistdir(R7R!((s,/usr/lib/python2.7/site-packages/dnf/base.pyt _getHistory_s tfgetcC`s |jS(N(R#(R7((s,/usr/lib/python2.7/site-packages/dnf/base.pytgstfsetcC`st|d|S(Nu_history(tsetattr(R7R((s,/usr/lib/python2.7/site-packages/dnf/base.pyR%hstfdelcC`st|ddS(Nu_history(R'R(R7((s,/usr/lib/python2.7/site-packages/dnf/base.pyR%jstdocuDNF SWDB Interface Objectc`sjj}t|j}xj|jD]\}|j|}|d}jj|djj|d|j|||dq+WxW|j D]I}jj|d|j|}|d}|j |||dqWx&|j D]}jj|d|j|}g|D]}||kr!|^q!}|j |} x|D]|} | t jjkrqPn|j | } | t jjkr| } qU| t jjkrUjjj|js| } qqUqUW|j||| fd} tjj| |qWx&|jD]}|j|}d} x*|D]"}|j|jkr=|} Pq=q=W| dkr|jd} n |j| g|D]}||kr|^q}fd} tjj| ||jkr|j||n&|j|| |jj| d jj|d qWxF|jD]8}jj|d |j |} |j|| qDW|S( Niuddudiuruic`sjj|dS(Nuod(R#t pkg_added(tpkg(R7(s,/usr/lib/python2.7/site-packages/dnf/base.pyR%sc`sjj|dS(Nuod(R#R*(R+(R7(s,/usr/lib/python2.7/site-packages/dnf/base.pyR%suuduuue( RR*Rtlist_obsoletedtlist_downgradestobsoleted_by_packageR#R*t add_downgradetlist_reinstallst add_reinstallt list_installst get_reasonRRtTransactionItemReason_USERtTransactionItemReason_GROUPtgrouptis_removable_pkgtnamet add_installRRtmapallt list_upgradesRtpoptremovet_get_installonly_queryt add_upgradet list_erasurest add_erase(R7Rttst all_obsoletedR+tobst downgradedt reinstalledRtreasontobsoletetreason_obsoletetcbtupgraded((R7s,/usr/lib/python2.7/site-packages/dnf/base.pyt_goal2transactionmsj   %     %cC`s|j}|j}|jj}g}g}xC|D];}||krg|j||dq=|j||q=W||fS(uJ 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. i(t installedt_na_dictt availableR}(R7tqtinstt inst_per_archtavail_per_archtavail_ltinst_ltna((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_query_matches_installeds    cC`s1|jjjjd|j}t|S(u See if sltr matches a patches that is (in older version or different architecture perhaps) already installed. R+(RlRwRMRxtmatchestlist(R7tsltrRQ((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_sltr_matches_installeds'c`s#fdjjjDS(u5Get iterator over the packages installed by the user.c3`s'|]}jj|r|VqdS(N(Rtuser_installed(t.0R+(R7(s,/usr/lib/python2.7/site-packages/dnf/base.pys s(RlRwRM(R7((R7s,/usr/lib/python2.7/site-packages/dnf/base.pytiter_userinstalledscC`sK|jd|d|jjd|jj }|jjrG|jdn|S(Ntallow_uninstallt force_besttignore_weak_depsu./debugdata/rpms(trunR8tbesttinstall_weak_depsRptwrite_debugdata(R7Rt allow_erasingtret((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_run_hawkey_goals   c C`sd}|jtjjd}|jj|j}|jri|j |j j j |j n(|jjs|j}|j|n|j|j j jd|jj|j||s|jjdkr|jntjj|j}tjj|}n|j||_|jj||jdk o^t |jdk}|r|jj!}|rtjj"|}qn|dk r|n|j#j$|jj%}||jj&7}||jj'7}||jj(7}|j j)|j*||S(uBuild the transaction set.udepsolveR8iiN(+Rt_finalize_comps_transRR$RR#tstartRt req_has_erasetpush_userinstalledRlRwRMRR8tupgrade_group_objects_upgradet_build_comps_solvert'_exclude_packages_from_installed_groupst add_protectedRxtprotected_packagesRht debuglevelt log_decisionsRt_format_resolve_problemst problem_rulesRVt DepsolveErrorRLRtendRut_rpm_limitationsRR/t run_resolvedR2R;R-R0tset_modules_enabled_by_pkgsetRn( R7RftexcRRtsolverRtgot_transactiontnew_pkgs((s,/usr/lib/python2.7/site-packages/dnf/base.pytresolvesH            c C`st|ts|g}ntjjjgt|}|jj|j sZ|j r3|j j sq|j j r3d}t|dr|jrdj|j}n-t|dr|jrdj|j}n|jj}|dkr|jj}n |j}|jj|gg||jj|n|jj|jjt|_dSd}tjt dtj!j"|j#j$|j#j%}|+|j&}d|_&|j j'|j(|j)}|rt d} tj*| x|D]} tj*| qWtj+j,| ntjt dtj-j.d} tjt d|j(j/|j(j0tjjj1|d t} |j(j2| } ~ t3| d kr t d d } x"| D]}| d t4|7} qWtj+j5| d |j6| ntjt d| tj-j.d} ||_&tjjj1|d|}|j#j7dkrx|j8D]}t9|_:qyWn|jjtjt d|j;d|}WdQX| |jj<|j |jj|S(Nuargsu ucmdsuRunning transaction checku%Error: transaction check vs depsolve:uTransaction check succeeded.utransaction testuRunning transaction testttestiuTransaction check error:u u %s uTransaction test succeeded.u transactiontdisplaysiuRunning transactionRJ(=t isinstanceR RtyumtrpmtranstLoggingTransactionDisplayRYRnRRRR6tenvRthasattrtargstjointcmdsRtlastRlt_rpmdb_versiontend_rpmdb_versiontbegRwR/trun_pre_transactiontrun_transactionRLR0RRRRRtbuild_rpmdb_lockR8R"RR#t_populate_rpm_tsRt_run_rpm_checkterrorRVtTransactionCheckErrorR$RtordertcleantRPMTransactionRRuRRt_trans_error_summaryRrRRR6t_run_transactiontunload_removed_plugins(R7tdisplaytcmdlinetoldt rpmdb_versionttidRtdscbtmsgsRRttestcbttserrorst errstringtdescrRJtdisplay_((s,/usr/lib/python2.7/site-packages/dnf/base.pytdo_transactions   !                 cC`s2d}tjd}i}x|j|D]}|jd|krkt|jd||jdRRRYR8thistory_record_packagesRlRwRMtfilterRbRRRRRRRSRRRRRRR>Rtcommentt reset_niceRtniceRRR$RRR!RutFailedRt _te_nevraRtstrRtTransactionItemState_ERRORtstatetget_effective_loginRRVRRRwtgetattrR tunlink_fRtOSErrortboolt install_setR1RR*Rt_verify_transactiontverify_tsi_package(R7RJRtusing_pkgs_patstinstalled_queryt using_pkgstrpmdbvtlastdbvRttsist installonlytoniceRteltfailedttette_nevrattsiRtloginRtxtherrorsR[Rtfn((s,/usr/lib/python2.7/site-packages/dnf/base.pyRs        (         c`s>t|jfd}tjjd}d}tjj|}|jj}t g|D]}|j ^qg}xc|j j D]U} | j } x@| jD]2} | j|kr| jt| jqqWqWx#|jD]} || j|}qW|j} |j j| d|t|_dS(Nc`s-|d7}dk r)||n|S(Ni(R(R+tcount(ttotalt verify_pkg_cb(s,/usr/lib/python2.7/site-packages/dnf/base.pytdisplay_banners  uverify transactioni(RuRRR$RRlt _rpmdb_sackRwRMRR8RR6tgetCompsGroupItemt getPackagestgetNamet setInstalledRLRRR+RRwR0(R7RRRRt rpmdb_sackRPRtnamesttitgRRR((RRs,/usr/lib/python2.7/site-packages/dnf/base.pyRs&"   c `s`tjj|jj|jj}|tj}td|D}tg|D]!}t |tj j rT|^qT} |j j jdkr|j t||d| n|j t||tjj||jrtjjjntfd|D} tjjd|j} |jj} | dk} x8jr| sk| dkr| dkr| d8} ntd}tj|gjD] }|^q}g|D]$}tjj||tjj^q}td|D}|j t||tjj||jrLtjjjn| tfd |D7} tjj| |i} qPWjrtjjjj}tj|nWdQX|dk r|| |n| \}}||kr\||krtd }n||kr)td }nd ||d }tj||d|d|ndS(Ncs`s|]}|jVqdS(N(t download_size(R]tpload((s,/usr/lib/python2.7/site-packages/dnf/base.pys ,sit total_drpmsc3`s|]}j|VqdS(N(t_bandwidth_used(R]R(R(s,/usr/lib/python2.7/site-packages/dnf/base.pys 9siiu,Some packages were not downloaded. Retrying.cs`s|]}|jVqdS(N(R(R]R((s,/usr/lib/python2.7/site-packages/dnf/base.pys Ksc3`s|]}j|VqdS(N(R(R]R(R(s,/usr/lib/python2.7/site-packages/dnf/base.pys Tsu?Delta RPMs reduced %.1f MB of updates to %.1f MB (%d.1%% saved)uIFailed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)idii(iiii(RRtbuild_download_lockR8RRRtsumRuRtdrpmt DeltaPayloadRjt__code__t co_argcountRXt_download_payloadst_irrecoverableRVt DownloadErrort_update_savingt _recoverabletretriesRRRRt _pkg2payloadt RPMPayloadt errmap2strR(R7tpayloadsRtprogresstcallback_totalRt beg_downloadtest_remote_sizetpayloadt total_drpmt remote_sizetsavingRtforeverRR+tremaining_pkgstrealtfulltpercent((Rs,/usr/lib/python2.7/site-packages/dnf/base.pyt_download_remote_payloads(sb! 1         .           c C`s=|j|\}}|r|dkr9tjj}ntjj|jjj ||j j }|j g|D]}|j ^qsg|D]*}tjj|||jtjj^q}|j||||n|j jr9xN|D]C}tjj|jj|jjd} tj| |j jqWndS(uDownload 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. u/N(t_select_remote_pkgsRRR!tNullDownloadProgressRt DeltaInfoRlRwRMR8tdeltarpm_percentageRBtlocalPkgRXRt delta_factoryRRR@RRRtpkgdirtlocationtlstriptshutiltcopy( R7tpkglistRRt remote_pkgstlocal_repository_pkgsRR+RR((s,/usr/lib/python2.7/site-packages/dnf/base.pytdownload_packagesjs  &4  'cC`sg}|s|Sg}x|D]}tjj| rpd|krptjj||j|}|j|gny|j|j j |Wqt k r}t j ||j|qXqW|jdt|r|rt tdjdj|n|S(Nu://RuCould not open: {}u (RRRRRt_urlopen_progressR8RBR}Rltadd_cmdline_packageRRRRqRRLRRTR(R7t path_listtstrictRtpkgst pkgs_errorRR[((s,/usr/lib/python2.7/site-packages/dnf/base.pytadd_remote_rpmss"   'c C`s|jr|jj}d}n$|j|j}|j}|j }|rx|jj}tj j j |}tj j j ||j}tjj|j}~|dkrd} d} q|dkr|rd} nd} td|} q|dkrd} td|} q|dkrP|r1d} nd} d} td|} q|d krd} td |} qn d} d} | | fS( uVerify 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. iuiiu"Public key for %s is not installeduProblem opening package %siu Public key for %s is not trustediuPackage %s is not signed(t _from_cmdlineR8tlocalpkg_gpgcheckRiRtgpgchecktgpgkeyR`RR*RtinitReadOnlyTransactiont miscutilstcheckSigR RRtbasenameR( R7tpotcheckt hasgpgkeyRXtrootRBt sigresulttlocalfntresultR((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_sig_check_pkgsF              cC`sx|D]{}tjj|s%qnytj|Wn*tk rbtjtd|qqXtj t j j td|qWdS(NuCannot remove %su %s removed( RRRR RRRRRqRRRR$R(R7tpackagesR((s,/usr/lib/python2.7/site-packages/dnf/base.pyRs  uallc C`s|dkr|jj}n|dkr@|j|||||Stjj| sYttj |j|d|d|d|}|dkst |dkr|dSt ||}t d|S(uRReturn 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 tshowdupst ignore_caseRficS`s |j|S(N(t merge_lists(tatb((s,/usr/lib/python2.7/site-packages/dnf/base.pyR%sN( RR8tshowdupesfromrepost _list_patternRRtis_string_typetAssertionErrort functoolstpartialRutmapR (R7t pkgnarrowtpatternsR.R/Rftlist_fntyghs((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_do_package_listss   c)`sfdfd}fd}tjd|}g} g} g} g} g} g}g}g}g}g}|}jj}|dk rtjj|d|}|jjdt }n|dkrDi}i}xh|j D]Z}|||j <|rqn|j |j f}||ksD|||kr|||s((R-(R@(s,/usr/lib/python2.7/site-packages/dnf/base.pytpkgs_from_reposc`s dkr|S|jdS(u=Filter out the packages which do not originate from the repo.RfN(RR(Rw(Rf(s,/usr/lib/python2.7/site-packages/dnf/base.pytquery_for_repos titerR/Rdualluupgradesu installedu availableiu autoremoveuextrasu obsoletest obsoletesRqtprovidesurecent(+R t GenericHolderRlRwRRRyRzR|RRMtpkgtupR8tarchRYRtlatestR}tevr_gttupgradest_merge_update_filtersRbRORNRtevrRutevr_eqt _unneededRtswdbtextrasRRDtextendt_recentR8trecenttreinstall_availablet old_availabletupdatestobsoletesTuplest autoremove()R7R:tpatternR.R/RfRARBtyghRMRORURVRWRDRXRTRQRYticRPRtdinsttndinstR%tkeytavailR+tinstalled_dictt avail_pkgtinstalled_pkgstsame_vertavailable_dictR8RHtinst_pkgt autoremove_qRQtnewtobsoleted_reldepsR((R@RfR7s,/usr/lib/python2.7/site-packages/dnf/base.pyR4 s            .    0            cC`s|j|7_t|S(N(RRu(R7ttrans((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_add_comps_transscC`s|j}|sdS|j|jjdt}|jdg|D]$}|jjj|jrA|^qA}|j |}|j |}|rt j j |j}|jd||jjd|d|jjndS(u Mark to remove packages that are not required by any user installed package (reason group or user) :param query: dnf.query.Query() object NRpR+tselectt clean_deps(RMRORRPRRR6R7R8R{t intersectionRtselectortSelectorRlRRteraseR8tclean_requirements_on_remove(R7Rwt unneeded_pkgsRtunneeded_pkgs_historytremove_packagesRZ((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_remove_if_unneededs =c`sj}jjd}fd}fd}d}jjjdt}|jtj |dtf|j tj |dt f|j |f|j |ff}x|D]\}} x|D]} i| jd6} | jr| ji|d6njjj| j} | jd d | sx| j} | jrV| d |7} ntjtd j| qn| | || }jjj| jqWqWj|dS( Nubasearchc`s<tjjj}|jd|jjd||S(NR+Rl(RRoRpRlRRtupgrade(Rwt remove_queryt comps_pkgRZ(R7(s,/usr/lib/python2.7/site-packages/dnf/base.pyt trans_upgradesc`sjjdkr|js1j|d|q|jj}j|tjj j }|j ddj |j |jjjd|d| nmtjj j }|jr|j ddj |j |jn|j d|jjd|d| |S(NuallRREu ({} if {})RltoptionalR+(R8tmultilib_policytrequirest_install_multiarchRMR~t_report_already_installedRRoRpRlRRTR8Rtinstall(RwRxRyRRRZ(R7(s,/usr/lib/python2.7/site-packages/dnf/base.pyt trans_installs  " %cS`s|j|}|S(N(R{(RwRxRy((s,/usr/lib/python2.7/site-packages/dnf/base.pyt trans_removesRbRunameuarcht arch__nequsrcu.uNo match for group package "{}"(RR8R^RlRwRxRLRR7R8t install_optRRwR=R8t basearchonlyR?R~RRRqRRTRt group_membersRRv(R7RjtbasearchRzRRRxtattr_fntattrRRyt query_argsRPtpackage_string((R7s,/usr/lib/python2.7/site-packages/dnf/base.pyRis4       c`s+fd}tjjjj|S(Nc`sejjjjd|}|s+dSyjjj|dSWntk r`t j j SXdS(NR8i( RlRwRMRxRRR*R3tAttributeErrorRRtTransactionItemReason_UNKNOWN(tpkgnameRP(R7(s,/usr/lib/python2.7/site-packages/dnf/base.pyt reason_fns! (RRtSolverRR(R7R((R7s,/usr/lib/python2.7/site-packages/dnf/base.pyRns cC`swtjj|st|j}|j|}tjj|j|||pTt ||}|sjdS|j |S(Ni( RRR5R6Rnt_translate_comps_pkg_typesRtinstall_or_skipt_environment_installRRk(R7tenv_idttypestexcludeRtexclude_groupsR|Rj((s,/usr/lib/python2.7/site-packages/dnf/base.pytenvironment_installs  cC`s@tjj|st|j}|j|}|j|S(N(RRR5R6Rnt_environment_removeRk(R7RR|Rj((s,/usr/lib/python2.7/site-packages/dnf/base.pytenvironment_remove s udefaultu mandatoryuoptionalu conditionalcC`sCd}x6tjjD]%\}}||kr||O}qqW|S(Ni(R t_COMPS_TRANSLATIONtitems(t pkg_typesRgR8tenum((s,/usr/lib/python2.7/site-packages/dnf/base.pyRs  c `sfd}tjj|s'td}|rgg|D]}||^q:}tjj|}nj} j |}tj j | j ||||} | sdS|r| j } n | j} tjtd|| j| S(uInstalls packages of selected group :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`sHtjj|r=jjjd|}td|S|fSdS(Nt name__globcS`s|jS(N(R8(R((s,/usr/lib/python2.7/site-packages/dnf/base.pyR%/s(RRtis_glob_patternRlRwRxR9(RZRP(R7(s,/usr/lib/python2.7/site-packages/dnf/base.pyt_pattern_to_pkgname,siu#Adding packages from group '%s': %sN(RRR5R6Rt itertoolstchaint from_iterableRnRRRt_group_installRRRRRSRRk( R7tgrp_idRRRRtexclude_pkgnamesRtnested_excludesR|Rjtinstlog((R7s,/usr/lib/python2.7/site-packages/dnf/base.pyt group_install"s&       c C`sNt|j|jtjtjBtjtjB}d}t}x|D]} y|j| } Wn8t j j k r} t j dt| t}qBnXxI| jD]>} | s| |kr||j| |d|d|7}qqWx9| jD].} ||j| |d|d|d|7}qWqBW| rJ|rJt j jtdn|S(NiuWarning: Module or %sRRRuNothing to do.(RRRt ENVIRONMENTStGROUPSt AVAILABLEt INSTALLEDRLRRRVRRRRRRtgroupsRt environmentsRRR(R7R;RRRRRPtcnttdoneRZtresterrtgroup_idR((s,/usr/lib/python2.7/site-packages/dnf/base.pytenv_group_installHs*  ) cC`s@tjj|st|j}|j|}|j|S(N(RRR5R6Rnt _group_removeRk(R7RR|Rj((s,/usr/lib/python2.7/site-packages/dnf/base.pyt group_remove_s cC`st|j|jtjtjBtj}y|j|}WnGtjj k r}t j dt |tjj tdnXd}x$|jD]}||j|7}qWx$|jD]}||j|7}qW|S(Nu Warning: %suNo groups marked for removal.i(RRRRRRRRRVRRRRRRRRRRR(R7R;RPRRRRtgrp((s,/usr/lib/python2.7/site-packages/dnf/base.pytenv_group_removees  cC`st|j|jtjtjBtj}|j|}d}x$|jD]}||j|7}qGWx$|j D]}||j |7}qnW|st d}t j j|ndS(NiuNo group marked for upgrade.(RRRRRRRRtenvironment_upgradeRt group_upgradeRRRtCliError(R7R;RPRRRRR((s,/usr/lib/python2.7/site-packages/dnf/base.pytenv_group_upgradeus   cC`s@tjj|st|j}|j|}|j|S(N(RRR5R6Rnt_environment_upgradeRk(R7RR|Rj((s,/usr/lib/python2.7/site-packages/dnf/base.pyRs cC`s@tjj|st|j}|j|}|j|S(N(RRR5R6Rnt_group_upgradeRk(R7RR|Rj((s,/usr/lib/python2.7/site-packages/dnf/base.pyRs cC`s|jjd}tjj|r&dS|jj}tjjj d|}|j tj tj B|j dd}t|}~~|dkrdStjj|}tjj|stj|nt|d}|j~dSdS( uChecks 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 u/.gpgkeyschecked.yumiR(unameu gpg-pubkeyiuwN(R8RRRRR`RR*RR!Rt_RPMVSF_NOSIGNATURESt_RPMVSF_NODIGESTStdbMatchRutdirnametmakedirstopenR;(R7tgpgkeyscheckedR`tmytstidxtkeystmydirtfo((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_gpg_key_checks&    cC`s|j|\}}|j|xp|D]h}tjj|j}|jd|}|dk rw|jd|}n|jj d|d| q)Wt |S(NR+RfRlR{( RWRRRoRpRlRRRRRu(R7RwRfRt already_instROR1RZ((s,/usr/lib/python2.7/site-packages/dnf/base.pyR~s   cC`s<tj}tj}t||t||||fS(u 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 (targparset NamespaceR(R7RRt install_specst exclude_specs((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_categorize_specss    cC`sg|jD]}tjj|r |^q }g|jD]}||kr8|^q8}|jjjd|}|jjjd|}|jj||jj|dS(NR8R(t pkg_specsRRRRlRwRR(R7RRt glob_excludestexcludesRtglob_exclude_query((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_exclude_package_specssc C`st}t|j|jtjtjBtjtjB}x|D]}y|j|}Wn2t j j k r}t j dt|q?nX|j|j|j|jxJ|jD]?}|jj|}x$|jD]} |j| jqWqWq?Wt|S(NuWarning: Module or %s(RRRRRRRRRRRVRRRRRR?RRt_environment_by_idt groups_iterRRURY( R7t group_specsRRPRZRRtenvironment_idt environmentR6((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_expand_groupss"   cC`sx|D]}ym|jj}d|krW|jd}|d}|djd}n|j|g|||j|jWqtjjk r|j d|qXqWdS(Nu/iiu,u@( R8tgroup_package_typestsplitRRt grp_specsRRVRR}(R7RRtskippedRt group_specRR((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_install_groupss    cC`s8|dkrg}ng}g}g}g} |j||\} } |j| xw| jD]l} y#|j| d|d|d|Wq\tjjk rtd} t j | | |j | q\Xq\Wg}d }t r| j ry,tjjj|}|j| j |Wqtjjk r}|jrXx!|jD]}|j |q>Wn|jrx%|jD]}|j d|qkWn|j}qXn | j }|r|jdt|j| j | _ |j|| ||n|s|s|s| s|r4tjjd|d|d |d | d |ndS( NRfRtformsuNo match for argument: %su@Rtno_match_group_specsterror_group_specstno_match_pkg_specsterror_pkg_specstmodule_debsolv_errors((RRRRRRRVt MarkingErrorRRRRR}RhRRrRst ModuleBaset MarkingErrorsRRRR RLRR(R7RRRfRRRRRRRRtspecRtno_match_module_specsRRsR[te_spec((s,/usr/lib/python2.7/site-packages/dnf/base.pyRsR   #    c C`sStjj|}|j|jd|dt}|jjdksQ|j|r|d}|dk rz|j d|n|stj j t d|n|j|d|d|S|jjdkrO|j|d|d |jjd|d td |}|s tj jt d|nx(|D] } |jjd | d | q'WdSdS(u@Mark package(s) given by pkg_spec and reponame for installation.Rtwith_srcualluqueryRfuno package matchedRubestRDtreportstsolutionRlR{iiN(RRyRztget_best_solutionRlRR8R|t_is_arch_specifiedRRxRVtPackageNotFoundErrorRR~t_get_best_selectorsRDRLRRR( R7tpkg_specRfRRRRRPtsltrsRZ((s,/usr/lib/python2.7/site-packages/dnf/base.pyR,s.!       cC`s!|jrd}t|n|jjjjd|jd|jdg}|std}t j ||jt j j td|j|jnt|d|krt jj|j}|jd|g|jjd |d | d Std }t j ||jdSdS( Nu-downgrade_package() for an installed package.R8RHunoarchu.Package %s not installed, cannot downgrade it.uNo match for argument: %siR+RlR{iuCPackage %s of lower version already installed, cannot downgrade it.(t _from_systemtNotImplementedErrorRlRwRMRxR8RHRRRRqRRVRRtsortedRoRpRRR(R7R+RRRPRZ((s,/usr/lib/python2.7/site-packages/dnf/base.pytpackage_downgradeKs  3 ( cC`s|jjj|j|j|j}|j|\}}||kr[|j|gn{|tj j |krt j j td|jnBt jj|j}|jd|g|jjd|d| dS(NuNo match for argument: %sR+RlR{i(RlRwt_nevraR8RMRHRWRRRRRRVRRRRoRpRRR(R7R+RRPRRORZ((s,/usr/lib/python2.7/site-packages/dnf/base.pytpackage_installas' !cC`s|jjjjd|jd|jd|jrJ|jj|dSt d}t j |t |t jjt d|j|jdS(NR8RMRHiu.Package %s not installed, cannot reinstall it.uNo match for argument: %s(RlRwRMRxR8RMRHRRRRRRqRRRVRR(R7R+R((s,/usr/lib/python2.7/site-packages/dnf/base.pytpackage_reinstallos 6 cC`s|jj|dS(Ni(RRq(R7R+((s,/usr/lib/python2.7/site-packages/dnf/base.pytpackage_removewscC`sL|jrd}t|n|jdkrPtd}tj||jdS|jjj j d|j d|jdg}|std}tj ||j t jjtd |j|j nxt|d |kr%t jj|j}|jd |g|jjd |d Std}tj ||j dSdS(Nu+upgrade_package() for an installed package.usrcu<File %s is a source package and cannot be updated, ignoring.iR8RHunoarchu+Package %s not installed, cannot update it.uNo match for argument: %siR+RliuAPackage %s of higher version already installed, cannot update it.(RRRHRRRRRRlRwRMRxR8RqRRVRRRoRpRRRw(R7R+RRPRZ((s,/usr/lib/python2.7/site-packages/dnf/base.pytpackage_upgrade{s(  3 ( c C`s"|jjj}|j|jjjdg|D]}|j^q4}|r|jjjjd|jj|j}|j|}n|j}|dk r|jd|n|j |d|}|rt j j |j}|jd||jjd|ndS(NR8RDRfRR+Rli(RlRwRMRnRxR8ROR{RKRRLRRoRpRRRw( R7RwRDRfRRMR+RPRZ((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_upgrade_internals:  c C`stjj|}|j|j}|d}|rtjj|}| rX|drX|djrX|jjj }|dj}|j d|j |st d} t j| |tjjt d||n|djrXtjj|dj rX|jd|djsUt d} t j| dj||djqUqXn|jjo{|do{|dj} |j|| ||Stjjt d||dS( NuqueryunevraR8u(Package %s available, but not installed.uNo match for argument: %sRHu?Package %s available, but installed for different architecture.u{}.{}(RRyRzRRlRRR8RwRMRxR~RRRRqRVtPackagesNotInstalledErrorRHRRTR8RDt has_just_nameRR( R7RRfRRRPtwildcardRMtpkg_nameRRD((s,/usr/lib/python2.7/site-packages/dnf/base.pyRws,    ' ,cC`s(|j|jj|jj|ddS(NR(RRlRwR8RDR(R7Rf((s,/usr/lib/python2.7/site-packages/dnf/base.pyt upgrade_allscC`s|dkr|jjntjj|}|j|jdt}|dj dt j |j |d|d|j jdt}|stjtd|dSx!|D]}|jjd |qWd S( NRuqueryt reponame__neqRRDRuNo package %s installed.iRli(RRtdistupgrade_allRRyRzRRlRRxRPtSYSTEM_REPO_NAMERR8RDRLRRRRt distupgrade(R7RRyRRRZ((s,/usr/lib/python2.7/site-packages/dnf/base.pyt distro_syncs  c C`s[t|||gr||7}t}|ra|rax^|D]"}td}tj||q8Wn1|r|jdt|j|rt}qnx[|D]S}y|j|d|Wn-t j j k rtj td|qXt}qW|sWtjtdqWnH|j jj|jjd|jj} x| D]} |j| q@WdS(uRemoves 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.uNot a valid form: %sRRuNo match for argument: %suNo packages marked for removal.RpN(tanyRRRRRqR RLRR=RRVRRRlRwRORRPR8RpR( R7RRRt filenamesRtgrp_specRRRR+((s,/usr/lib/python2.7/site-packages/dnf/base.pyRYs0         cC`stjj|j|jd|}g|jD]0}|dks[|jj||kr1|^q1}|stj j d|n|j j }x$|D]}|j j|d|qWt|S(u'Mark the specified package for removal.Runo package matchedRmN(RRyRzR|RlRMRRRXRVRR8RrRRqRu(R7RRfRRXR+RMRm((s,/usr/lib/python2.7/site-packages/dnf/base.pyR=s$ $   cC`stjj|}|j|j}g|jD]0}|dks[|jj||kr1|^q1} |j } |dk r| j d|n|dk r| j d|ntj j | } | stj jd|| jnd} |jj} xr| D]j}y| t|}Wn3tk rR|s9qn|jj|d| nX|jj|| d7} qW| dkrtj jd|| n| S(NRfR uno package matchediRmi(RRyRzR|RlRMRRRXRORxRwt_per_nevra_dictRVRRR8RrRtKeyErrorRRqRtPackagesNotAvailableError(R7Rt old_reponamet new_reponametnew_reponame_neqt remove_naRRPR+Rct available_qtavailable_nevra2pkgRRmt installed_pkgt available_pkg((s,/usr/lib/python2.7/site-packages/dnf/base.pyt reinstalls: $         cC`s |j|S(uMark a package to be downgraded. This is equivalent to first removing the currently installed package, and then installing an older version. (t downgrade_to(R7R((s,/usr/lib/python2.7/site-packages/dnf/base.pyt downgrade<sc C`stjj|}|j|jdtdtdt}|sdtd|}tjj ||nd}|j }t |j j }|jjjjd|} t| dkrtd|}tjj|||nx| j j D]} |jjd| } | sEtd}tj|| qntjj|j} | jd | |jjd | d | d }qW|S( uDowngrade to specific version if specified otherwise downgrades to one version lower than the package installed. RcRdReuNo match for argument: %siR8u6Packages for argument %s available, but not installed.uDPackage %s of lowest version already installed, cannot downgrade it.R+RlR{i(RRyRzR|RlRLRRRVRRORYt _name_dictRRwRMRxRuRt downgradesRRRRqRoRpRRR( R7RRRRPRRtavailable_pkgstavailable_pkg_namest q_installedRtdowngrade_pkgsRZ((s,/usr/lib/python2.7/site-packages/dnf/base.pyRFs0  !  cC`s|jjjd|}|r.||gfStjj|j|}|rY||gfSgddgD]}||^qf}|jjjd||fS(Nt file__globu /usr/bin/u /usr/sbin/(RlRwRxRt _by_provides(R7t provides_spect providerstprefixtbinary_provides((s,/usr/lib/python2.7/site-packages/dnf/base.pyREcs  #c C`syi d tjj6tjjtjj6tjjtjj6d tjj6tjjtjj 6d tjj 6d tjj 6tjjtjj6d tjj6tjjtjj 6d tjj 6}t}x|jD]}y||j}Wn,tk r ttdj|nX|d krqn|tjjkr|jjjjdt|} | stjtdtt|t}qqnU|jjjdt|} | stjtdtt|t}qntjj |j} | j!d| |tjjkr0|j"j#d| q|j"j$d| d| qW|ru|rutj%j&tdnd S( u9Undo the operations on packages by their NEVRAs. :param operations: a NEVRAOperations to be undone :param first_trans: first transaction id being undone :param rollback: True if transaction is performing a rollback :param strict: if True, raise an exception on any errors uAction not handled: {}t nevra_strictuNo package %s installed.uNo package %s available.R+RlR{uno package matchedN('RRRtTransactionItemAction_DOWNGRADEtTransactionItemAction_UPGRADEt TransactionItemAction_DOWNGRADEDtTransactionItemAction_REMOVEtTransactionItemAction_INSTALLtTransactionItemAction_OBSOLETEtTransactionItemAction_OBSOLETEDtTransactionItemAction_REINSTALLt!TransactionItemAction_REINSTALLEDtTransactionItemAction_UPGRADEDt#TransactionItemAction_REASON_CHANGERR-tactionRt RuntimeErrorRRTRlRwRMRxRRRRRRLRRoRpRRRqRRVR( R7t operationst first_transRRt action_mapRRR7RwRo((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_history_undo_operationsmsL        '" !" c C`s9|j s| r|S|jd}x$|jdD]}|j|}q0W|g|_|j|}|s5|r5|j}t|jj}|dkrtdj |}tdj |}t j t |||q2tdj ||}tdj ||}t j t |||q5n|S(u Merge Queries in _update_filters and return intersection with q Query @param q: Query @return: Query iiu3No security updates needed, but {} update availableu4No security updates needed, but {} updates availableu<No security updates needed for "{}", but {} update availableu=No security updates needed for "{}", but {} updates availableN( R3R{RnRKRuRRRRRTRRRqR( R7RPRRqtmerged_queriesRwRtmsg1tmsg2((s,/usr/lib/python2.7/site-packages/dnf/base.pyRLs.            c`s|jjj|jk}|r.gnj}fd}t}|jjjx|D]}tjj |} x| D]}} t j |j | j | jdkrtd} tj| || jqn|jjr;tjjj| j| j} tjjj| } tjtjj| | n|| _tjj| t}|jjrot}n|jj r|jjr| tjj!j"tjj!j#fkrt$}tjtjj%tdqt}tjtjj%tdqpt$}nl|rO|id6| jd6| jd6|d 6| j&d 6| jd 6}n!|rp|| j| j}n|st$}qntj'j(j)|jj*}|j+t j,| j}|dkrtd |} tj-j.|| ntjtd t$}qWqiW| r8|r8tj-j.tdn|sltdj/} tj-j.|| n|j0\}}|dkr|rtd} tj| nt1|}tj-j.||ndS(uRetrieve 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 *askck* 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 c`s<|tdd7}|tddjj7}|S(Nu. Failing package is: %su uGPG Keys are configured as: %su, (RRR (R(R%RX(s,/usr/lib/python2.7/site-packages/dnf/base.pyt_prov_key_datas iu)GPG key at %s (0x%s) is already installeduThe key has been approved.uThe key has been rejected.upouuseriduhexkeyidukeyurlu fingerprintu timestampuKey import failed (code %d)uKey imported successfullyuDidn't install any keysuThe 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.u+Import of key(s) didn't help, wrong key(s)?N(2RiRRUR5R RRRtcryptotretrieveR t keyInstalledRtrpm_idt timestampRRRRtshort_idR8RRtKeyInfotfrom_rpm_key_objecttuseridtraw_keytDNSSECKeyVerificationtverifyt nice_user_msgturltlog_key_importtassumenot assumeyestValiditytVALIDtPROVEN_NONEXISTENCERLtany_msgt fingerprintR*RRR`tpgpImportPubkeyt procgpgkeyRVRR8R,R(R7R%taskcbt fullaskcbt key_installedtkeyurlsR@t user_cb_failtkeyurlRRRt dns_input_keyt dns_resulttrctts_import_instanceR+terrmsg((R%RXs,/usr/lib/python2.7/site-packages/dnf/base.pyt_get_key_for_packages~  $       ""          cC`sDg}|jjx*|jjD]}|jt|q#W|S(N(RR&tproblemsR}R(R7tresultstprob((s,/usr/lib/python2.7/site-packages/dnf/base.pyRA s  uw+bcK`stjj||j|||S(u Open the specified absolute url, return a file object which respects proxy setting even for non-repo downloads (RRt_urlopenR8(R7RNRXtmodetkwargs((s,/usr/lib/python2.7/site-packages/dnf/base.pyturlopenL scC`s:|dkr|jj}n|jd|jj}|S(NRE(RRRwRR8R(R7RPR((s,/usr/lib/python2.7/site-packages/dnf/base.pyR>T s cC`stjj|dt}|j|jdtdtdt}|dr|dr|djr||ddjkrtj t dj |ddjndS( NR/RcRdReuqueryunevraiu * Maybe you meant: {}( RRyRzRLRRlRR8RRRRRT(R7RRR((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_report_icase_hintZ s !cC`sd}g}g}xL|D]D}|jrS|jtjkr`|j|q`q|j|qWtd}|||stjjtdn|j j rtd}|||stjjtdng}n||fS(u  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 cS`st}x~|D]v}t}y|j}Wn&tk rQ}tjt|nX|tk r tj|j||jt}q q W|S(N( RLRtverifyLocalPkgRQRRRRRTRf(tpkg_listt logger_msgtall_packages_verifiedR+tpkg_successfully_verifiedR[((s,/usr/lib/python2.7/site-packages/dnf/base.pyt_verification_of_packagesi s   u>Package "{}" from local repository "{}" has incorrect checksumu;Some packages from local repository have incorrect checksumu8Package "{}" from repository "{}" has incorrect checksumuVSome packages have invalid cache, but cannot be downloaded due to "--cacheonly" option( t _is_local_pkgRfRPtCMDLINE_REPO_NAMER}RRRVRR8R(R7t install_pkgsRrRRR+R((s,/usr/lib/python2.7/site-packages/dnf/base.pyRb s&         cC`sx|D]}t|qWdS(N(t_msg_installed(R7R-R+((s,/usr/lib/python2.7/site-packages/dnf/base.pyR s N((((t__name__t __module__RR9R:R=R>RBR\t staticmethodRRRRtpropertyRR8RitdeleterRRtlazyattrRRlRnRtsetterRRRRRRLRRR;RRRR*tRPMTRANS_FLAG_NOSCRIPTStRPMTRANS_FLAG_NOTRIGGERStRPMTRANS_FLAG_NODOCSRtRPMTRANS_FLAG_JUSTDBtRPMTRANS_FLAG_NOCONTEXTStRPMTRANS_FLAG_NOFILEDIGESTRRtRPMTRANS_FLAG_NOCAPSRRRRRR R#RRLRWR[R^RhRRRRRRRRRR,RR>R4RkRvRiRnRRtDEFAULTt MANDATORYtOPTIONALt CONDITIONALRRRRRRRRRRR~RRRRRRRRRRRRRwRR RYR=RRRRER<RLRdRRkR>RlRR(((s,/usr/lib/python2.7/site-packages/dnf/base.pyR Xs       P      5;             '     E     8 ]   q ' B ; )   ;     &         0         %&  ; y    -cC`s,t|}td}tj||dS(Nu Package %s is already installed.(RRRRR(R+R8R((s,/usr/lib/python2.7/site-packages/dnf/base.pyRv s  (Gt__doc__t __future__RRRRRRtlibdnf.transactionRt dnf.compsRtdnf.i18nRRRtdnf.utilRtdnf.db.historyR tdnf.yumR R7R tcollections.abcR t ImportErrort collectionsRt dnf.callbacktdnf.conft dnf.conf.readt dnf.cryptot dnf.dnssectdnf.drpmtdnf.exceptionstdnf.goalt dnf.historytdnf.lockt dnf.loggingtdnf.module.module_baseRLRhRt dnf.persistort dnf.plugint dnf.querytdnf.repot dnf.repodicttdnf.rpm.connectiontdnf.rpm.miscutilstdnf.rpm.transactiontdnf.sackt dnf.selectort dnf.subjecttdnf.transactiontdnf.yum.rpmtransRPRR$RRRR*RRt getLoggerRRtobjectR Rv(((s,/usr/lib/python2.7/site-packages/dnf/base.pyts                                             D