From 5d22455c941ef9e1df4c428568f22f359094c65e Mon Sep 17 00:00:00 2001
From: "Antoine R. Dumont (@ardumont)" <ardumont@softwareheritage.org>
Date: Fri, 3 Dec 2021 16:09:33 +0100
Subject: [PATCH] package.loader: Deduplicate extid target

Related to T3763
---
 swh/loader/package/loader.py | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/swh/loader/package/loader.py b/swh/loader/package/loader.py
index 0849998e..2efe900f 100644
--- a/swh/loader/package/loader.py
+++ b/swh/loader/package/loader.py
@@ -272,7 +272,7 @@ class PackageLoader(BaseLoader, Generic[TPackageInfo]):
         if new_extid is None:
             return None
 
-        extid_targets = []
+        extid_targets = set()
         for extid_target in known_extids.get(new_extid, []):
             if extid_target.object_id not in whitelist:
                 # There is a known ExtID for this package, but its target is not
@@ -297,7 +297,7 @@ class PackageLoader(BaseLoader, Generic[TPackageInfo]):
                 # or revision_missing instead of the snapshot.
                 continue
             elif extid_target.object_type in (ObjectType.RELEASE, ObjectType.REVISION):
-                extid_targets.append(extid_target)
+                extid_targets.add(extid_target)
             else:
                 # Note that this case should never be reached unless there is a
                 # collision between a revision hash and some non-revision object's
@@ -325,8 +325,9 @@ class PackageLoader(BaseLoader, Generic[TPackageInfo]):
             # older versions of this loader, which produced revision objects instead
             # of releases), return a revision extid.
             assert len(extid_targets) == 1, extid_targets
-            assert extid_targets[0].object_type == ObjectType.REVISION, extid_targets
-            return extid_targets[0]
+            extid_target = list(extid_targets)[0]
+            assert extid_target.object_type == ObjectType.REVISION, extid_targets
+            return extid_target
         else:
             # No target found (this is probably a new package version)
             return None
-- 
GitLab