
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
šgt`1  ã               @   sÎ   d dl mZ 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ZG dd„ dejƒZG d	d
„ d
ejjƒZG dd„ dejjƒZdd„ Zdd„ Zdd„ ZdS )é    )Úabsolute_import)Úunicode_literals)Úucd)Ú_ÚloggerNzdnf-debug-dump version 1
c                   s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚDebugÚdebugc                sD   t t| ƒj||ƒ || _|| _| jd k	r@| jjtƒ | jjtƒ d S )N)Úsuperr   Ú__init__ÚbaseÚcliZregister_commandÚDebugDumpCommandÚDebugRestoreCommand)Úselfr   r   )Ú	__class__© ú/usr/lib/python3.6/debug.pyr
   )   s    
zDebug.__init__)Ú__name__Ú
__module__Ú__qualname__Únamer
   Ú__classcell__r   r   )r   r   r   %   s   r   c                   st   e Zd ZdZedƒZ‡ fdd„Zdd„ Zedd„ ƒZ	d	d
„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )r   ú
debug-dumpz5dump information about installed rpm packages to filec                s   t t| ƒj|ƒ d | _d S )N)r	   r   r
   Ú	dump_file)r   r   )r   r   r   r
   7   s    zDebugDumpCommand.__init__c             C   s   d| j j_d| j j_d S )NT)r   ÚdemandsÚsack_activationÚavailable_repos)r   r   r   r   Ú	configure;   s    
zDebugDumpCommand.configurec             C   s.   | j dddtdƒd� | j ddtdƒd	� d S )
Nz	--noreposÚ
store_trueFz/do not attempt to dump the repository contents.)ÚactionÚdefaultÚhelpÚfilenameú?zoptional name of dump file)Únargsr!   )Úadd_argumentr   )Úparserr   r   r   Úset_argparser?   s    zDebugDumpCommand.set_argparserc             C   sÀ   | j j}|s6tjdtjtjƒ ƒƒ}dtjƒ d |f }tjj|ƒ}|j	dƒr\t
j|dƒ| _nt|dƒ| _| jtƒ | jƒ  | jƒ  | jƒ  | j| j j ƒ | jƒ  | jjƒ  ttdƒ| ƒ dS )z{create debug txt file and compress it, if no filename specified
           use dnf_debug_dump-<timestamp>.txt.gz by defaultz%Y-%m-%d_%Tzdnf_debug_dump-%s-%s.txt.gzé   z.gzÚwzOutput written to: %sN)Úoptsr"   ÚtimeZstrftimeZ	localtimeÚosÚunameÚpathÚabspathÚendswithÚgzipÚGzipFiler   ÚopenÚwriteÚDEBUG_VERSIONÚdump_system_infoÚdump_dnf_config_infoÚdump_rpm_problemsÚdump_packagesZnoreposÚdump_rpmdb_versionsÚcloseÚprintr   )r   r"   Znowr   r   r   ÚrunH   s     


zDebugDumpCommand.runc             C   s4   t jjr t| jtjƒr t|dƒ}t jj| j|ƒ d S )NÚutf8)	ÚdnfZpycompZPY3Ú
isinstancer   r1   r2   ÚbytesZwrite_to_file)r   Úmsgr   r   r   r4   a   s    
zDebugDumpCommand.writec             C   sX   | j dƒ tjƒ }| j d|d |d f ƒ | j dtj ƒ | j dtjjddƒ ƒ d S )	Nz%%%%SYSTEM INFO
z  uname: %s, %s
é   é   z  rpm ver: %s
z  python ver: %s
Ú
Ú )r4   r,   r-   ÚrpmÚ__version__ÚsysÚversionÚreplace)r   r-   r   r   r   r6   f   s    
z!DebugDumpCommand.dump_system_infoc             C   s¢   | j jj}djdd„ | j jjD ƒƒ}| jdƒ | jd|d  ƒ | jd|d  ƒ | jd	|d
  ƒ | jdtjj	 ƒ | jd| ƒ | jddj| j jj
ƒ ƒ d S )Nú,c             S   s   g | ]
}|j ‘qS r   )r   )Ú.0Úpr   r   r   ú
<listcomp>p   s    z9DebugDumpCommand.dump_dnf_config_info.<locals>.<listcomp>z%%%%DNF INFO
z  arch: %s
Úarchz  basearch: %s
Zbasearchz  releasever: %s
Z
releaseverz  dnf ver: %s
z  enabled plugins: %s
z  global excludes: %s
)r   ÚconfZsubstitutionsÚjoinZ_pluginsÚpluginsr4   r?   ÚconstÚVERSIONÚexcludepkgs)r   ÚvarrS   r   r   r   r7   n   s    

z%DebugDumpCommand.dump_dnf_config_infoc             C   sP   | j dƒ t| jƒ\}}| j djdd„ |D ƒƒƒ | j djdd„ |D ƒƒƒ d S )Nz%%%%RPMDB PROBLEMS
rF   c             S   s$   g | ]\}}d t |ƒt |ƒf ‘qS )zPackage %s requires %s
)r   )rM   ÚreqÚpkgr   r   r   rO   }   s   z6DebugDumpCommand.dump_rpm_problems.<locals>.<listcomp>c             S   s$   g | ]\}}d t |ƒt |ƒf ‘qS )zPackage %s conflicts with %s
)r   )rM   rQ   rY   r   r   r   rO      s   )r4   Úrpm_problemsr   rR   )r   ZmissingÚ	conflictsr   r   r   r8   z   s    
z"DebugDumpCommand.dump_rpm_problemsc       	      C   s\  | j jjƒ }| jdƒ x&t|jƒ ƒD ]}| jdt|ƒ ƒ q$W |sFd S | jdƒ |jƒ }xþt| j jj	ƒ dd„ d�D ]â}yœd }|j
d k	rŽ|j
}n*|jd k	r |j}nt|jƒdkr¸|jd }| jd|j|f ƒ | jd	d
j|jƒ ƒ x,t|j|jd�ƒD ]}| jdt|ƒ ƒ qöW W qr tjjk
�rR } z| jd|t|ƒf ƒ wrW Y d d }~X qrX qrW d S )Nz
%%%%RPMDB
z  %s
z
%%%%REPOS
c             S   s   | j S )N)Úid)Úxr   r   r   Ú<lambda>�   s    z0DebugDumpCommand.dump_packages.<locals>.<lambda>)Úkeyr   z
%%%s - %s
z  excludes: %s
rL   )ZreponamezError accessing repo %s: %s
)r   ÚsackÚqueryr4   ÚsortedÚ	installedÚpkgspecÚ	availableZreposZiter_enabledZmetalinkZ
mirrorlistÚlenZbaseurlr\   rR   rV   Úfilterr?   Ú
exceptionsÚErrorÚstr)	r   Z
load_reposÚqrN   re   ZrepoZurlZpoÚer   r   r   r9   ƒ   s2    




zDebugDumpCommand.dump_packagesc             C   s(   | j dƒ | jjjƒ }| j d| ƒ d S )Nz%%%%RPMDB VERSIONS
z
  all: %s
)r4   r   r`   Z_rpmdb_version)r   rJ   r   r   r   r:   ¢   s    
z$DebugDumpCommand.dump_rpmdb_versions)r   )r   r   r   Úaliasesr   Úsummaryr
   r   Ústaticmethodr'   r=   r4   r6   r7   r8   r9   r:   r   r   r   )r   r   r   2   s   		r   c               @   sP   e Zd ZdZedƒZdd„ Zedd„ ƒZdd„ Z	d	d
