From 5bbeb417905a077205ad2015caeeb23af8c52896 Mon Sep 17 00:00:00 2001 From: Nicola Sella Date: Tue, 1 Nov 2022 12:59:33 +0100 Subject: [PATCH] Backport patch for relative URL Resolves: rhbz#2103015 --- ...n-relativeUrl-to-PackageTarget-for-R.patch | 62 +++++++++++++++++++ dnf.spec | 6 +- 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 0001-Pass-whole-URL-in-relativeUrl-to-PackageTarget-for-R.patch diff --git a/0001-Pass-whole-URL-in-relativeUrl-to-PackageTarget-for-R.patch b/0001-Pass-whole-URL-in-relativeUrl-to-PackageTarget-for-R.patch new file mode 100644 index 0000000..b8ea3b7 --- /dev/null +++ b/0001-Pass-whole-URL-in-relativeUrl-to-PackageTarget-for-R.patch @@ -0,0 +1,62 @@ +From 5e082d74b73bf1b3565cfd72a3e1ba7a45a00a8b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hr=C3=A1zk=C3=BD?= +Date: Wed, 7 Sep 2022 14:40:32 +0200 +Subject: [PATCH 1/2] Pass whole URL in relativeUrl to PackageTarget for RPM + URL download + +The PackageTarget supports baseUrl and relativeUrl on the API, but then +the relativeUrl is just a path fragment with no definition on whether it +should be encoded. It's being passed unencoded paths from other places, +and so there's a conditional encode (only if not full URL) in libdnf. + +But full URLs are actually supported in relativeUrl (in that case +baseUrl should be empty) and in that case the URL is expected to be +encoded and is not encoded for the second time. + +Hence, pass the full URL to relativeUrl instead of splitting it. We also +need to decode the file name we store, as on the filesystem the RPM file +name is also decoded. + += changelog = +msg: Don't double-encode RPM URLs passed on CLI +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2103015 +--- + dnf/repo.py | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/dnf/repo.py b/dnf/repo.py +index ec1a2537..86fb2bf4 100644 +--- a/dnf/repo.py ++++ b/dnf/repo.py +@@ -47,6 +47,7 @@ import string + import sys + import time + import traceback ++import urllib + + _PACKAGES_RELATIVE_DIR = "packages" + _MIRRORLIST_FILENAME = "mirrorlist" +@@ -295,7 +296,7 @@ class RemoteRPMPayload(PackagePayload): + self.local_path = os.path.join(self.pkgdir, self.__str__().lstrip("/")) + + def __str__(self): +- return os.path.basename(self.remote_location) ++ return os.path.basename(urllib.parse.unquote(self.remote_location)) + + def _progress_cb(self, cbdata, total, done): + self.remote_size = total +@@ -308,8 +309,8 @@ class RemoteRPMPayload(PackagePayload): + + def _librepo_target(self): + return libdnf.repo.PackageTarget( +- self.conf._config, os.path.basename(self.remote_location), +- self.pkgdir, 0, None, 0, os.path.dirname(self.remote_location), ++ self.conf._config, self.remote_location, ++ self.pkgdir, 0, None, 0, None, + True, 0, 0, self.callbacks) + + @property +-- +2.37.3 + diff --git a/dnf.spec b/dnf.spec index b2112bb..9377ff8 100644 --- a/dnf.spec +++ b/dnf.spec @@ -66,12 +66,13 @@ It supports RPMs, modules and comps groups & environments. Name: dnf Version: 4.14.0 -Release: 1%{?dist} +Release: 2%{?dist} Summary: %{pkg_summary} # For a breakdown of the licensing, see PACKAGE-LICENSING License: GPLv2+ URL: https://github.com/rpm-software-management/dnf Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz +Patch1: 0001-Pass-whole-URL-in-relativeUrl-to-PackageTarget-for-R.patch BuildArch: noarch BuildRequires: cmake @@ -361,6 +362,9 @@ popd %{python3_sitelib}/%{name}/automatic/ %changelog +* Mon Oct 31 2022 Nicola Sella - 4.14.0-2 +- Pass whole URL in relativeUrl to PackageTarget for RPM URL download + * Thu Sep 22 2022 Lukas Hrazky - 4.14.0-1 - Update to 4.14.0 - Add doc related to --destdir and --downloadonly options (RhBug:2100811)