3 gt`,@sjddlmZddlmZddlZddlmZddlZddlm Z Gdddej Z Gdd d ej j ZdS) )absolute_import)unicode_literalsN) OptionParser)_cs eZdZdZfddZZS)RepoDiffrepodiffcs,tt|j|||dkrdS|jtdS)N)superr__init__Zregister_commandRepoDiffCommand)selfbasecli) __class__/usr/lib/python3.6/repodiff.pyr $szRepoDiff.__init__)__name__ __module__ __qualname__namer __classcell__rr)rrr src@sLeZdZdZedZeddZddZddZ d d Z d d Z d dZ dS)r rz1List differences between two sets of repositoriesc Cs|jddgddtdd|jddgdd td d|jd d d gtjdtdd|jdddtdd|jddtdd|jddtdd|jddtdddS)Nz --repo-oldz-oappendoldz2Specify old repository, can be used multiple times)defaultactiondesthelpz --repo-newz-nnewz2Specify new repository, can be used multiple timesz--archz --archlistz-aarcheszhSpecify architectures to compare, can be used multiple times. By default, only source rpms are compared.z--sizez-s store_truez5Output additional data about the size of the changes.)rrz--compare-archzMCompare packages also by arch. By default packages are compared just by name.z--simplez7Output a simple one line message for modified packages.z --downgradezNSplit the data for modified packages between upgraded and downgraded packages.) add_argumentrrZ_SplitCallback)parserrrr set_argparser/s         zRepoDiffCommand.set_argparsercCs|jj}d|_d|_d|_dg|jj_|jj s:|jj rNt d}t j j|x<|jjjD],}|j|jj |jj kr|jq\|jq\W|jjsdg|j_dS)NTallz*Both old and new repositories must be set.src)r demandsZsack_activationZavailable_repos changelogsr ZconfZdisable_excludesoptsrrrdnf exceptionsErrorZreposr"idenabledisabler)r r$msgZreporrr configureMs    zRepoDiffCommand.configurecCs|jjr|j|jfS|jS)N)r& compare_archrarch)r pkgrrr_pkgkey`s zRepoDiffCommand._pkgkeyc s6tfdd|Dtj}tfdd|Dtj}t}x:|j|dD]*}x$|j|jdD]}||j|<qlWqXWjjj}tfdd||Dfdd||D|ggd} xj|j |D]\} | } | } | j | j krq|| j | j d kr| d j | | fq| d j | | fqW| S) aNcompares packagesets old and new, returns dictionary with packages: added: only in new set removed: only in old set upgraded: in both old and new, new has bigger evr downgraded: in both old and new, new has lower evr obsoletes: dictionary of which old package is obsoleted by which new csg|]}j||fqSr)r2).0p)r rr msz-RepoDiffCommand._repodiff..csg|]}j||fqSr)r2)r3r4)r rrr5os) obsoletes)Zprovidescsg|] }|qSrr)r3k)new_drrr5zscsg|] }|qSrr)r3r7)old_drrr5{s)addedremovedr6upgraded downgradedrr=r<) dictsetkeysfilterr6r2r sackevr_cmp intersectionevrr) r rrZold_keysZnew_keysr6Z obsoleterZ obsoletedrCrr7pkg_oldpkg_newr)r8r9r r _repodiffes0    zRepoDiffCommand._repodiffc shfdddd}fdd}tddddd}x.pkgstrcSsXt|}|dkr.|djtjjj|j7}n&|dkrT|djtjjj| j7}|S)Nrz ({})z (-{}))rIformatr'r Z format_numberstrip)Znumr-rrrsizestrs z(RepoDiffCommand._report..sizestrcsBg}jjr*|jd||fn|jd|jd||f|jdt|d |jrv|jd}nd}x|jD]}|r|d|dkrPn2|d|dkr|d|dkr|d|dkrP|jd |djd tjj|dtjj|dfqWjj r0|jt d j |j |j t d j |dS)Nz%s -> %s-rZ timestampZauthortextz * %s %s %sz %a %b %d %YzSize change: {} bytes )r&Zsimplerlenr%Zstrftimer'Zi18nZucdsizerrKprintjoin)rFrGZmsgsZ old_chlogZchlog)rJr rrreport_modifieds2      z0RepoDiffCommand._report..report_modifiedr)r:r;r<r=r:zAdded package : {}r;zRemoved package: {}r6zObsoleted by : {}r<z Upgraded packagesr=z Downgraded packagesz Modified packagesz SummaryzAdded packages: {}zRemoved packages: {}zUpgraded packages: {}zDowngraded packages: {}zModified packages: {}zSize of added packages: {}zSize of removed packages: {}zSize of modified packages: {}zSize of upgraded packages: {}zSize of downgraded packages: {}zSize change: {}) r>sortedrVrrKrUgetr2r&Z downgraderT) r rrMrXZsizesr1Z obsoletedbyrFrGZmodifiedr)rJr r_reportsf                zRepoDiffCommand._reportcCs|jjjtjj|jjd}|jjjtjj|jjd}|jj rld|jj krl|j |jj d|j |jj d|jj r|j dd|j ddn|j dd|j dd|j |j |j |j||dS)N)Zreponame*)r0rP)Zlatest_per_arch)Zlatest)r rBZqueryhawkeyZIGNORE_EXCLUDESrAr&rrrZfiltermr/Zapplyr[rH)r Zq_newZq_oldrrrruns     zRepoDiffCommand.runN)r) rrraliasesrZsummary staticmethodr!r.r2rHr[r^rrrrr +s &ar )Z __future__rrZdnf.clir'Zdnf.cli.option_parserrr]ZdnfpluginscorerZPluginrr ZCommandr rrrrs