a i¯:ã@s ddlmZddlmZddlZddlZddlZddlZddlmZm Z ddl m Z ddl Z ddl Z dd„ZGdd „d e jjƒZe jjGd d „d e jjƒƒZdS) é)Úabsolute_import)Úunicode_literalsN)Ú_Úlogger)Ú OptionParsercCs(tj t ¡¡}tj tj |||¡¡S©N)ÚdnfZi18nZucdÚosÚgetcwdÚpathÚrealpathÚjoin)Z intermediateÚtargetÚcwd©rú8/usr/lib/python3.9/site-packages/dnf-plugins/reposync.pyÚ_pkgdir#srcs(eZdZ‡fdd„Z‡fdd„Z‡ZS)ÚRPMPayloadLocationcs$tt|ƒ ||¡tj |¡|_dSr)ÚsuperrÚ__init__r r ÚdirnameÚ package_dir)ÚselfÚpkgÚprogressZ pkg_location©Ú __class__rrr)szRPMPayloadLocation.__init__cs*tt|ƒ ¡}tj |j¡|j|d<|S)NÚdest)rrÚ_target_paramsrÚutilÚ ensure_dirr)rÚtprrrr-s z!RPMPayloadLocation._target_params)Ú__name__Ú __module__Ú __qualname__rrÚ __classcell__rrrrr(s rcs”eZdZdZedƒZ‡fdd„Zedd„ƒZdd„Z d d „Z d d „Z d d„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z‡ZS)ÚRepoSyncCommand)Zreposyncz&download all packages from remote repocstt|ƒ |¡dSr)rr&r)rÚclirrrr9szRepoSyncCommand.__init__c Cs|jdddgtjdtdƒd|jddd td ƒd |jd dd td ƒd |jdddd tdƒd |jdddd tdƒd |jdtdƒd|jdddd tdƒd |jddd tdƒd |jdddtdƒd |jd!dd td"ƒd |jd#dd td$ƒd |jd%d&dd td'ƒd dS)(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-metadatazdownload 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--sourcezdownload only source packagesz-uz--urlsz:Just list urls of what would be downloaded, don't download)Ú add_argumentrZ_SplitCallbackr)ÚparserrrrÚ set_argparser<sJ þ ÿ ÿ ÿ ÿÿ ÿ ÿ ÿ ÿ ÿ ÿzRepoSyncCommand.set_argparserc CsÔ|jj}d|_d|_|jj}|jjrv| ¡  ¡|jjD]<}z ||}Wn"t yjt j  d|¡‚Yn0|  ¡q8|jjr†| ¡tt| ¡ƒƒdkr²|jjr²t j  tdƒ¡‚| ¡D]}|j ¡d|_qºdS)NTzUnknown repo: '%s'.éz1Can't use --norepopath with multiple repositoriesF)r'ÚdemandsZavailable_reposZsack_activationÚbaseÚreposÚoptsÚrepoÚallÚdisableÚKeyErrorrZCliErrorÚenableÚsourceZenable_source_reposÚlenÚlistÚ iter_enabledÚ norepopathrÚ_repoZexpireZdeltarpm)rr2r4Zrepoidr6rrrÚ configure\s*     ÿ  zRepoSyncCommand.configurec sæd|jj_d}|jj ¡D]®}|jjr4|j d¡|jj r’|jj rˆ|j  ¡D]6\}}|  |¡}|rnt |ƒqNtdƒ|}t |¡qNn |  |¡|jjr|jj rt|j  ¡ƒ‰‡fdd„dDƒ}|r|D] }|  |¡}|rÐt |ƒqqÐtdƒ}t |¡n | |¡| |¡} |jj r0| | ¡n†| | ¡|jjr¶| D]l} | | ¡} t | fdd„| ¡| _|j | ¡\} } | d krHt td ƒ tj  | ¡| ¡¡t !| ¡d }qH|jj"r| #|| ¡q|sât$j% &td ƒ¡‚dS) NTz%Failed to get mirror for metadata: %scsg|]}|ˆvrˆ|‘qSrr)Ú.0Úmd_type©ZmdlrrÚ ‹sþz'RepoSyncCommand.run..)ÚgroupZgroup_gzZ group_gz_zckz(Failed to get mirror for the group file.cSs|Srr)ÚsÚ local_pathrrrÚ¥óz%RepoSyncCommand.run..rzRemoving {}: {}FzGPG signature check failed.)'r3ZconfZ keepcacher4r>r5Z remote_timer@ZsetPreserveRemoteTimeÚdownload_metadataZurlsZgetMetadataLocationsÚremote_locationÚprintrrÚwarningZ downloadcompsÚdictÚgetcompsÚ get_pkglistÚ print_urlsÚdownload_packagesZgpgcheckÚpkg_download_pathÚtypesÚ MethodTypeZlocalPkgZpackage_signature_checkÚformatr r ÚbasenameÚunlinkÚdeleteÚdelete_old_local_packagesrÚ exceptionsÚError)rZ gpgcheck_okr6rCZ md_locationÚurlÚmsgZgroup_locationsZgroup_locationÚpkglistrrHÚresultÚerrorrrDrÚrunwsd         ÿ          ÿ   ÿ zRepoSyncCommand.runcCs$t|jjp|jj|jjs|jndƒS©NÚ)rr5ZdestdirÚ download_pathr?Úid©rr6rrrÚ repo_target±sÿzRepoSyncCommand.repo_targetcCs2|jjr$t|jj|jjs|jndƒS| |¡SdSrd)r5Z metadata_pathrr?rgrirhrrrÚmetadata_targetµszRepoSyncCommand.metadata_targetcCsT| |j¡}tj tj ||j¡¡}| tj |d¡¡sPtj   t dƒ  ||¡¡‚|S)Nrez6Download target '{}' is outside of download path '{}'.) rir6r r r r ÚlocationÚ startswithrr\r]rrW)rrrirTrrrrT»s ÿÿÿz!RepoSyncCommand.pkg_download_pathc s®t‡fdd„|Dƒƒ}t ˆ |¡¡D]‚\}}}|D]r}tj ||¡}| d¡r4tj |¡r4||vr4zt |¡t   t dƒ|¡Wq4t y¤t   t dƒ|¡Yq40q4q&dS)Nc3s|]}ˆ |¡VqdSr)rT©rBr©rrrÚ ÊrJz.z.rpmz [DELETED] %szfailed to delete file %s)Úsetr Úwalkrir r ÚendswithÚisfilerYrÚinforÚOSErrorrb) rr6r`Zdownloaded_filesÚdirpathÚdirnamesÚ filenamesÚfilenamer rrnrr[Ès  z)RepoSyncCommand.delete_old_local_packagescCsZ|j ¡}|rV| |¡}tj |¡tj |d¡}tj j j ||dt   tdƒ|j¡dS)Nz comps.xml)rz!comps.xml for repository %s saved)r@Z getCompsFnrjrrr r r r ZyumZmiscÚ decompressrrtrrg)rr6Zcomps_fnZ dest_pathrrrrrP×s   zRepoSyncCommand.getcompscCs| |¡}|j |¡dS)NT)rjr@ZdownloadMetadata)rr6rirrrrKàs  z!RepoSyncCommand.download_metadatacCs’tjjs| ¡S| ¡|jj ¡}tƒ}i}i}|D]d}| ¡}|  |¡|  |  ¡i¡  |  ¡g¡  |¡|D]&}|  |i¡  |  ¡g¡  |  ¡¡qrq6|j|j|dd ¡} tƒ} | ¡D]¸\} } tƒ} |  t|  ¡ddd¡tƒ}|  ¡D]}|D]}|  | ¡¡qqø|j|d ¡D]&}d |¡}|  t||| ƒ¡q(| D]$}| |D]}|   | ¡¡q`qTqÂ|  |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)Zpkg__neqT)Úreverserz3{0.name}-{0.epoch}:{0.version}-{0.release}.{0.arch})rr3Z WITH_MODULESZlatestZapplyZ_moduleContainerZgetModulePackagesrpZ getArtifactsÚupdateÚ setdefaultZ getNameStreamZ getVersionNumÚappendÚfilterÚitemsÚaddÚsortedÚkeysÚvaluesrWÚmaxÚunion)rÚqueryZmodule_packagesZ all_artifactsZ module_dictZartifact_versionZmodule_packageZ artifactsZartifactZ latest_queryZlatest_stream_artifactsZ namestreamZ version_dictZversionsZstream_artifactsÚmodulesÚmoduleZ latest_pkgZnevraÚversionrrrÚ _get_lateståsP   ÿÿ ÿÿ ÿ    zRepoSyncCommand._get_latestcCsž|jjjtjd ¡j|jd}|jj r2|  |¡}|jj rH|jddn|jj r`|j|jj dg}t ƒ}|D]*}| |¡}||vrn| |¡| |¡qn|S)N©Úflags)ZreponameÚsrc)Zarch)r3Úsackr‡ÚhawkeyÚIGNORE_MODULAR_EXCLUDESZ availableZfiltermrgr5Z newest_onlyr‹r;r(rprTr~r)rr6r‡r`Z seen_pathsrrfrrrrQs"ÿ    zRepoSyncCommand.get_pkglistcsjˆj}|jj‰ˆdur tj ¡‰tj |jj t j d  ¡ˆd¡}‡‡fdd„|Dƒ}|  ||ˆdd¡dS)NrŒrcsg|]}t|ˆˆ |¡ƒ‘qSr)rrTrm©rrrrrE8sÿz5RepoSyncCommand.download_packages..F)r3ÚoutputrrÚcallbackZNullDownloadProgressÚdrpmZ DeltaInforr‡rr‘Z installedZ_download_remote_payloads)rr`r3r•Zpayloadsrr’rrS1s ÿ ÿz!RepoSyncCommand.download_packagescCs<|D]2}| ¡}|rt|ƒqtdƒ|j}t |¡qdS)Nz$Failed to get mirror for package: %s)rLrMrÚnamerrN)rr`rr^r_rrrrR<s  zRepoSyncCommand.print_urls)r"r#r$ÚaliasesrZsummaryrÚ staticmethodr0rArcrirjrTr[rPrKr‹rQrSrRr%rrrrr&4s"  :  9 r&)Z __future__rrrr ÚshutilrUZdnfpluginscorerrZdnf.cli.option_parserrrZdnf.clirr6Z RPMPayloadrZpluginZregister_commandr'ZCommandr&rrrrÚs