
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ÅÀf0  ã               @   s\  d dl mZ d dl mZ d dlmZmZ d dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZedƒZedƒZedƒZedƒZed	ƒZed
ƒZedƒZedƒZedƒZedƒZedƒZedƒZedƒZdaG dd„ dejƒZdddgZddgZ dgZ!dddge e  e! Z"G dd„ dej#j$ƒZ%dd „ Z&d!d"„ Z'd#d$„ Z(d%d&„ Z)d'd(„ Z*dS ))é    )Úabsolute_import)Úunicode_literals)Ú_ÚloggerNz-Unable to read version lock configuration: %szLocklist not setzAdding versionlock on:zAdding exclude on:z*Package already locked in equivalent form:zPackage {} is already lockedzPackage {} is already excludedzDeleting versionlock for:zNo package found for:z1Excludes from versionlock plugin were not appliedzCVersionlock plugin: number of lock rules from file "{}" applied: {}zFVersionlock plugin: number of exclude rules from file "{}" applied: {}z,Versionlock plugin: could not parse pattern:c                   s8   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Z‡  ZS )
ÚVersionLockÚversionlockc                s8   t t| ƒj||ƒ || _|| _| jd k	r4| jjtƒ d S )N)Úsuperr   Ú__init__ÚbaseÚcliZregister_commandÚVersionLockCommand)Úselfr
   r   )Ú	__class__© ú!/usr/lib/python3.6/versionlock.pyr	   6   s
    
zVersionLock.__init__c             C   s4   | j | jjƒ}|jdƒo.|jddƒo.|jddƒad S )NÚmainÚlocklist)Zread_configr
   ZconfZhas_sectionZ
has_optionÚgetÚlocklist_fn)r   Zcpr   r   r   Úconfig=   s    zVersionLock.configc             C   s0   | j d krd}n| j jj}|d kr,| j jj}|S )NT)r   ÚdemandsZplugin_filtering_enabledZ	resolving)r   Zenabledr   r   r   Úlocking_enabledC   s    


zVersionLock.locking_enabledc             C   sÒ  | j ƒ stjtƒ d S | jjjƒ jdd�}| jjjƒ jdd�}tƒ }ddg}xÈt	ƒ D ]¾}d}|r||d dkr||dd … }d}t
jj|ƒjtjtjtjtjtjgd�}|rº||  d7  < ntjdt|ƒ qTxF|D ]>}|j| jjƒ}	|rò|j|	ƒ}n|j|jƒ |j|	ƒ}|	rÐP qÐW qTW |d �r6tjtjt|d ƒƒ |d �rVtjtjt|d ƒƒ |�r¬| jjjƒ jt|ƒd�}
|
j|ƒ}|j|ƒ}| jjjƒ j |d	�}|j|j|ƒƒ}|j tj!d
� |�rÎ| jjj"|ƒ d S )NT)Úemptyr   ú!é   )Zformsz%s %s)Z
name__glob)Z	obsoletes)Zreponame__neq)#r   r   ÚdebugÚNO_VERSIONLOCKr
   ÚsackZqueryÚfilterÚsetÚ_read_locklistÚdnfÚsubjectÚSubjectZget_nevra_possibilitiesÚhawkeyZ
FORM_NEVRAZ	FORM_NEVRZFORM_NEVZFORM_NAZ	FORM_NAMEÚerrorÚNEVRA_ERRORZto_queryÚunionÚaddÚnameÚAPPLY_EXCLUDEÚformatr   Ú
APPLY_LOCKÚlistÚ
differenceZfiltermZSYSTEM_REPO_NAMEZadd_excludes)r   Zexcludes_queryZlocked_queryZlocked_namesÚcountÚpatZexclZpossible_nevrasZnevraZ	pat_queryZall_versionsZother_versionsZobsoletes_queryr   r   r   r   L   sP    







