
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
šgt`Ó,  ã               @   sj   d dl mZ d dl mZ d dlZd dlmZ d dlZd dlm	Z	 G dd„ dej
ƒZG dd	„ d	ejjƒZdS )
é    )Úabsolute_import)Úunicode_literalsN)ÚOptionParser)Ú_c                   s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚRepoDiffÚrepodiffc                s,   t t| ƒj||ƒ |d krd S |jtƒ d S )N)Úsuperr   Ú__init__Zregister_commandÚRepoDiffCommand)ÚselfÚbaseÚcli)Ú	__class__© ú/usr/lib/python3.6/repodiff.pyr	   $   s    zRepoDiff.__init__)Ú__name__Ú
__module__Ú__qualname__Únamer	   Ú__classcell__r   r   )r   r   r       s   r   c               @   sL   e Zd ZdZedƒZedd„ ƒZdd„ Zdd„ Z	d	d
„ Z
dd„ Zdd„ ZdS )r
   r   z1List differences between two sets of repositoriesc          	   C   s¨   | j ddg ddtdƒd� | j ddg dd	td
ƒd� | j dddg tjdtdƒd� | j dddtdƒd� | j ddtdƒd� | j ddtdƒd� | j ddtdƒd� d S )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.)r   r   z--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_argumentr   r   Z_SplitCallback)Úparserr   r   r   Úset_argparser/   s    

zRepoDiffCommand.set_argparserc             C   s¢   | j j}d|_d|_d|_dg| jj_| jj	 s:| jj
 rNtdƒ}tjj|ƒ‚x<| jjjƒ D ],}|j| jj	| jj
 kr€|jƒ  q\|jƒ  q\W | jjsždg| j_d S )NTÚallz*Both old and new repositories must be set.Úsrc)r   ÚdemandsZsack_activationZavailable_reposÚ
changelogsr   ZconfZdisable_excludesÚoptsr   r   r   ÚdnfÚ
exceptionsÚErrorZreposr"   ÚidÚenableÚdisabler   )r   r$   ÚmsgZrepor   r   r   Ú	configureM   s    
zRepoDiffCommand.configurec             C   s   | j jr|j|jfS |jS )N)r&   Úcompare_archr   Úarch)r   Úpkgr   r   r   Ú_pkgkey`   s    zRepoDiffCommand._pkgkeyc                s6  t ‡fdd„|D ƒƒ‰tˆjƒ ƒ}t ‡fdd„|D ƒƒ‰ tˆ jƒ ƒ}t ƒ }x:|j|d�D ]*}x$|j|jd�D ]}||ˆj|ƒ< qlW qXW ˆjjj}t ‡ fdd„|| D ƒ‡fdd„|| D ƒ|g g d�}	xj|j	|ƒD ]\}
ˆ|
 }ˆ |
 }|j
|j
krôqÒ||j
|j
ƒd	k�r|	d
 j||fƒ qÒ|	d j||fƒ qÒW |	S )aN  compares 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
        c                s   g | ]}ˆ j |ƒ|f‘qS r   )r2   )Ú.0Úp)r   r   r   ú
<listcomp>m   s    z-RepoDiffCommand._repodiff.<locals>.<listcomp>c                s   g | ]}ˆ j |ƒ|f‘qS r   )r2   )r3   r4   )r   r   r   r5   o   s    )Ú	obsoletes)Zprovidesc                s   g | ]}ˆ | ‘qS r   r   )r3   Úk)Únew_dr   r   r5   z   s    c                s   g | ]}ˆ | ‘qS r   r   )r3   r7   )Úold_dr   r   r5   {   s    )ÚaddedÚremovedr6   ÚupgradedÚ
downgradedr   r=   r<   )ÚdictÚsetÚkeysÚfilterr6   r2   r   ÚsackÚevr_cmpÚintersectionÚevrr   )r   r   r   Zold_keysZnew_keysr6   Z	obsoleterZ	obsoletedrC   r   r7   Úpkg_oldÚpkg_newr   )r8   r9   r   r   Ú	_repodiffe   s0    
zRepoDiffCommand._repodiffc       
         sh  ‡fdd„‰ dd„ }‡ ‡fdd„}t ddddd�}x<t|d	 ƒD ],}ttd
