From f4aafe026b29584e5bee1443b1def7d4dd8d8289 Mon Sep 17 00:00:00 2001
From: Antoine Lambert <anlambert@softwareheritage.org>
Date: Tue, 15 Nov 2022 16:54:30 +0100
Subject: [PATCH] fedora: Update versions in packages dict provided as loader
 argument

In a similar way to the debian lister, use the following versions in the
packages dictionary provided to the generic rpm loader:

- dict keys are package versions prefixed by the fedora release and
  edition they have been found (fedora{release}/{edition}/{version}),
  they will be used as branch names targeting releases in the snapshot
  created by the rpm loader

- version fields in dict values are the package intrinsic versions parsed
  from package repository metadata excluding any ".fcXY" suffixes to avoid
  the loader to create multiple releases targeting the same directory,
  they will be used as release names in the snapshot created by the rpm
  loader

Related to T4448
---
 swh/lister/fedora/lister.py            | 15 +++++++++----
 swh/lister/fedora/tests/test_lister.py | 30 +++++++++-----------------
 2 files changed, 21 insertions(+), 24 deletions(-)

diff --git a/swh/lister/fedora/lister.py b/swh/lister/fedora/lister.py
index e5620ff7..8f3dced9 100644
--- a/swh/lister/fedora/lister.py
+++ b/swh/lister/fedora/lister.py
@@ -170,14 +170,23 @@ class FedoraLister(Lister[FedoraListerState, FedoraPageType]):
         for pkg_metadata in page:
             # extract package metadata
             package_name = pkg_metadata.name
-            package_version = pkg_metadata.version
+            package_version = pkg_metadata.vr
+            package_version_split = package_version.split(".")
+            if package_version_split[-1].startswith("fc"):
+                # remove trailing ".fcXY" in version for the rpm loader to avoid
+                # creating multiple releases targeting same directory
+                package_version = ".".join(package_version_split[:-1])
+
             package_build_time = get_last_modified(pkg_metadata)
             package_download_path = pkg_metadata.location
 
             # build origin url
             origin_url = self.origin_url_for_package(package_name)
             # create package version key as expected by the fedora (rpm) loader
-            package_version_key = pkg_metadata.vr
+            package_version_key = (
+                f"fedora{self.current_release}/{self.current_edition}/"
+                f"{package_version}"
+            ).lower()
 
             # this is the first time a package is listed
             if origin_url not in self.listed_origins:
@@ -205,8 +214,6 @@ class FedoraLister(Lister[FedoraListerState, FedoraPageType]):
                 "name": package_name,
                 "version": package_version,
                 "url": urljoin(page.baseurl, package_download_path),
-                "release": self.current_release,
-                "edition": self.current_edition,
                 "buildTime": package_build_time.isoformat(),
                 "checksums": get_checksums(pkg_metadata),
             }
diff --git a/swh/lister/fedora/tests/test_lister.py b/swh/lister/fedora/tests/test_lister.py
index 693abe6f..dc093597 100644
--- a/swh/lister/fedora/tests/test_lister.py
+++ b/swh/lister/fedora/tests/test_lister.py
@@ -40,11 +40,9 @@ def rpm_url(release, path):
 def pkg_versions():
     return {
         "https://src.fedoraproject.org/rpms/0install": {
-            "2.11-4.fc26": {
+            "fedora26/everything/2.11-4": {
                 "name": "0install",
-                "version": "2.11",
-                "release": 26,
-                "edition": "Everything",
+                "version": "2.11-4",
                 "buildTime": "2017-02-10T04:59:31+00:00",
                 "url": rpm_url(26, "0/0install-2.11-4.fc26.src.rpm"),
                 "checksums": {
@@ -55,22 +53,18 @@ def pkg_versions():
             }
         },
         "https://src.fedoraproject.org/rpms/0xFFFF": {
-            "0.3.9-15.fc26": {
+            "fedora26/everything/0.3.9-15": {
                 "name": "0xFFFF",
-                "version": "0.3.9",
-                "release": 26,
-                "edition": "Everything",
+                "version": "0.3.9-15",
                 "buildTime": "2017-02-10T05:01:53+00:00",
                 "url": rpm_url(26, "0/0xFFFF-0.3.9-15.fc26.src.rpm"),
                 "checksums": {
                     "sha256": "96f9c163c0402d2b30e5343c8397a6d50e146c85a446804396b119ef9698231f"
                 },
             },
-            "0.9-4.fc36": {
+            "fedora36/everything/0.9-4": {
                 "name": "0xFFFF",
-                "version": "0.9",
-                "release": 36,
-                "edition": "Everything",
+                "version": "0.9-4",
                 "buildTime": "2022-01-19T19:13:53+00:00",
                 "url": rpm_url(36, "0/0xFFFF-0.9-4.fc36.src.rpm"),
                 "checksums": {
@@ -79,11 +73,9 @@ def pkg_versions():
             },
         },
         "https://src.fedoraproject.org/rpms/2ping": {
-            "4.5.1-2.fc36": {
+            "fedora36/everything/4.5.1-2": {
                 "name": "2ping",
-                "version": "4.5.1",
-                "release": 36,
-                "edition": "Everything",
+                "version": "4.5.1-2",
                 "buildTime": "2022-01-19T19:12:21+00:00",
                 "url": rpm_url(36, "2/2ping-4.5.1-2.fc36.src.rpm"),
                 "checksums": {
@@ -213,11 +205,9 @@ def test_incremental_lister(
     # Add new version to the set of expected pkg versions:
     pkg_versions["https://src.fedoraproject.org/rpms/0xFFFF"].update(
         {
-            "0.10-4.fc36": {
+            "fedora36/everything/0.10-4": {
                 "name": "0xFFFF",
-                "version": "0.10",
-                "release": 36,
-                "edition": "Everything",
+                "version": "0.10-4",
                 "buildTime": "2022-01-19T19:13:53+00:00",
                 "url": rpm_url(36, "0/0xFFFF-0.10-4.fc36.src.rpm"),
                 "checksums": {
-- 
GitLab