<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
f89                 @   s   d dl mZ d dl mZ d dlZd dlZd dlZd dlZd dlmZm	Z	 d dl
mZ d dlZd dlZdd ZG dd	 d	ejjZejjG d
d dejjZdS )    )absolute_import)unicode_literalsN)_logger)OptionParserc             C   s(   t jjtj }tjjtjj|| |S )N)dnfZi18nZucdosgetcwdpathrealpathjoin)Zintermediatetargetcwd r   /usr/lib/python3.6/reposync.py_pkgdir#   s    r   c                   s(   e Zd Z fddZ fddZ  ZS )RPMPayloadLocationc                s$   t t| j|| tjj|| _d S )N)superr   __init__r   r
   dirnamepackage_dir)selfpkgprogressZpkg_location)	__class__r   r   r   )   s    zRPMPayloadLocation.__init__c                s*   t t| j }tjj| j | j|d< |S )Ndest)r   r   _target_paramsr   util
ensure_dirr   )r   tp)r   r   r   r   -   s    
z!RPMPayloadLocation._target_params)__name__
__module____qualname__r   r   __classcell__r   r   )r   r   r   (   s   r   c                   s   e Zd ZdZedZ f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dd Zdd Zdd Zdd Zdd Z  ZS ) RepoSyncCommandreposyncz&download all packages from remote repoc                s   t t| j| d S )N)r   r$   r   )r   cli)r   r   r   r   9   s    zRepoSyncCommand.__init__c          	   C   s  | j dddg tjdtdd | j ddd	td
d | j ddd	tdd | j dddd	tdd | j dddd	tdd | j dtdd | j dddd	tdd | j ddd	tdd | j dddtdd  | j d!dd	td"d | j d#dd	td$d | j d%d&dd	td'd d S )(Nz-az--archarchesz[arch]z$download only packages for this ARCH)r   defaultactionmetavarhelpz--deleteF
store_truez5delete local packages no longer present in repository)r(   r)   r+   z--download-metadatazdownload all the metadata.z-gz
--gpgcheckzBRemove packages that fail GPG signature checking after downloadingz-mz--downloadcompsz&also download and uncompress comps.xmlz--metadata-pathzXwhere to store downloaded repository metadata. Defaults to the value of --download-path.)r+   z-nz--newest-onlyz&download only newest packages per-repoz--norepopathz,Don't add the reponame to the download path.z-pz--download-pathz./z&where to store downloaded repositories)r(   r+   z--remote-timezCtry to set local timestamps of local files by the one on the serverz--sourcezdownload only source packagesz-uz--urlsz:Just list urls of what would be downloaded, don't download)add_argumentr   Z_SplitCallbackr   )parserr   r   r   set_argparser<   s2    





zRepoSyncCommand.set_argparserc             C   s   | j j}d|_d|_| jj}| jjr||j j	  xJ| jjD ]>}y|| }W n$ t
k
rn   tj jd| Y nX |j  q:W | jjr|j  tt|j dkr| jjrtj jtdx |j D ]}|jj  d|_qW d S )NTzUnknown repo: '%s'.   z1Can't use --norepopath with multiple repositoriesF)r&   demandsZavailable_reposZsack_activationbasereposoptsrepoalldisableKeyErrorr   ZCliErrorenablesourceZenable_source_reposlenlistiter_enabled
norepopathr   _repoZexpireZdeltarpm)r   r1   r3   Zrepoidr5   r   r   r   	configure\   s(    

zRepoSyncCommand.configurec                s  d| j j_d}x| j jj D ]}| jjr8|jjd | jj	r| jj
rxP|jj D ]6\}}|j|}|rtt| qTtd| }tj| qTW n
| j	| | jjr| jj
rt|jj   fdddD }|rxB|D ]}|j|}|rt| P qW td}tj| n
| j| | j|}	| jj
r8| j|	 n| j|	 | jjrxt|	D ]l}
| j|
}tj|fd	d
|
|
_| j j|
\}}|dkrRtjtdjtjj || tj!| d}qRW | jj"r| j#||	 qW |st$j%j&tdd S )NTz%Failed to get mirror for metadata: %sc                s   g | ]}| kr | qS r   r   ).0md_type)mdlr   r   
<listcomp>   s   z'RepoSyncCommand.run.<locals>.<listcomp>groupgroup_gzgroup_gz_zckz(Failed to get mirror for the group file.c             S   s   |S )Nr   )s
local_pathr   r   r   <lambda>   s    z%RepoSyncCommand.run.<locals>.<lambda>r   zRemoving {}: {}FzGPG signature check failed.)rE   rF   rG   )'r2   ZconfZ	keepcacher3   r=   r4   Zremote_timer?   ZsetPreserveRemoteTimedownload_metadataZurlsZgetMetadataLocationsremote_locationprintr   r   warningZdownloadcompsdictgetcompsget_pkglist
print_urlsdownload_packagesZgpgcheckpkg_download_pathtypes
MethodTypeZlocalPkgZpackage_signature_checkformatr   r
   basenameunlinkdeletedelete_old_local_packagesr   
exceptionsError)r   Zgpgcheck_okr5   rB   Zmd_locationurlmsgZgroup_locationsZgroup_locationpkglistr   rI   resulterrorr   )rC   r   runw   s^    


