„ Z
dd„ Zedd„ ƒZdS )r   údebug-restorez,restore packages recorded in debug-dump filec             C   s4   d| j j_d| j j_d| j j_| jjs0d| j j_d S )NT)r   r   r   r   Z	root_userr*   ÚoutputZ	resolving)r   r   r   r   r   ®   s
    


zDebugRestoreCommand.configurec             C   s~   | j ddtdƒd� | j ddtdƒd� | j ddtdƒd� | j d	d
dtdƒd� | j ddtdƒd� | j ddtdƒd� d S )Nz--outputr   z,output commands that would be run to stdout.)r   r!   z--install-latestz0Install the latest version of recorded packages.z--ignore-archz_Ignore architecture and install missing packages matching the name, epoch, version and release.z--filter-typesz[install, remove, replace]zinstall, remove, replacezlimit to specified type)Úmetavarr    r!   z--remove-installonlyzqAllow removing of install-only packages. Using this option may result in an attempt to remove the running kernel.r"   r(   zname of dump file)r$   r!   )r%   r   )r&   r   r   r   r'   µ   s$    z!DebugRestoreCommand.set_argparserc             C   sV   | j jr$t| j jjddƒjƒ ƒ| j _| j| j jd ƒ}| j|| j ƒ | j|| j ƒ dS )z Execute the command action here.rL   ú r   N)	r*   Úfilter_typesÚsetrK   ÚsplitÚread_dump_filer"   Úprocess_installedÚprocess_dump)r   Ú	dump_pkgsr   r   r   r=   Ì   s    zDebugRestoreCommand.runc             C   sö   | j jjƒ jƒ }| j j|ƒ}xÔ|D ]Ì}d}t|ƒ}|j|j|jfd ƒ}|d k	r®|j	|j
|jf}	|	|krpd||	< q²||kr~d}q²d|jkrŽd}
nd}
x|jƒ D ]}|
||< qœW nd}|r"d|jkr"||ksÎ|jr"|jrâtd| ƒ q"| j j|ƒ q"W d S )NFÚskipTrK   Úremovezremove    %s)r   r`   ra   rc   Z_get_installonly_queryrd   Úgetr   rP   ÚepochrJ   Úreleasert   ÚkeysZremove_installonlyrq   r<   Zpackage_remove)r   rz   r*   rc   Zinstallonly_pkgsrY   Z
pkg_removeÚspecÚdumped_versionsZevrr   Zd_evrr   r   r   rx   Ø   s.    


