From b52426e6becb6b4a03c4ad5be420e4bf4745efe4 Mon Sep 17 00:00:00 2001 From: Marek Blaha Date: Wed, 14 Aug 2024 20:38:46 +0200 Subject: [PATCH] package_downloader: Always call download callbacks The download callbacks were not called in case the source and destination of locally available downloaded file were the same. --- libdnf5/repo/package_downloader.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/libdnf5/repo/package_downloader.cpp b/libdnf5/repo/package_downloader.cpp index 902ab6cc1..4c37d183e 100644 --- a/libdnf5/repo/package_downloader.cpp +++ b/libdnf5/repo/package_downloader.cpp @@ -156,20 +156,25 @@ void PackageDownloader::download() try { std::filesystem::path source = pkg_target.package.get_package_path(); std::filesystem::path destination = pkg_target.destination / source.filename(); std::error_code ec; - if (!std::filesystem::equivalent(source, destination, ec)) { + const bool same_file = std::filesystem::equivalent(source, destination, ec); + if (!same_file) { std::filesystem::copy(source, destination, std::filesystem::copy_options::overwrite_existing, ec); - if (auto * download_callbacks = pkg_target.package.get_base()->get_download_callbacks()) { - std::string msg; - DownloadCallbacks::TransferStatus status; - if (ec) { - status = DownloadCallbacks::TransferStatus::ERROR; - msg = ec.message(); + } + if (auto * download_callbacks = pkg_target.package.get_base()->get_download_callbacks()) { + std::string msg; + DownloadCallbacks::TransferStatus status; + if (ec) { + status = DownloadCallbacks::TransferStatus::ERROR; + msg = ec.message(); + } else { + status = DownloadCallbacks::TransferStatus::ALREADYEXISTS; + if (same_file) { + msg = "Already downloaded"; } else { - status = DownloadCallbacks::TransferStatus::ALREADYEXISTS; msg = fmt::format("Copied from {}", source.string()); } - download_callbacks->end(pkg_target.user_cb_data, status, msg.c_str()); } + download_callbacks->end(pkg_target.user_cb_data, status, msg.c_str()); } continue; }