3 gt`*0@sddlmZddlmZddlmZmZddlmZddlZddl Zddl Zddl Zddl Zddl ZddlZddlZddlZddlZejjGdddejjZdS))absolute_import)unicode_literals)_logger) OptionParserNcseZdZdgZedZfddZeddZddZ d d Z d d Z d dZ ddZ ddZddZd ddZd!ddZeddZddZddZZS)"DownloadCommandZdownloadz%Download package to current directorycs tt|j|d|_d|_dS)N)superr__init__optsparser)selfcli) __class__/usr/lib/python3.6/download.pyr +szDownloadCommand.__init__c Cs|jddtdd|jddtdd|jd dtd d|jd dtd d|jd ddgtjdtdd|jddtdd|jddtdd|jddddtdd|jddddd d!ggtd"d#dS)$Npackages+zpackages to download)nargshelpz--source store_truezdownload the src.rpm instead)actionrz --debuginfoz'download the -debuginfo package insteadz --debugsourcez)download the -debugsource package insteadz--archz --archlistarchesz[arch]z5limit the query to packages of given architectures.)destdefaultrmetavarrz --resolvez(resolve and download needed dependenciesz --alldepsz^when running with --resolve, download all dependencies (do not exclude already installed ones)z--urlz--urlsurlzJprint list of urls where the rpms can be downloaded instead of downloading)rrrz--urlprotocolsappendhttphttpsZrsyncftpz4when running with --url, limit to specific protocols)rchoicesrr) add_argumentrrZ_SplitCallback)r rrr set_argparser0s*           zDownloadCommand.set_argparsercCs|jj}d|_d|_|jjr*|jjr*d|_|jjr>|j j j |jj sN|jj rZ|j j j|jjrr|jj|j j_ntjjtj|j j_dS)NTF)r demandsZsack_activationZavailable_reposr resolveZalldepsZload_system_reposourcebaseZreposZenable_source_repos debuginfo debugsourceZenable_debug_reposdestdirconfdnfi18nucdosgetcwd)r r#rrr configureKs  zDownloadCommand.configurecCs|jj r.|jj r.|jj r.|j|jj}nXg}|jjrN|j|j|jj|jjrj|j|j|jj|jjr|j|j |jj|jj rxd|D]\}|j t j kr|j|jjd}|rt|qtd|j}|jjjrtjj|tj|qWdS|j|dS)zExecute the util action here.)schemesz$Failed to get mirror for package: %sN)r r%r'r(_get_pkg_objs_rpmsrextend_get_pkg_objs_source_get_pkg_objs_debuginfo_get_pkg_objs_debugsourcerrepoidhawkeyCMDLINE_REPO_NAMEZremote_locationZ urlprotocolsprintrnamer&r*strictr+ exceptionsErrorrZwarning _do_downloads)r pkgspkgrmsgrrrrun^s.        zDownloadCommand.runc Csi}x"|D]}|jt|gj|q Wg}g}xP|jD]D}dd|D}|r`|j|dq:|jddd|j|dq:W|r|jj||jjj|rx^|D]V}|j }t j j |jj jt j j|} t j j| rt j j|| rqtj||jj jqWtdd||D} | S)z= Perform the download for a list of packages cSsg|]}|jtjkr|qSr)r7r8r9).0rArrr sz1DownloadCommand._do_downloads..rcSs|jj|jjfS)N)ZrepoZpriorityZcost)xrrrsz/DownloadCommand._do_downloads..)keycSsg|] }|jqSr)localPkg)rDrArrrrEs) setdefaultstrrvaluessortr&Zdownload_packagesoutputprogressrIr.pathjoinr*r)basenameexistssamefileshutilcopysorted) r r@Zpkg_dictrAZ to_downloadZcmdlineZpkg_listZ pkgs_cmdlinesrcdstZ locationsrrrr?s.  zDownloadCommand._do_downloadscCs"|jjr|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@rrrr2s  z"DownloadCommand._get_pkg_objs_rpmscCs*|j|}|j|}t|j|dd}|S)zj Return a list of dnf.Package objects that represent the source rpms to download. T)r%)r2_get_source_packagessetr[)r r\r@ source_pkgsrrrr4s  z$DownloadCommand._get_pkg_objs_sourcec Cst}|jjjj}xh|j|D]Z}xT|j|jgD]D}|j|t |j |j |j |j d}|s^q4x|D]}|j|qdWPq4Wq"W|S)zm Return a list of dnf.Package objects that represent the debuginfo rpms to download. )r;epochversionreleasearch)r^r&sackquery availabler[Z debug_nameZsource_debug_namefilterintr`rarbrcadd)r r\dbg_pkgsqrAZdbg_name dbg_availableprrrr5s    z'DownloadCommand._get_pkg_objs_debuginfocCsht}|jjjj}xL|j|D]>}|j|jt|j |j |j |j d}x|D]}|j |qNWq"W|S)zo Return a list of dnf.Package objects that represent the debugsource rpms to download. )r;r`rarbrc)r^r&rdrerfr[rgZdebugsource_namerhr`rarbrcri)r r\rjrkrArlrmrrrr6s  z)DownloadCommand._get_pkg_objs_debugsourceFcCs|r |jn|j}g}x||D]t}y|j||Wqtjjk r}zlist itertoolschain)r r\r%funcZqueriespkg_specer@rrrr[s  "zDownloadCommand._get_packagesc Cs|j|}t|}x|D]}tj|jj}|j||j}|r^|j|j |j|j qt dg}t j dj|dd|Dt j tjj|jtjjqW|S)z-Get packages matching pkg_specs and the deps.zError in resolve of packages:z cSsg|] }t|qSr)rK)rDrArrrrEsz;DownloadCommand._get_packages_with_deps..)r[r^r8ZGoalr&rdZinstallrCupdateZ list_installsZ list_upgradesrrrqrQr+utilZ_format_resolve_problemsZ problem_rulesr=r>) r r\r%r@Zpkg_setrAZgoalZrcrBrrrrZs    z'DownloadCommand._get_packages_with_depscCszt}xj|D]b}|jr8|j|jtjdt||jq |jdkrZ|jd|j|jfq tj t dt|q Wt |S)z4Get list of source rpm names for a list of packages.z --> Package : %s Source : %srXz %s-%s.src.rpmzNo source rpm defined for %s) r^Z sourcerpmrirdebugrKrcr;Zevrinforrr)r@r_rArrrr] s   z$DownloadCommand._get_source_packagescCstjjj|d}|o|dk}|s8|jdrdtjj|rd|jj|g|jj j d}|jj j j |dStjj|}|j|jj |jjd }|j}|j d d }|jjr|j|jjd }t|jdkrtd |}tjj||S)z#Return a query to match a pkg_spec.rrrfilerz.rpm)rO)rA)Zwith_srcT)Zlatest_per_arch_by_priority)rczNo package %s available.)rrr|r)r+ZpycompZurlparseendswithr.rPisfiler&Zadd_remote_rpmsrNrOrdreZfiltermsubjectSubjectZget_best_queryr r%rfrrglenrCrr=rp)r rvr1Zis_urlr@subjrkrBrrrros     zDownloadCommand._get_querycCsd|dd}tjj|}x.|jD]"}|j|jjj}|r"|jSq"Wt d|}tj j |dS)z/Return a query to match a source rpm file name.NzNo package %s available.) r+rrZget_nevra_possibilitiesZto_queryr&rdrfZlatestrr=rp)r rvrZ nevra_objZ tmp_queryrBrrrrn,s    z!DownloadCommand._get_query_source)F)F)__name__ __module__ __qualname__aliasesrZsummaryr staticmethodr"r0rCr?r2r4r5r6r[rZr]rorn __classcell__rr)rrr%s   #!     r)Z __future__rrZdnfpluginscorerrZdnf.cli.option_parserrr+Zdnf.cliZdnf.exceptionsZdnf.i18nZ dnf.subjectZdnf.utilr8rsr.rUZpluginZregister_commandr ZCommandrrrrrs