z%DebugRestoreCommand.process_installedc             C   sú   xôt |jƒ ƒD ]ä\}}|||f }xÎt |jƒ ƒD ]¾\}}}||||f }	|	dkrRq0|jr^d}
nd| }
|jr‚|	dkr‚d||
f }nt||
|||ƒ}|	|jkr0|jr´td|	|f ƒ q0y| jj	|ƒ W q0 t
jjk
rì   tjtdƒ|ƒ Y q0X q0W qW d S )Nr{   rF   Ú.Úinstallz%s%sz%s   %szPackage %s is not available)rb   r€   Zignore_archZinstall_latestÚpkgtup2specrt   rq   r<   r   r„   r?   rh   ZMarkingErrorr   Úerrorr   )r   rz   r*   ÚnÚar‚   rl   ÚvÚrr   rP   Úpkg_specr   r   r   ry   û   s&    
z DebugRestoreCommand.process_dumpc             C   sÄ   | j dƒrtj| ƒ}nt| ƒ}t|jƒ ƒtkrFtjt	dƒ| ƒ t
jj‚d}i }xp|D ]h}t|ƒ}|rr|dkrTd}qT| s„|d dkr†P |jƒ }tj|ƒ}d|j|j|jfi ƒ|j|j|jf< qTW |S )	Nz.gzzBad dnf debug file: %sTz
%%%%RPMDB
Fr   rs   r„   )r0   r1   r2   r3   r   Úreadliner5   r   r†   r   r?   rh   ri   ÚstripÚhawkeyZsplit_nevraÚ
setdefaultr   rP   r~   rJ   r   )r"   Zfobjr{   ZpkgsÚliner‹   Znevrar   r   r   rw     s(    


(z"DebugRestoreCommand.read_dump_fileN)rp   )r   r   r   rm   r   rn   r   ro   r'   r=   rx   ry   rw   r   r   r   r   r   ©   s   #r   c                s’   t jj| ƒ}|jƒ jƒ ‰ tƒ }tƒ }x@ˆ D ]8‰|j‡fdd„ˆjD ƒƒ |j‡fdd„ˆjD ƒƒ q*W ‡ fdd„|D ƒ}‡ fdd„|D ƒ}||fS )Nc                s2   g | ]*}t |ƒd k rt |ƒjdƒ r|ˆ f‘qS )zsolvable:prereqmarkerzrpmlib()rj   Ú
startswith)rM   rX   )rY   r   r   rO   :  s    z rpm_problems.<locals>.<listcomp>c                s   g | ]}|ˆ f‘qS r   r   )rM   rQ   )rY   r   r   rO   =  s    c                s$   g | ]\}}ˆ j |d �s||f‘qS ))Úprovides)rg   )rM   rX   rY   )Úallpkgsr   r   rO   ?  s    c                s$   g | ]\}}ˆ j |d �r||f‘qS ))r’   )rg   )rM   rQ   rY   )r“   r   r   rO   A  s    )	r?   r`   Z_rpmdb_sackra   rc   ru   ÚupdateÚrequiresr[   )r   Zrpmdbr•   r[   Zmissing_requiresZexisting_conflictsr   )r“   rY   r   rZ   3  s    
rZ   c             C   s   t | j| j| j| j| jƒS )N)r…   r   rP   r~   rJ   r   )rY   r   r   r   rd   F  s    rd   c             C   s<   |sdnd|j dƒ }|dkr"dnd| }d| ||||f S )NrF   z.%srƒ   z%s:z%s-%s%s-%s%s)NrF   )Úlstrip)r   rP   r~   rJ   r   rˆ   rl   r   r   r   r…   J  s    r…   )Z
__future__r   r   Zdnf.i18nr   Zdnfpluginscorer   r   r?   Zdnf.clir1   rŽ   r,   rG   rI   r+   r5   ZPluginr   r   ZCommandr   r   rZ   rd   r…   r   r   r   r   Ú<module>   s&   w 