zRepoSyncCommand.runc             C   s$   t | jjp| jj| jjs|jndS )N )r   r4   ZdestdirZdownload_pathr>   id)r   r5   r   r   r   repo_target   s    zRepoSyncCommand.repo_targetc             C   s&   | j jrt| j j|jS | j|S d S )N)r4   Zmetadata_pathr   re   rf   )r   r5   r   r   r   metadata_target   s    zRepoSyncCommand.metadata_targetc             C   sT   | j |j}tjjtjj||j}|jtjj|dsPtj	j
tdj|||S )Nrd   z6Download target '{}' is outside of download path '{}'.)rf   r5   r   r
   r   r   location
startswithr   r\   r]   r   rW   )r   r   rf   rT   r   r   r   rT      s    
z!RepoSyncCommand.pkg_download_pathc       	         s   t  fdd|D }xtj j|D ]\}}}x||D ]t}tjj||}|jdr8tjj|r8||kr8ytj| t	j
td| W q8 tk
r   t	jtd| Y q8X q8W q(W d S )Nc             3   s   | ]} j |V  qd S )N)rT   )rA   r   )r   r   r   	<genexpr>   s    z<RepoSyncCommand.delete_old_local_packages.<locals>.<genexpr>z.rpmz[DELETED] %szfailed to delete file %s)setr   walkrf   r
   r   endswithisfilerY   r   infor   OSErrorrb   )	r   r5   r`   Zdownloaded_filesdirpathZdirnames	filenamesfilenamer
   r   )r   r   r[      s    

z)RepoSyncCommand.delete_old_local_packagesc             C   sZ   |j j }|rV| j|}tjj| tjj|d}tj	j
j||d tjtd|j d S )Nz	comps.xml)r   z!comps.xml for repository %s saved)r?   Z
getCompsFnrg   r   r   r   r   r
   r   ZyumZmiscZ
decompressr   ro   r   re   )r   r5   Zcomps_fnZ	dest_pathr   r   r   r   rP      s    

zRepoSyncCommand.getcompsc             C   s   | j |}|jj| dS )NT)rg   r?   ZdownloadMetadata)r   r5   rf   r   r   r   rK      s    
z!RepoSyncCommand.download_metadatac             C   s  t jjs|j S |j  | jjj }t }i }i }xp|D ]h}|j }|j	| |j
|j i j
|j g j| x.|D ]&}|j
|i j
|j g j|j  qvW q8W |j|j|ddj }	t }
x|j D ]\}}t }|jt|j ddd  t }x0|j D ]$}x|D ]}|j	|j  qW qW x:|j|dj D ]&}dj|}|jt|| |  q>W x0|D ](}x || D ]}|
j	|j  q|W qnW qW |	j|j|
d}	|	S )a\  
        return union of these queries:
        - the latest NEVRAs from non-modular packages
        - all packages from stream version with the latest package NEVRA
          (this should not be needed but the latest package NEVRAs might be
          part of an older module version)
        - all packages from the latest stream version
        )Znevra_strict)Zpkg__neqT)reverser   z3{0.name}-{0.epoch}:{0.version}-{0.release}.{0.arch})r   r2   ZWITH_MODULESZlatestZapplyZ_moduleContainerZgetModulePackagesrk   ZgetArtifactsupdate
setdefaultZgetNameStreamZgetVersionNumappendfilteritemsaddsortedkeysvaluesrW   maxunion)r   queryZmodule_packagesZall_artifactsZmodule_dictZartifact_versionZmodule_packageZ	artifactsZartifactZlatest_queryZlatest_stream_artifactsZ
namestreamZversion_dictZversionsZstream_artifactsmodulesmoduleZ
latest_pkgZnevraversionr   r   r   _get_latest   sB    	





zRepoSyncCommand._get_latestc             C   sd   | j jjtjdj j|jd}| jj	r2| j
|}| jjrH|jdd n| jjr`|j| jjd |S )N)flags)Zreponamesrc)Zarch)r2   sackr   hawkeyIGNORE_MODULAR_EXCLUDESZ	availableZfiltermre   r4   Znewest_onlyr   r:   r'   )r   r5   r   r   r   r   rQ     s    

zRepoSyncCommand.get_pkglistc                sj   j }|jj  d kr tjj  tjj|jj	t
jdj  d} fdd|D }|j|| d d d S )N)r   r   c                s   g | ]}t | j|qS r   )r   rT   )rA   r   )r   r   r   r   rD   0  s   z5RepoSyncCommand.download_packages.<locals>.<listcomp>F)r2   outputr   r   callbackZNullDownloadProgressdrpmZ	DeltaInfor   r   r   r   Z	installedZ_download_remote_payloads)r   r`   r2   r   Zpayloadsr   )r   r   r   rS   )  s    
z!RepoSyncCommand.download_packagesc             C   s@   x:|D ]2}|j  }|r t| qtd|j }tj| qW d S )Nz$Failed to get mirror for package: %s)rL   rM   r   namer   rN   )r   r`   r   r^   r_   r   r   r   rR   4  s    

zRepoSyncCommand.print_urls)r%   )r    r!   r"   aliasesr   Zsummaryr   staticmethodr/   r@   rc   rf   rg   rT   r[   rP   rK   r   rQ   rS   rR   r#   r   r   )r   r   r$   4   s     :	9r$   )Z
__future__r   r   r   r   ZshutilrU   Zdnfpluginscorer   r   Zdnf.cli.option_parserr   r   Zdnf.clir   r5   Z
RPMPayloadr   ZpluginZregister_commandr&   ZCommandr$   r   r   r   r   <module>   s   