3 šgt`Ó,ã@sjddlmZddlmZddlZddlmZddlZddlm Z Gdd„dej ƒZ Gdd „d ej j ƒZdS) é)Úabsolute_import)Úunicode_literalsN)Ú OptionParser)Ú_cs eZdZdZ‡fdd„Z‡ZS)ÚRepoDiffÚrepodiffcs,tt|ƒj||ƒ|dkrdS|jtƒdS)N)ÚsuperrÚ__init__Zregister_commandÚRepoDiffCommand)ÚselfÚbaseÚcli)Ú __class__©ú/usr/lib/python3.6/repodiff.pyr $szRepoDiff.__init__)Ú__name__Ú __module__Ú __qualname__Únamer Ú __classcell__rr)rrr src@sLeZdZdZedƒZedd„ƒZdd„Zdd„Z d d „Z d d „Z d d„Z dS)r rz1List differences between two sets of repositoriesc Cs¨|jddgddtdƒd�|jddgdd td ƒd�|jd d d gtjdtdƒd�|jdddtdƒd�|jddtdƒd�|jddtdƒd�|jddtdƒd�dS)Nz --repo-oldz-oÚappendÚoldz2Specify old repository, can be used multiple times)ÚdefaultÚactionÚdestÚhelpz --repo-newz-nÚnewz2Specify new repository, can be used multiple timesz--archz --archlistz-aÚarcheszhSpecify 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<|jjjƒD],}|j|jj |jj kr€|jƒq\|jƒq\W|jjsždg|j_dS)NTÚallz*Both old and new repositories must be set.Úsrc)r ÚdemandsZsack_activationZavailable_reposÚ changelogsr ZconfZdisable_excludesÚoptsrrrÚdnfÚ exceptionsÚErrorZreposr"ÚidÚenableÚdisabler)r r$ÚmsgZreporrrÚ configureMs    zRepoDiffCommand.configurecCs|jjr|j|jfS|jS)N)r&Ú compare_archrÚarch)r ÚpkgrrrÚ_pkgkey`s zRepoDiffCommand._pkgkeyc s6t‡fdd„|Dƒƒ‰tˆjƒƒ}t‡fdd„|Dƒƒ‰tˆjƒƒ}tƒ}x:|j|d�D]*}x$|j|jd�D]}||ˆj|ƒ<qlWqXWˆjjj}t‡fdd„||Dƒ‡fdd„||Dƒ|ggd�} xj|j |ƒD]\} ˆ| } ˆ| } | j | j krôqÒ|| j | j ƒd k�r| d j | | fƒqÒ| d j | | fƒqÒW| 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|ƒ|f‘qSr)r2)Ú.0Úp)r rrú msz-RepoDiffCommand._repodiff..csg|]}ˆj|ƒ|f‘qSr)r2)r3r4)r rrr5os)Ú obsoletes)Zprovidescsg|] }ˆ|‘qSrr)r3Úk)Únew_drrr5zscsg|] }ˆ|‘qSrr)r3r7)Úold_drrr5{s)ÚaddedÚremovedr6ÚupgradedÚ downgradedrr=r<) ÚdictÚsetÚkeysÚfilterr6r2r ÚsackÚevr_cmpÚ intersectionÚevrr) r rrZold_keysZnew_keysr6Z obsoleterZ obsoletedrCrr7Úpkg_oldÚpkg_newr)r8r9r rÚ _repodiffes0    zRepoDiffCommand._repodiffc sh‡fdd„‰dd„}‡‡fdd„}tddddd�}x.pkgstrcSsXt|ƒ}|dkr.|djtjjj|ƒjƒƒ7}n&|dkrT|djtjjj| ƒjƒƒ7}|S)Nrz ({})z (-{}))rIÚformatr'r Z format_numberÚstrip)Znumr-rrrÚsizestr‘s z(RepoDiffCommand._report..sizestrcsBg}ˆjjr*|jdˆ|ƒˆ|ƒfƒ�n|jdƒ|jdˆ|ƒˆ|ƒfƒ|jdt|d ƒƒ|jrv|jd}nd}xŽ|jD]„}|rÐ|d|dkržPn2|d|dkrÐ|d|dkrÐ|d|dkrÐP|jd |djd ƒtjj|dƒtjj|dƒfƒq‚Wˆjj �r0|jt d ƒj |j |j ƒƒt d j |ƒƒdS)Nz%s -> %sÚú-érZ timestampZauthorÚtextz * %s %s %sz %a %b %d %YzSize change: {} bytesÚ éÿÿÿÿ)r&ZsimplerÚlenr%Zstrftimer'Zi18nZucdÚsizerrKÚprintÚjoin)rFrGZmsgsZ old_chlogZchlog)rJr rrÚreport_modified™s2      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>ÚsortedrVrrKrUÚgetr2r&Z downgraderT) r rrMrXZsizesr1Z obsoletedbyrFrGZmodifiedr)rJr rÚ_report‹sf                zRepoDiffCommand._reportcCsÌ|jjjtjƒj|jjd�}|jjjtjƒj|jjd�}|jj rld|jj krl|j |jj d�|j |jj d�|jj rŽ|j dd�|j dd�n|j dd�|j dd�|j ƒ|j ƒ|j |j||ƒƒdS)N)ZreponameÚ*)r0rP)Zlatest_per_arch)Zlatest)r rBZqueryÚhawkeyZIGNORE_EXCLUDESrAr&rrrZfiltermr/Zapplyr[rH)r Zq_newZq_oldrrrÚrunìs     zRepoDiffCommand.runN)r) rrrÚaliasesrZsummaryÚ staticmethodr!r.r2rHr[r^rrrrr +s &ar )Z __future__rrZdnf.clir'Zdnf.cli.option_parserrr]ZdnfpluginscorerZPluginrr ZCommandr rrrrÚs