ƒjˆ |ƒƒƒ |d	  |j7  < q@W xjt|d ƒD ]Z}ttdƒjˆ |ƒƒƒ |d jˆj|ƒƒ}|rÆttdƒjˆ |ƒƒƒ |d  |j7  < q~W ˆjj	�r�|d �r:ttdƒƒ x<t|d ƒD ],\}}|d  |j|j 7  < |||ƒ �q
W |d �rìttdƒƒ xšt|d ƒD ],\}}|d  |j|j 7  < |||ƒ �q^W n\|d |d  }	|	�rìttdƒƒ x8t|	ƒD ],\}}|d  |j|j 7  < |||ƒ �q¼W ttdƒƒ ttdƒjt
|d	 ƒƒƒ ttdƒjt
|d ƒƒƒ ˆjj	�rlttdƒjt
|d ƒƒƒ ttdƒjt
|d ƒƒƒ n&ttdƒjt
|d ƒt
|d ƒ ƒƒ ˆjj�rdttdƒj||d	 ƒƒƒ ttdƒj||d ƒƒƒ ˆjj	�sþttdƒj||d |d  ƒƒƒ n4ttdƒj||d ƒƒƒ ttdƒj||d ƒƒƒ ttdƒj||d	 |d  |d  |d  ƒƒƒ d S ) Nc                s    ˆ j jrt| ƒS d| j| jf S )Nz%s-%s)r&   r/   Ústrr   rE   )r1   )r   r   r   ÚpkgstrŒ   s    z'RepoDiffCommand._report.<locals>.pkgstrc             S   sX   t | ƒ}| dkr.|djtjjj| ƒjƒ ƒ7 }n&| dk rT|djtjjj|  ƒjƒ ƒ7 }|S )Nr   z ({})z (-{}))rI   Úformatr'   r   Zformat_numberÚstrip)Znumr-   r   r   r   Úsizestr‘   s    z(RepoDiffCommand._report.<locals>.sizestrc                sB  g }ˆj jr*|jdˆ | ƒˆ |ƒf ƒ �n|jdƒ |jdˆ | ƒˆ |ƒf ƒ |jdt|d ƒ ƒ | jrv| jd }nd }xŽ|jD ]„}|rÐ|d |d k ržP n2|d |d krÐ|d |d krÐ|d |d krÐP |jd	|d jd
ƒtjj|d ƒtjj|d ƒf ƒ q‚W ˆj j	�r0|jt
dƒj|j	| j	 ƒƒ tdj|ƒƒ d S )Nz%s -> %sÚ ú-é   r   Z	timestampZauthorÚtextz
* %s %s
%sz%a %b %d %YzSize change: {} bytesÚ
éÿÿÿÿ)r&   Zsimpler   Úlenr%   Zstrftimer'   Zi18nZucdÚsizer   rK   ÚprintÚjoin)rF   rG   ZmsgsZ	old_chlogZchlog)rJ   r   r   r   Úreport_modified™   s2    

z0RepoDiffCommand._report.<locals>.report_modifiedr   )r:   r;   r<   r=   r:   zAdded package  : {}r;   zRemoved package: {}r6   zObsoleted by   : {}r<   z
Upgraded packagesr=   z
Downgraded packagesz
Modified packagesz
SummaryzAdded packages: {}zRemoved packages: {}zUpgraded packages: {}zDowngraded packages: {}zModified packages: {}zSize of added packages: {}zSize of removed packages: {}zSize of modified packages: {}zSize of upgraded packages: {}zSize of downgraded packages: {}zSize change: {})r>   ÚsortedrV   r   rK   rU   Úgetr2   r&   Z	downgraderT   )
r   r   rM   rX   Zsizesr1   ZobsoletedbyrF   rG   Zmodifiedr   )rJ   r   r   Ú_report‹   sf    










zRepoDiffCommand._reportc             C   sÌ   | j jjtjƒj| jjd�}| j jjtjƒj| jjd�}| jj	rld| jj	krl|j
| jj	d� |j
| jj	d� | jjrŽ|j
dd� |j
dd� n|j
dd� |j
dd� |jƒ  |jƒ  | j| j||ƒƒ d S )N)ZreponameÚ*)r0   rP   )Zlatest_per_arch)Zlatest)r   rB   ZqueryÚhawkeyZIGNORE_EXCLUDESrA   r&   r   r   r   Zfiltermr/   Zapplyr[   rH   )r   Zq_newZq_oldr   r   r   Úrunì   s    zRepoDiffCommand.runN)r   )r   r   r   Úaliasesr   ZsummaryÚstaticmethodr!   r.   r2   rH   r[   r^   r   r   r   r   r
   +   s   &ar
   )Z
__future__r   r   Zdnf.clir'   Zdnf.cli.option_parserr   r]   Zdnfpluginscorer   ZPluginr   r   ZCommandr
   r   r   r   r   Ú<module>   s   