zVersionLock.sack)	Ú__name__Ú
__module__Ú__qualname__r)   r	   r   r   r   Ú__classcell__r   r   )r   r   r   2   s
   	r   Úexcludezadd-!zadd!ÚdeleteÚdelZ	blacklistr(   Úclearr-   c               @   s8   e Zd ZdZedƒZdZedd„ ƒZdd„ Z	dd	„ Z
d
S )r   r   zcontrol package version locksz5[add|exclude|list|delete|clear] [<package-nevr-spec>]c             C   s:   | j dddtdƒd� | j dddd	� | j d
ddd	� d S )Nz--rawFÚ
store_truez@Use package specifications as they are, do not try to parse them)ÚdefaultÚactionÚhelpÚ
subcommandú?z[add|exclude|list|delete|clear])ÚnargsÚmetavarÚpackageÚ*z[<package-nevr-spec>])Úadd_argumentr   )Úparserr   r   r   Úset_argparser�   s    
z VersionLockCommand.set_argparserc             C   s   d| j j_d| j j_d S )NT)r   r   Zsack_activationZavailable_repos)r   r   r   r   Ú	configure—   s    
zVersionLockCommand.configurec             C   sÞ  d}| j jr–| j jtkr2d}| j jjd| j jƒ nd| j jtkrDd}nR| j jtkr|tdƒj| j jƒ}t	j
|tjjdd� d}n| j jtkrŽd}n| j j}|dk�rt| j jƒ}xj|D ]b\}}|d	krèt| j|g| j jd
dtjƒ  td	ƒ q²||k�rtjjtj|ƒƒ‚q²tjdt|ƒ q²W �n¾|dk�r¦t| j jƒ}xn|D ]f\}}|d	k�rpt| j|g| j jddtjƒ  tdƒ n,||k�rŽtjjtj|ƒƒ‚ntjdt|ƒ �q8W �n4|dk�rÎxtƒ D ]}t|ƒ �q¸W �n|dk�rt�sêtjjt ƒ‚t!tdƒ�}W d Q R X nØ|dk�rÚt�stjjt ƒ‚t"j#j$tƒ}t%j&|dd�\}	}
tƒ }d}t"j'|	ddƒ�V}	xN|D ]F}t(|| j jƒ�rŒtdt)|f ƒ |d7 }�q\|	j*|ƒ |	j*dƒ �q\W W d Q R X |�sÂt"j+|
ƒ nt"j,|
dƒ t"j-|
tƒ d S )Nr-   r(   r   r5   z@Subcommand '{}' is deprecated. Use 'exclude' subcommand instead.é   )Ú
stacklevelr6   Ú Tz
# Added lock on %s
z%s %sFz
# Added exclude on %s
r   r8   Úwz.tmp)ÚdirÚsuffixr   Ú
i¤  éÿÿÿÿ).Zoptsr=   ÚALL_CMDSrA   ÚinsertÚEXC_CMDSÚDEP_EXC_CMDSr   r+   ÚwarningsÚwarnr!   Ú
exceptionsÚDeprecationWarningÚDEL_CMDSÚ_search_locklistÚ_write_locklistr
   ÚrawÚtimeZctimeÚADDING_SPECÚErrorÚALREADY_EXCLUDEDr   ÚinfoÚEXISTING_SPECÚEXCLUDING_SPECÚALREADY_LOCKEDr    Úprintr   ÚNO_LOCKLISTÚopenÚosÚpathÚdirnameÚtempfileZmkstempÚfdopenÚ_matchÚDELETING_SPECÚwriteÚunlinkÚchmodÚrename)r   ÚcmdÚmsgÚresultsÚentryZ	entry_cmdr0   Úfrh   ÚoutZtmpfilenameÚlocked_specsr/   Úentr   r   r   Úrun›   s|    














zVersionLockCommand.runN)r   )r1   r2   r3   Úaliasesr   ZsummaryZusageÚstaticmethodrE   rF   ry   r   r   r   r   r   ‡   s   
r   c              C   sœ   g } y`t stjjtƒ‚tt ƒ�>}x6|jƒ D ]*}|jdƒs*|jƒ dkrFq*| j	|jƒ ƒ q*W W d Q R X W n2 t
k
r– } ztjjt| ƒ‚W Y d d }~X nX | S )Nú#rI   )r   r!   rU   r]   rd   re   Ú	readlinesÚ
startswithÚstripÚappendÚIOErrorÚNOT_READABLE)r   ZllfileÚlineÚer   r   r   r    â   s    
 "r    c             C   s„   g }d }}t ƒ }xl| D ]d}d}xH|D ]@}d }}t||gƒr&|}|jdƒrPdnd}|j||fƒ d}q&W |s|j||fƒ qW |S )NrI   Fr   r5   r(   T)r    rk   r~   r€   )rA   rs   Úfoundr;   rw   ÚpkgÚmatchrx   r   r   r   rX   ñ   s    

rX   c             C   s@  t ƒ }x”|D ]Œ}|r |j|ƒ qtjj|ƒ}	d }
|rN|	jtjj| ƒdddd�}
|
sf|	j| jdddd�}
|
sztdt	|f ƒ x|
D ]}|jt
|jŽ ƒ q€W qW |�r<ydts´tjjtƒ‚ttdƒ�@}|j|ƒ x.|D ]&}td||f ƒ |jd||f ƒ qÐW W d Q R X W n4 tk
�r: } ztjjt| ƒ‚W Y d d }~X nX d S )NTF)Z
with_nevraZwith_providesZwith_filenamesz%s %sÚaz%s%s
)r   r(   r!   r"   r#   Zget_best_queryr   Z_rpmdb_sackrc   ÚNOTFOUND_SPECÚpkgtup2specZpkgtupr   rU   r]   rd   re   rm   r�   r‚   )r
   ÚargsrZ   Ztry_installedZcommentr_   ÚprefixZspecsr0   ZsubjZpkgsr†   ru   Úspecr„   r   r   r   rY     s8    





$rY   c             C   s&  | j dƒ} x|D ]}| |krdS qW ytj| ƒ}W n tjk
rH   dS X xÖd|j d|j|jf d|j|jf d|j|j|jf d|j|j|jf d	|j|j|j|jf d
|j|j|j|jf d|j|j|j|j|jf d|j|j|j|j|jf f	D ]&}x |D ]}t	j	||ƒ�rdS �qW qøW dS )Nr   TFz%sz%s.%sz%s-%sz%s-%s-%sz%s-%s:%sz%s-%s-%s.%sz%s-%s:%s-%sz%s:%s-%s-%s.%sz%s-%s:%s-%s.%s)
Úlstripr$   Zsplit_nevraZValueExceptionr)   ÚarchÚversionÚreleaseÚepochÚfnmatch)rx   Zpatternsr0   Únr)   r   r   r   rk   #  s,    

"
rk   c             C   s   d| |p
d||f S )Nz%s-%s:%s-%s.*Ú0r   )r)   r�   r’   r�   r‘   r   r   r   rŠ   =  s    rŠ   )+Z
__future__r   r   Zdnfpluginscorer   r   r!   Zdnf.cliZdnf.exceptionsr“   r$   rf   ri   r[   rS   r‚   rd   r\   ra   r`   rb   r^   rl   r‰   r   r,   r*   r&   r   ZPluginr   rQ   rW   rR   rO   r   ZCommandr   r    rX   rY   rk   rŠ   r   r   r   r   Ú<module>   sH   O
[ 