<!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
gt`*0                 @   s   d dl mZ d dl mZ d dlmZ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Zd dlZd dlZd dlZd dlZd dlZejjG dd dejjZdS )    )absolute_import)unicode_literals)_logger)OptionParserNc                   s   e Zd Zdg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dZd!ddZedd Zdd Zdd Z  ZS )"DownloadCommandZdownloadz%Download package to current directoryc                s    t t| j| d | _d | _d S )N)superr   __init__optsparser)selfcli)	__class__ /usr/lib/python3.6/download.pyr	   +   s    zDownloadCommand.__init__c          	   C   s   | j ddtdd | j ddtdd | j d	dtd
d | j ddtdd | j dddg tjdtdd | j ddtdd | j ddtdd | j ddddtdd | j ddddd d!gg td"d# d S )$Npackages+zpackages to download)nargshelpz--source
store_truezdownload the src.rpm instead)actionr   z--debuginfoz'download the -debuginfo package insteadz--debugsourcez)download the -debugsource package insteadz--archz
--archlistarchesz[arch]z5limit  the  query to packages of given architectures.)destdefaultr   metavarr   z	--resolvez(resolve and download needed dependenciesz	--alldepsz^when running with --resolve, download all dependencies (do not exclude already installed ones)z--urlz--urlsurlzJprint list of urls where the rpms can be downloaded instead of downloading)r   r   r   z--urlprotocolsappendhttphttpsZrsyncftpz4when running with --url, limit to specific protocols)r   choicesr   r   )add_argumentr   r   Z_SplitCallback)r   r   r   r   set_argparser0   s*    
zDownloadCommand.set_argparserc             C   s   | j j}d|_d|_| jjr*| jjr*d|_| jjr>| j	j
j  | jjsN| jjrZ| j	j
j  | jjrr| jj| j	j_ntjjtj | j	j_d S )NTF)r   demandsZsack_activationZavailable_reposr
   resolveZalldepsZload_system_reposourcebaseZreposZenable_source_repos	debuginfodebugsourceZenable_debug_reposdestdirconfdnfi18nucdosgetcwd)r   r#   r   r   r   	configureK   s    zDownloadCommand.configurec             C   s  | j j r.| j j r.| j j r.| j| j j}nXg }| j jrN|j| j| j j | j jrj|j| j| j j | j jr|j| j	| j j | j j
rxd|D ]\}|jtjkr|j| j jd}|rt| qtd|j }| jjjrtjj|tj| qW dS | j| dS )zExecute the util action here.)schemesz$Failed to get mirror for package: %sN)r
   r%   r'   r(   _get_pkg_objs_rpmsr   extend_get_pkg_objs_source_get_pkg_objs_debuginfo_get_pkg_objs_debugsourcer   repoidhawkeyCMDLINE_REPO_NAMEZremote_locationZurlprotocolsprintr   namer&   r*   strictr+   
exceptionsErrorr   Zwarning_do_downloads)r   pkgspkgr   msgr   r   r   run^   s.    





zDownloadCommand.runc             C   s  i }x"|D ]}|j t|g j| q
W g }g }xP|j D ]D}dd |D }|r`|j|d  q:|jdd d |j|d  q:W |r| jj|| jjj |rx^|D ]V}|j	 }t
jj| jjjt
jj|}	t
jj|	rt
jj||	rqtj|| jjj qW tdd || D }
|
S )z=
        Perform the download for a list of packages
        c             S   s   g | ]}|j tjkr|qS r   )r7   r8   r9   ).0rA   r   r   r   
<listcomp>   s    z1DownloadCommand._do_downloads.<locals>.<listcomp>r   c             S   s   | j j| j jfS )N)ZrepoZpriorityZcost)xr   r   r   <lambda>   s    z/DownloadCommand._do_downloads.<locals>.<lambda>)keyc             S   s   g | ]}|j  qS r   )localPkg)rD   rA   r   r   r   rE      s    )
setdefaultstrr   valuessortr&   Zdownload_packagesoutputprogressrI   r.   pathjoinr*   r)   basenameexistssamefileshutilcopysorted)r   r@   Zpkg_dictrA   Zto_downloadZcmdlineZpkg_listZpkgs_cmdlinesrcdstZ	locationsr   r   r   r?      s.    

zDownloadCommand._do_downloadsc             C   s"   | j jr| j|}n
| j|}|S )zc
        Return a list of dnf.Package objects that represent the rpms
        to download.
        )r
   r$   _get_packages_with_deps_get_packages)r   	pkg_specsr@   r   r   r   r2      s    
z"DownloadCommand._get_pkg_objs_rpmsc             C   s*   | j |}| j|}t| j|dd}|S )zj
        Return a list of dnf.Package objects that represent the source
        rpms to download.
        T)r%   )r2   _get_source_packagessetr[   )r   r\   r@   source_pkgsr   r   r   r4      s    

