From 6c762800fcf9b54303a92b13ccd81e0f29542bc4 Mon Sep 17 00:00:00 2001
From: Miroslav Franc <mfranc@suse.cz>
Date: Apr 30 2025 09:26:26 +0000
Subject: kss-dashboard: don't process already processed cves


---

diff --git a/scripts/python/kss-dashboard b/scripts/python/kss-dashboard
index 63d5f4b..38c44b9 100755
--- a/scripts/python/kss-dashboard
+++ b/scripts/python/kss-dashboard
@@ -465,6 +465,13 @@ def exportpatch(b):
     for s in b.shas:
         yield get_backport_string([f'bsc#{b.data.id}', b.cve], s, re.sub(CVE_PATTERN, '', b.data.summary.removeprefix('VUL-0: ').replace('kernel: ', ''))) + '\n'
 
+def output_exists(f, outdir, nopdir):
+    if os.path.isfile(f):
+        return f
+    elif nopdir and os.path.isfile(nopdir + f[len(outdir):]):
+        return nopdir + f[len(outdir):]
+    return ''
+
 class ParallelRunner:
     def __init__(self, blist, directory_pair, j):
         self.failures = [ f"# {make_url(b.data.id)} # NO CVE NUMBER" for b in blist if not b.cve ]
@@ -485,9 +492,15 @@ class ParallelRunner:
                 yield f'{script} > {path}\n'
             return
         with ProcessPoolExecutor(max_workers=self.n_workers) as executor:
+            mod_jobs = []
             for job in self.jobs:
-                yield color_format(T_PURPLE, f"Schedule '{job[0]} > {job[1]}' ... (with {self.n_workers} workers...)\n")
-            futures = { executor.submit(one_job, job): job for job in self.jobs }
+                output_f = output_exists(job[1], self.out_idr, self.nop_dir)
+                if bool(output_f):
+                    yield color_format(T_BLUE, f"Skipping '{job[0]} > {output_f}' ... (already exists)\n")
+                else:
+                    mod_jobs.append(job)
+                    yield color_format(T_PURPLE, f"Schedule '{job[0]} > {job[1]}' ... (with {self.n_workers} workers...)\n")
+            futures = { executor.submit(one_job, job): job for job in mod_jobs }
             for f in as_completed(futures):
                 job = futures[f]
                 file_to_store = str(job[1])