From 2fdb647b4f20eba1655c41142781fad07d413328 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Danis?= <frederic.danis@collabora.com>
Date: Thu, 11 Feb 2021 17:59:56 +0100
Subject: [PATCH] FOSSology: Re-use previous results from same group id

License scan for `pkg/dash` and `tests\dash` should not re-use the scan
results from a previous scan of the other project.

Separate license scan using different group id, which is done using
different users.
---
 .../overlay/usr/bin/ci-license-scan           |  5 +++--
 .../overlay/usr/bin/fossology.py              | 19 ++++++++++++++-----
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/package-source-builder/overlay/usr/bin/ci-license-scan b/package-source-builder/overlay/usr/bin/ci-license-scan
index eb19064..818e6fb 100755
--- a/package-source-builder/overlay/usr/bin/ci-license-scan
+++ b/package-source-builder/overlay/usr/bin/ci-license-scan
@@ -363,8 +363,9 @@ def main():
                 name = name[:-len(suffix)]
             foss_project = fossology.ApertisFossology(args.fossology_host, args.fossology_username, args.fossology_password)
             foss_project.upload(args.source_url, args.source_branch, name)
-            reuse_id, reuse_group = foss_project.get_previous_upload_analysis_ids(name)
-            foss_project.analyse(reuse_id, reuse_group)
+            group_id = foss_project.get_group_id()
+            reuse_id = foss_project.get_previous_upload_analysis_id(name, group_id)
+            foss_project.analyse(reuse_id, group_id)
             report = foss_project.get_report('dep5')
             print(report, file=f)
     # open for parsing as binary since copyrights may (incorrectly) contain binary data
diff --git a/package-source-builder/overlay/usr/bin/fossology.py b/package-source-builder/overlay/usr/bin/fossology.py
index 30ec54b..eed3523 100755
--- a/package-source-builder/overlay/usr/bin/fossology.py
+++ b/package-source-builder/overlay/usr/bin/fossology.py
@@ -44,7 +44,13 @@ class ApertisFossology:
             print_err(".", end = '', flush = True)
             time.sleep(1)
 
-    def get_previous_upload_analysis_ids(self, name):
+    def get_group_id(self):
+        resp = self.session.get(f"{self.server}/jobs?upload={self.upload_id}")
+        if resp.status_code != 200:
+            raise Exception('GET /jobs?upload={} {}'.format(self.upload_id, resp.status_code))
+        return resp.json()[-1]["groupId"]
+
+    def get_previous_upload_analysis_id(self, name, group_id):
         last_deleted_upload_id = 0
         resp = self.session.get(f"{self.server}/jobs")
         if resp.status_code != 200:
@@ -54,11 +60,12 @@ class ApertisFossology:
             if job["name"] == "Delete":
                 last_deleted_upload_id = job["uploadId"]
             elif (job["name"] == name and
+                    job["groupId"] == group_id and
                     job["uploadId"] != self.upload_id and
                     job["uploadId"] != last_deleted_upload_id):
-                return job["uploadId"], job["groupId"]
+                return job["uploadId"]
 
-        return 0, 0
+        return 0
 
     def upload(self, url, branch, name):
         print_err("Uploading {} branch {}".format(url, branch))
@@ -183,9 +190,11 @@ if __name__ == "__main__":
 
     project.upload(source_url, source_branch, name)
 
-    reuse_id, reuse_group = project.get_previous_upload_analysis_ids(name)
+    group_id = project.get_group_id()
+
+    reuse_id = project.get_previous_upload_analysis_id(name, group_id)
 
-    project.analyse(reuse_id, reuse_group)
+    project.analyse(reuse_id, group_id)
 
     report = project.get_report('dep5')
     print(report)
-- 
GitLab