z$DownloadCommand._get_pkg_objs_sourcec          	   C   s   t  }| jjj j }xh| j|D ]Z}xT|j|jgD ]D}|j|t	|j
|j|j|jd}|s^q4x|D ]}|j| qdW P q4W q"W |S )zm
        Return a list of dnf.Package objects that represent the debuginfo
        rpms to download.
        )r;   epochversionreleasearch)r^   r&   sackquery	availabler[   Z
debug_nameZsource_debug_namefilterintr`   ra   rb   rc   add)r   r\   dbg_pkgsqrA   Zdbg_namedbg_availablepr   r   r   r5      s     


z'DownloadCommand._get_pkg_objs_debuginfoc             C   sh   t  }| jjj j }xL| j|D ]>}|j|jt|j	|j
|j|jd}x|D ]}|j| qNW q"W |S )zo
        Return a list of dnf.Package objects that represent the debugsource
        rpms to download.
        )r;   r`   ra   rb   rc   )r^   r&   rd   re   rf   r[   rg   Zdebugsource_namerh   r`   ra   rb   rc   ri   )r   r\   rj   rk   rA   rl   rm   r   r   r   r6      s    

z)DownloadCommand._get_pkg_objs_debugsourceFc             C   s   |r
| j n| j}g }x||D ]t}y|j|| W q tjjk
r } z<tjtjj	| | j
jjr|tjtd tjj|W Y dd}~X qX qW ttj| }|S )z Get packages matching pkg_specs.zExiting due to strict setting.N)_get_query_source
_get_queryr   r+   r=   PackageNotFoundErrorr   errorr,   r-   r&   r*   r<   r   r>   list	itertoolschain)r   r\   r%   funcZqueriespkg_specer@   r   r   r   r[      s    

"zDownloadCommand._get_packagesc       	      C   s   | j |}t|}x|D ]}tj| jj}|j| |j }|r^|j|j	  |j|j
  qtdg}tjdj|dd |D   tjtjj|j  tjj qW |S )z-Get packages matching pkg_specs and the deps.zError in resolve of packages:z
    c             S   s   g | ]}t |qS r   )rK   )rD   rA   r   r   r   rE     s    z;DownloadCommand._get_packages_with_deps.<locals>.<listcomp>)r[   r^   r8   ZGoalr&   rd   ZinstallrC   updateZlist_installsZlist_upgradesr   r   rq   rQ   r+   utilZ_format_resolve_problemsZproblem_rulesr=   r>   )	r   r\   r%   r@   Zpkg_setrA   ZgoalZrcrB   r   r   r   rZ      s    



z'DownloadCommand._get_packages_with_depsc             C   sz   t  }xj| D ]b}|jr8|j|j tjdt||j q|jdkrZ|jd|j|jf  qtj	t
dt| qW t|S )z4Get list of source rpm names for a list of packages.z  --> Package : %s Source : %srX   z%s-%s.src.rpmzNo source rpm defined for %s)r^   Z	sourcerpmri   r   debugrK   rc   r;   Zevrinfor   rr   )r@   r_   rA   r   r   r   r]     s    

z$DownloadCommand._get_source_packagesc             C   s   t jjj|d }|o|dk}|s8|jdrdtjj|rd| jj|g| jj	j
d}| jjj j|dS t jj|}|j| jj| jjd	}|j }|jd
d}| jjr|j| jjd}t|j dkrtd| }t jj||S )z#Return a query to match a pkg_spec.r   r   r   filer   z.rpm)rO   )rA   )Zwith_srcT)Zlatest_per_arch_by_priority)rc   zNo package %s available.)r   r   r|   r   )r+   ZpycompZurlparseendswithr.   rP   isfiler&   Zadd_remote_rpmsrN   rO   rd   re   ZfiltermsubjectSubjectZget_best_queryr
   r%   rf   r   rg   lenrC   r   r=   rp   )r   rv   r1   Zis_urlr@   subjrk   rB   r   r   r   ro     s    zDownloadCommand._get_queryc             C   sd   |dd }t jj|}x.|j D ]"}|j| jjj }|r"|j S q"W t	d| }t j
j|dS )z/Return a query to match a source rpm file name.N   zNo package %s available.)r+   r   r   Zget_nevra_possibilitiesZto_queryr&   rd   rf   Zlatestr   r=   rp   )r   rv   r   Z	nevra_objZ	tmp_queryrB   r   r   r   rn   ,  s    z!DownloadCommand._get_query_source)F)F)__name__
__module____qualname__aliasesr   Zsummaryr	   staticmethodr"   r0   rC   r?   r2   r4   r5   r6   r[   rZ   r]   ro   rn   __classcell__r   r   )r   r   r   %   s    #!


r   )Z
__future__r   r   Zdnfpluginscorer   r   Zdnf.cli.option_parserr   r+   Zdnf.cliZdnf.exceptionsZdnf.i18nZdnf.subjectZdnf.utilr8   rs   r.   rU   ZpluginZregister_commandr   ZCommandr   r   r   r   r   <module>   s   