ó ¾[/\c@@sddlmZddlmZddlmZddlmZddlmZddlm Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZe jdƒZd Ze jd ƒZd Zi d d 6d d 6dd6dd6dd6dd6dd6dd6dd6Zd„Zdejfd„ƒYZdefd„ƒYZdS(i(tabsolute_import(tprint_function(tunicode_literals(t_(tcommands(t OptionParserNudnfu.%{name}-%{epoch}:%{version}-%{release}.%{arch}u%(-?\d*?){([:.\w]+?)}uû name, arch, epoch, version, release, reponame (repoid), evr, debug_name, source_name, source_debug_name, installtime, buildtime, size, downloadsize, installsize, provides, requires, obsoletes, conflicts, sourcerpm, description, summary, license, url u conflictsuenhancesu obsoletesuprovidesu recommendsurequiresu requires_preu requires-preusuggestsu supplementscC@sÖd„}d„}|jddƒjddƒ}x,tjƒD]\}}|j||ƒ}q=Wd}d}xPtj|ƒD]?}|||||jƒ!ƒ7}|||ƒ7}|jƒ}q{W||||ƒ7}|S( u:Convert a rpm like QUERYFMT to an python .format() string.cS@st|jƒd}|jƒd}|r^|ddkrGd|d}n d|}d|}nd|jƒ|dS( Niiu-u>u/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pytfmt_replEs  cS@s|jddƒjddƒS(Nu{u{{u}u}}(treplace(ttxt((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pytbracketsPsu\nu u\tu ui(R t OPTS_MAPPINGtitemst QFORMAT_MATCHtfinditertstarttend(t queryformatR RR tvaluetfmttspostitem((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pyt rpm2py_formatCs tRepoQueryCommandcB@sÞeZdZiejd6ejd6ejd6Zdeej ƒƒZ e dƒZ e d„ƒZe d„ƒZd„Zd „Zd „Zdeed „Zd „Zdd „Zd„Zd„Zd„Zddd„ZRS(uSA class containing methods needed by the cli to execute the repoquery command. u repoquery-nu repoquery-naurepoquery-nevrau repoqueryu$search for packages matching keywordcC@sB|jr|jd|jƒn|jr>|jd|jƒn|S(u'Filter query by repoid and arch optionstreponametarch(trepotfiltermtarches(toptstquery((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pytfilter_repo_archjs   cC@s>|jddddtdƒƒ|jdddd d d dtd ƒƒ|jd d d dtdƒƒ|jdddddgd tjdddtdƒƒ|jdddddddtdƒƒ|jddddtdƒƒ|jddddtdƒƒ|jd dddtd!ƒƒ|jd"dddtd#ƒƒ|jd$dddtd%ƒƒ|jd&dddtd'ƒƒ|jd(dddtd)ƒƒ|jd*dddtd+ƒƒ|jd,dddtd-ƒƒ|jƒ}|jd.d d dtd/ƒƒ|jd0d d dtd1ƒƒ|jd2d d dtd3ƒƒ|jd4d d dtd5ƒƒ|jd6d d dtd7ƒƒ|jd8d d dtd9ƒƒ|jd:d d dtd;ƒƒ|jd<d d dtd=ƒƒ|jd>dd?d@tdtdAƒƒ|jƒ}|jdBdCddDdtd d dtdEƒƒ|jdFdGddHdtd d dtdIƒƒ|jdJdKddLdtd d dtdMƒƒ|jdNddOdtd d dtdPƒƒ|jdQdRddSdtdtdTƒƒ|jdUddSdVtd dWdtdXƒƒ|jdYddSdVdZd dWdtd[ƒƒ|jd\ddSdVd]d dWdtd^ƒƒ|jd_d d dtd`ƒƒ|jƒ}|jdaddbdVdcd dWdtddƒƒ|jdeddbdVdcd dWdtj ƒ|jdfddbdVdgd dWdtdhƒƒ|jdiddbdVdjd dWdtdkƒƒ|jdld d dtdmƒƒ|jƒ}i tdnƒdo6tdpƒdq6tdrƒds6tdtƒdu6tdvƒdw6tdxƒdy6tdzƒd{6td|ƒd}6td~ƒd6}xI|j ƒD];\}}d€|}|j|ddd dWdV|d|ƒqöW|jd‚d d dtdƒƒƒitd„ƒd…6td†ƒd‡6tdˆƒd‰6tdŠƒd‹6tdŒƒd6} |jƒ} xI| j ƒD];\} } d€| } | j| ddŽd dWdV| d| ƒq´W| jdddŽd dWdVd‹dtj ƒ|jdd d dtd‘ƒƒdS(’Nukeytnargsu*thelputhe key to search foru-au--alltdestuqueryalltactionu store_trueuNQuery all packages (shorthand for repoquery '*' or repoquery without argument)u--show-duplicatesu(Query all versions of packages (default)u--archu --archlistuarchestdefaulttmetavaru[arch]u show only results from this ARCHu-fu--fileuFILEu+u show only results that owns FILEu--whatconflictsuREQu#show only results that conflict REQu --whatdependsuishows results that requires, suggests, supplements, enhances,or recommends package provides and files REQu--whatobsoletesu#show only results that obsolete REQu--whatprovidesu"show only results that provide REQu--whatrequiresu:shows results that requires package provides and files REQu--whatrecommendsu$show only results that recommend REQu--whatenhancesu"show only results that enhance REQu--whatsuggestsu"show only results that suggest REQu--whatsupplementsu%show only results that supplement REQu --alldepsu=check non-explicit dependencies (files and Provides); defaultu --exactdepsu:check dependencies exactly as given, opposite of --alldepsu --recursiveuOused with --whatrequires, and --requires --resolve, query packages recursively.u --deplistu>show a list of all dependencies and what packages provide themu --querytagsu-show available tags to use with --queryformatu --resolveu.resolve capabilities to originating package(s)u--treeu"show recursive tree for package(s)u--srpmu#operate on corresponding source RPMu--latest-limitu latest_limitttypeuOshow N latest packages for a given name.arch (or latest but N if N is negative)u-iu--infou queryinfou+show detailed information about the packageu-lu--listu queryfilelistu!show list of files in the packageu-su--sourceuquerysourcerpmushow package source RPM nameu --changelogsuquerychangelogsushow changelogs of the packageu--qfu --queryformatu queryformatu$format for displaying found packagesu--nevratconstu store_constuZuse name-epoch:version-release.architecture format for displaying found packages (default)u--nvru%{name}-%{version}-%{release}uQuse name-version-release format for displaying found packages (rpm query default)u--envrau.%{epoch}:%{name}-%{version}-%{release}.%{arch}uPuse epoch:name-version-release.architecture format for displaying found packagesu --groupmemberu=Display in which comps groups are presented selected packagesu --duplicatesu pkgfilteru duplicatedu/limit the query to installed duplicate packagesu --duplicatedu --installonlyu installonlyu1limit the query to installed installonly packagesu --unsatisfiedu unsatisfieduClimit the query to installed packages with unsatisfied dependenciesu --locationu5show a location from where packages can be downloadedu5Display capabilities that the package conflicts with.u conflictsuaDisplay capabilities that the package can depend on, enhance, recommend, suggest, and supplement.udependsu2Display capabilities that the package can enhance.uenhancesu-Display capabilities provided by the package.uprovidesu1Display capabilities that the package recommends.u recommendsu1Display capabilities that the package depends on.urequiresuLDisplay capabilities that the package depends on for running a %%pre script.u requires-preu/Display capabilities that the package suggests.usuggestsu5Display capabilities that the package can supplement.u supplementsu--%su packageatru --availableu Display only available packages.u Display only installed packages.u installeduLDisplay only packages that are not present in any of available repositories.uextrasuQDisplay only packages that provide an upgrade for some already installed package.uupgradesuFDisplay only packages that can be removed by "dnf autoremove" command.uunneededu2Display only packages that were installed by user.u userinstalledulistu --autoremoveu--recentu%Display only recently edited packages( t add_argumentRRt_SplitCallbacktadd_mutually_exclusive_grouptinttFalsetQFORMAT_DEFAULTtargparsetSUPPRESSR(tparsertwhatrequiresformtoutformt pkgfiltertpackage_attributet help_msgstargthelp_msgtnamet help_listt list_grouptlist_argthelp_argtswitch((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pyt set_argparserssò                                                               cC@s@|jj r<|jj r<|jjdtjdtjƒndS(Ntstdouttstderr(R!tverbosetquiettclitredirect_loggertloggingtWARNINGtINFO(tself((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pyt pre_configureÿscC@s½|jj r*|jj r*|jjƒn|jj}|jjr}|jjrn|jjdd|jjƒq}d|j_n|jj rdS|jj rÁ|jj rÁt jj t dƒƒ‚n|jjr=|jjrï|jjddƒnt|jj|jjdko|jj gƒs=t jj t dƒƒ‚q=n|jjr\|jjjƒn|jjd kr€|jjd ksŒ|jjr˜t|_nt|_|jjr¹t|_ndS( Nu --obsoletesu--u obsoletesuÊOption '--resolve' has to be used together with one of the '--conflicts', '--depends', '--enhances', '--provides', '--recommends', '--requires', '--requires-pre', '--suggests' or '--supplements' optionsu --recursiveu --exactdepsurequiresužOption '--recursive' has to be used with '--whatrequires ' (optionaly with '--alldeps', but not with '--exactdeps'), or with '--requires --resolve'u installedu userinstalledu installonly(u installedu userinstalled(R!RERFRGtredirect_repo_progresstdemandst obsoletest packageatrt_option_conflictt querytagstresolvetdnftCliErrorRt recursivet exactdepstanyt whatrequirestsrpmtbasetrepostenable_source_repostlistR7t availabletTruetavailable_repostsack_activationtquerychangelogst changelogs(RLRO((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pyt configures6         $     c C@sY|jr”g}|jdt|ƒƒx^|jD]S}|d}|jd|jdƒtjj|dƒtjj|dƒfƒq0Wdj|ƒSy“t |ƒ}|j r¿|j j j |ƒS|jr|j}|süttdƒj|ƒd tjƒn|S|jr|jSt|jƒj|ƒSWn+tk rT}tjjt|ƒƒ‚nXdS( NuChangelog for %su timestampu * %s %s %s u %a %b %d %Yuauthorutextu uPackage {} contains no filestfile(RdtappendtstrRetstrftimeRUti18ntucdtjointPackageWrappert queryinfoR\toutputt infoOutputt queryfilelisttfilestprintRtformattsysRDtquerysourcerpmt sourcerpmRRtAttributeErrort exceptionstError( RLR!tpkgtouttchlogtdttpotfilelistte((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pytbuild_format_fn-s.       % c C@s˜|r |n|jjjƒjdtƒ}|jjjƒjdtƒ}tƒ}tƒ}xP|jƒD]B} | j} |j| ƒ|j| j ƒ|rg|j| ƒqgqgW|j |j d|ƒƒ}|r=|j |j d|ƒƒ}|j |j d|ƒƒ}|j |j d|ƒƒ}|j |j d|ƒƒ}n|r‹|j |ƒ}|r‹|j ||d|j |ƒd|d |ƒ}q‹n|j |ƒS( Ntemptytrequirest recommendstenhancest supplementstsuggeststdoneRWtall_deps(R\tsackR"RRatsettruntprovidestupdateRstuniontfiltert differencet_get_recursive_deps_query( RLtquery_int query_selectRŠRWR‹ttt set_requirest set_all_depsR|t pkg_provides((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pyR”Is,*    c C@s*|p |}|jtjj|ƒj|jjdtdtƒƒ}|jd|ƒ}|rÉ|j |jd|ƒƒ}|j |jd|ƒƒ}|j |jd|ƒƒ}|j |jd|ƒƒ}n|j |j ||d|ƒƒ}|j j r&|j |j ||d |j j d|ƒƒ}n|S( Nt with_providestwith_filenamestrequires__globtrecommends__globtenhances__globtsupplements__globtsuggests__globR‹RW( t intersectionRUtsubjecttSubjecttget_best_queryR\RŒR0R’R‘R”R!RW(RLt requires_namet depends_nameR"R<t defaultqueryt requiresqueryRŠ((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pyt by_all_depsds     cC@sÃ|r |n|jjjƒjdtƒ}|jjjƒjdtƒ}x2|jƒD]$}|j|jd|jƒƒ}qUW|j |ƒ}|r¶|j ||d|j|ƒƒ}n|j|ƒS(NR„RRŠ( R\RŒR"RRaRŽR‘R’R…R“t_get_recursive_providers_query(RLR•t providersRŠR—R|R–((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pyR«ws*"$c C@sÝ |jjr*ttdƒƒttƒdS|jj|j|jjj ƒƒ|jjj ƒ}|jj r5i}g|jj D].}|t |j jƒƒkr}|j |^q}}|rÄ||dr|j4d|jj>ƒn|jj?r(|j4d|jj?ƒn|jj@rM|j4d|jj@ƒn|jjArq|jB|jjAƒ}n|jjC|dtƒ}|jjDr"g}xc|D][}|jE}|dk r¢|jjj ƒj4d|d|jGdd ƒ}||j.ƒ7}q¢q¢W|jjj ƒj4d!|ƒ}n|jjHr‚|jj: rh|jjId3krhtjjtd*ƒƒ‚n|jJ|| |jƒdStKƒ}|jjIrF tKƒ}xŸ|j.ƒD]‘}|jj d ksÚ|jj!jL|ƒr­|jjId+kr|jM|jN|jO|jP|jQ|jRƒq>|jMt#|tS|jjIƒƒq­q­W|jjTr, |jj dkr„|j2|j|jjj ƒƒ}n'|j2|j|jjj ƒjƒƒ}|jd,|ƒ}|jjUrç|j|jV||ƒƒ}ntKƒ}xP|jBƒj.ƒD]"}|jW|jX|j|ƒƒq Wq |jMd-„|DƒƒnI|jjYr” x:|j.ƒD].}|jZƒ}|dk r_ |jW|ƒq_ q_ Wnû|jj[r g}xLt\tK|j.ƒƒƒD]2}|jj d ksì |jj!jL|ƒr¿ g}|j]d.t^|ƒƒxÌt\g|jND]}t^|ƒ^q ƒD]¢}|j]d/|ƒtjj|ƒ}|j|jjƒ}|j2|j|jƒƒ}|jj_s¦ |jBƒ}nx+|j.ƒD]}|j]d0t^|ƒƒq³ Wq2 W|j]d1j`|ƒƒq¿ q¿ W|r td2j`|ƒƒndS|jjar2 |jb|ƒdSxZ|j.ƒD]L}|jj d ksl |jj!jL|ƒr? |jW|jX|j|ƒƒq? q? W|rÙ |jjcr½ td2j`t\|ƒƒƒqÙ td1j`t\|ƒƒƒndS(4Nu6Available query-tags: use --queryformat ".. %{tag} .."uformsR„t ignore_caseR›u installedu)argument {}: not allowed with argument {}u --availableu--uunneededu userinstalledu duplicatedu installonlyu unsatisfiedtverifyt file__globt conflictsRPtprovides__globu;argument {} requires --whatrequires or --whatdepends optionu --alldepsu --exactdepsRRžRŸR R¡twarningR<tevrRusrcR|u conflictsuenhancesu obsoletesuprovidesu recommendsurequiresusuggestsu supplementsuñNo valid switch specified usage: dnf repoquery [--conflicts|--enhances|--obsoletes|--provides|--recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--tree] description: For the given packages print a tree of the packages.udependsRcs@s|]}t|ƒVqdS(N(Ri(t.0trel((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pys su package: u dependency: u provider: u u (u conflictsuenhancesu obsoletesuprovidesu recommendsurequiresusuggestsu supplements(dR!RSRtRt QUERY_TAGSRGt _populate_update_security_filterR\RŒR"R tcommandR_t nevra_formstkeysR’RaR‘RUR£R¤R¥R0trecentt_recenttconfR`t optparsert print_usageRzR{Rut _unneededthistorytswdbtgetattrR7t_get_installonly_queryR“t duplicatedt _rpmdb_sackt _configuretinstallonlypkgstinstallonly_limittgoaltGoalRŽtutilt_format_resolve_problemst problem_rulesR#RgRt whatconflictst whatobsoletest whatprovidestalldepsRXRZt whatdependsRªtwhatrecommendst whatenhancestwhatsupplementst whatsuggestst latest_limittlatestt_merge_update_filtersR[t source_nametNoneR³ttreeRQt tree_seedRtuser_installedRR…R‡R‰RˆR†RRTRWR«taddRƒtlocationtremote_locationtdeplisttsortedRhRiRERmt groupmembert_group_member_reportRo(RLtqtkwarkR¸tformstpkgst query_resultsR t installonlytrpmdbRÊtsolvedtorquerytquery_for_providet dependsquerytpkg_listR|tsrcnamet tmp_querytrelsR"R¬Rátdeplist_outputtreqR£tprovider((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pyRŽsB  " .    ""        $ $ $$         $ !      ')' $'  #    '/   '# c C@s¼|jjdtƒi}xF|jjjD]5}tg|jƒD]}|j^q?ƒ||j/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pyRæ=s,3+Dc C@sÌ|j||ƒ}|dkr,t|ƒdSd}x!td|ƒD]}|d7}qBWg}x$|jD]}|jt|ƒƒqfWdtt|ƒƒddj|ƒd} t|d |d| ƒdS( Niÿÿÿÿu iu| u[u: u, u]u\_ (RƒRttrangeR…RhRitlenRm( RLtlevelR|R!t pkg_stringtspacingtxR…t reqirepkgtreqstr((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pyt grow_treeVs  +iÿÿÿÿc C@s­x¦tt|jƒƒdd„ƒD]ƒ}|dks@|dkrItƒn|}|jjdƒss|jjdƒrwdS|j|||ƒ||kr"|j|ƒ|jrOt ||jƒ}i}x[t|ƒD]M} |j j j ƒj d| ƒ} x&| D]} | || jd| j/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pytesiÿÿÿÿurpmlibusolvableRu.R|Ri(RäRRŽRÜR<t startswithRRàRQRÃR\RŒR"RRR_tvaluesRÒRªR’RÞ( RLR"taqueryR!R tusedpkgsR|tstrpkgtarR<tpkgquerytquerypkg((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pyRÞds$('$     -!(u repoqueryN(t__name__t __module__t__doc__thawkeyt FORM_NAMEtFORM_NAt FORM_NEVRAR¹ttupleRºtaliasesRtsummaryt staticmethodR#RBRMRfRƒRÜR0R”RªR«RŽRæRRÞ(((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pyR`s&     Œ  *    ¼  RncB@sMeZdZd„Zd„Zed„ƒZed„ƒZed„ƒZ RS(u>Wrapper for dnf.package.Package, so we can control formatting.cC@s ||_dS(N(t_pkg(RLR|((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pyt__init__~scC@sNt|j|ƒ}t|tƒr>djtd„|DƒƒƒStjj|ƒS(Nu cS@s"h|]}tjj|ƒ’qS((RURkRl(R´treldep((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pys „s ( RÃR&t isinstanceR_RmRäRURkRl(RLtattrtatr((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pyt __getattr__scC@s3|dkr+tjj|ƒ}|jdƒSdSdS(Niu%Y-%m-%d %H:%Mu(tdatetimetutcfromtimestampRj(t timestampR((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pyt_get_timestamp‡s  cC@s|j|jjƒS(N(R0R&t buildtime(RL((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pyR1scC@s|j|jjƒS(N(R0R&t installtime(RL((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pyR2“s( RRRR'R,R%R0tpropertyR1R2(((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pyRnzs   ( t __future__RRRtdnf.i18nRtdnf.cliRtdnf.cli.option_parserRR2R-RItreRvRUtdnf.exceptionst dnf.subjecttdnf.utilRt getLoggertloggerR1tcompileRR¶RRtCommandRtobjectRn(((s>/usr/lib/python2.7/site-packages/dnf/cli/commands/repoquery.pytsF             ÿÿ