3 gt`@sVddlmZddlmZddlmZddlZGdddejZGdddej j Z dS) )absolute_import)unicode_literals)_Ncs eZdZdZfddZZS) RepoClosure repoclosurecs,tt|j|||dkrdS|jtdS)N)superr__init__Zregister_commandRepoClosureCommand)selfbasecli) __class__!/usr/lib/python3.6/repoclosure.pyr!szRepoClosure.__init__)__name__ __module__ __qualname__namer __classcell__rr)r rrsrc@s>eZdZd ZedZddZddZd dd Ze d d Z dS)r rz:Display a list of unresolved dependencies for repositoriescCsd|jj}d|_d|_|jjr`xB|jjjD]2}|j |jjkrT|j |jj krT|j q*|j q*WdS)NT) r demandsZsack_activationZavailable_reposoptsrepor reposallidcheckdisableenable)r rrrrr configure,s zRepoClosureCommand.configurecCs|jjr|j|jj}n|j}xRt|jD]B}tdjt||jtdx||D]}tdj|qZWq.Wt |dkrt d}t j j |dS)Nzpackage: {} from {}z unresolved deps:z {}rz/Repoclosure ended with unresolved dependencies.)rarches_get_unresolvedsortedkeysprintformatstrreponamelenrdnf exceptionsError)r unresolvedpkgZdepmsgrrrrun7s zRepoClosureCommand.runNcsLi}t}|jjr|jjjjdd|jjjjdd}xv|jjjD]D}j |jjjj|j dj |j |jjjj|j dj }qHWn |jjjj |jjjj }|jj rN|jjjjdd}g}xT|jj D]H}tjj|} |j| j|jjdddd} | r|j | }q|j|qW|rJtjjtddj||}|jjrh|j|jjd|dk r~|j|d|jjjrjdd j|jxf|D]^}t||<xL|jD]B} t| } | jd s| jd rq|j | ||j | qWqWtfd d |Dfdd|j!D} dd| j!DS)NT)empty)r&F)Z with_nevraZ with_providesZwith_filenameszno package matched: %sz, )arch)Zlatest_per_archz solvable:zrpmlib(c3s|]}j|ds|VqdS))ZprovidesN)filter).0x) availablerr sz5RepoClosureCommand._get_unresolved..cs(i|] \}}tfdd|D|qS)c3s|]}|kr|VqdS)Nr)r2r3)unresolved_depsrrr5sz@RepoClosureCommand._get_unresolved...)set)r2kv)r6rr sz6RepoClosureCommand._get_unresolved..cSsi|]\}}|r||qSrr)r2r8r9rrrr:s)"r7rZnewestr ZsackZqueryr1rZ iter_enabledunionrZlatestr4pkglistr(ZsubjectZSubject intersectionZget_best_queryappendr)r*rjoinrZfiltermZconfZbestZapplyZrequiresr% startswithadditems)r r0r+ZdepsZto_checkrZ pkglist_qerrorsr,ZsubjZpkg_qZreqZreqnameZunresolved_transitionr)r4r6rr Es\ &                  z"RepoClosureCommand._get_unresolvedcCs`|jdgddtdd|jdgdtdd|jd d d td d |jdgdtddddS)Nz--archr>rzBcheck packages of the given archs, can be specified multiple times)defaultactiondesthelpz--checkzSpecify repositories to check)rDrErGz-nz--newest store_truez+Check only the newest packages in the repos)rErGz--pkgz#Check closure for this package onlyr<)rDrErGrF) add_argumentr)parserrrr set_argparsers       z RepoClosureCommand.set_argparser)r)N) rrraliasesrZsummaryrr.r staticmethodrKrrrrr (s   Qr ) Z __future__rrZdnfpluginscorerZdnf.clir(ZPluginrr ZCommandr rrrrs