public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Owen W. Taylor <otaylor@fishsoup.net>
To: git-commits@fedoraproject.org
Subject: [flatpaks/flatpak-runtime] f45: Mark package in the runtime with missing devel packages in the SDK
Date: Fri, 11 Sep 2026 14:40:41 GMT	[thread overview]
Message-ID: <178913764193.1.16347284669631304156.flatpaks-flatpak-runtime-27ef6bdc76d5@fedoraproject.org> (raw)

A new commit has been pushed.

Repo   : flatpaks/flatpak-runtime
Branch : f45
Commit : 27ef6bdc76d554eadb3bce68e2b2a296561d248b
Author : Owen W. Taylor <otaylor@fishsoup.net>
Date   : 2020-03-20T21:51:58+01:00
Stats  : +97/-11 in 4 file(s)
URL    : https://src.fedoraproject.org/flatpaks/flatpak-runtime/c/27ef6bdc76d554eadb3bce68e2b2a296561d248b?branch=f45

Log:
Mark package in the runtime with missing devel packages in the SDK

---
diff --git a/reports/report.css b/reports/report.css
index 5f6f99a..80fe6a7 100644
--- a/reports/report.css
+++ b/reports/report.css
@@ -108,7 +108,12 @@ td.root {
     padding: 0px;
 }
 td.extra {
-    background: #8888bb;
+    background: repeating-linear-gradient(-45deg, #999, #999 3px, #ccc 3px, #ccc 6px);
+    border: 1px solid #666666;
+    padding: 0px;
+}
+td.devel-missing {
+    background: repeating-linear-gradient(90deg, #999, #999 3px, #ccc 3px, #ccc 6px);
     border: 1px solid #666666;
     padding: 0px;
 }
@@ -142,7 +147,7 @@ tr.waived {
     color: #006600;
 }
 tr.extra {
-    color: #000066;
+    color: #660066;
 }
 .hidden {
     display: none;

diff --git a/runtime-template.html b/runtime-template.html
index 0447eed..e7c990d 100644
--- a/runtime-template.html
+++ b/runtime-template.html
@@ -38,6 +38,7 @@
 	<tr><td class="files"></td><td> - Included because of files in runtime, also depended upon</td></tr>
 	<tr><td class="dep"></td><td> - Included because of dependencies</td></tr>
 	<tr><td class="extra"></td><td> - Listed as an extra package in package-notes.txt</td></tr>
+	<tr><td class="devel-missing"></td><td> - Pulled in as a dependency, no devel package in SDK</td></tr>
       </table>
       <div class="note">Mouse over shaded squares for details.</div>
     </div>

diff --git a/tools/generate-runtime-report.py b/tools/generate-runtime-report.py
index 53df72c..428067e 100755
--- a/tools/generate-runtime-report.py
+++ b/tools/generate-runtime-report.py
@@ -7,6 +7,7 @@ import os
 import re
 import subprocess
 import sys
+import util
 
 def start(msg):
     print("{}: \033[90m{} ... \033[39m".format(os.path.basename(sys.argv[0]), msg), file=sys.stderr, end="")
@@ -25,6 +26,20 @@ _nvr_to_name_re = re.compile('^(.*)-[^-]*-[^-]*')
 def nvr_to_name(nvr):
     return _nvr_to_name_re.match(nvr).group(1)
 
+def make_devel_packages(repo_info):
+    devel_packages = {}
+
+    start("Making devel package map")
+    def cb(name, srpm):
+        if name.endswith('-devel'):
+            srpm_name = srpm.rsplit('-', 2)[0]
+            devel_packages[srpm_name] = name
+    done()
+
+    util.foreach_package(repo_info, cb)
+
+    return devel_packages
+
 class Package(object):
     def __init__(self, name):
         self.name = name
@@ -53,17 +68,22 @@ class Package(object):
     @property
     def klass(self):
         if self.flag == 'F':
-            return "flagged"
-        elif self.flag == 'F?':
-            return "questionable"
-        elif self.flag == 'FD':
-            return "flagged-dep"
+            klass = "flagged"
+        elif self. flag == 'F?':
+            klass = "questionable"
+        elif self. flag == 'FD':
+            klass = "flagged-dep"
         elif self.flag == 'W':
-            return "waived"
+            klass = "waived"
         elif self.flag is not None and self.flag.startswith('E'):
-            return "extra"
-        elif self.gnome_platform and not self.live:
-            return "questionable"
+            klass = "extra"
+        else:
+            klass = ""
+
+        if self.source_package.devel_missing:
+            klass += ' devel-missing'
+
+        return klass
 
     @property
     def modules(self):
@@ -201,6 +221,14 @@ class SourcePackage(object):
         else:
             return ""
 
+    @property
+    def devel_missing(self):
+        devel = devel_packages.get(self.name)
+        if devel is not None:
+            return devel not in packages
+        else:
+            return False
+
 class Letter(object):
     def __init__(self, letter):
         self.letter = letter
@@ -306,6 +334,10 @@ def read_package_notes():
 
             yield name, note, flag
 
+devel_packages = util.get_repo_cacheable('devel-packages', make_devel_packages)
+# Not gdk-pixbuf2-xlib-devel
+devel_packages['gdk-pixbuf2'] = 'gdk-pixbuf2-devel'
+
 add_packages('out/freedesktop-Platform.packages', 'freedesktop_platform', resolve_deps=True)
 add_packages('out/freedesktop-Sdk.packages', 'freedesktop_sdk', resolve_deps=True)
 add_packages('out/gnome-Platform.packages', 'gnome_platform', resolve_deps=True)

diff --git a/tools/util.py b/tools/util.py
index 324055e..91df779 100644
--- a/tools/util.py
+++ b/tools/util.py
@@ -116,6 +116,54 @@ def foreach_file(repo_info, cb):
 
         done()
 
+class PackageMapHandler(xml.sax.handler.ContentHandler):
+    def __init__(self, cb):
+        self.cb = cb
+        self.name = None
+        self.sourcerpm = None
+        self.chars = None
+
+    def startElement(self, name, attrs):
+        if name == 'package':
+            pass
+        elif name in ('name', 'rpm:sourcerpm'):
+            self.chars = ''
+
+    def endElement(self, name):
+        if name == 'package':
+            self.cb(self.name, self.sourcerpm)
+            self.name = None
+            self.sourcerpm = None
+        elif name == 'name':
+            self.name = self.chars
+            self.chars = None
+        elif name == 'rpm:sourcerpm':
+            self.sourcerpm = self.chars
+            self.chars = None
+
+    def characters(self, content):
+        if self.chars is not None:
+            self.chars += content
+
+def foreach_package(repo_info, cb):
+    for repo in REPOS:
+        start("Scanning files for {}".format(repo))
+        repo_dir, repomd_contents = repo_info[repo]
+        root = ET.fromstring(repomd_contents)
+
+        ns = {'repo': 'http://linux.duke.edu/metadata/repo'}
+        filelists_location = root.find("./repo:data[@type='primary']/repo:location", ns).attrib['href']
+        filelists_path = os.path.join(repo_dir, filelists_location)
+        if os.path.commonprefix([filelists_path, repo_dir]) != repo_dir:
+            done()
+            error("{}: filelists directory is outside of repository".format(repo_dir))
+
+        handler = PackageMapHandler(cb)
+        with gzip.open(filelists_path, 'rb') as f:
+            xml.sax.parse(f, handler)
+
+        done()
+
 def get_repo_cacheable(name, generate):
     hash_text = ''
     repos_dir = os.path.join(XDG_CACHE_HOME, "fedmod/repos")

                 reply	other threads:[~2026-09-11 14:40 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=178913764193.1.16347284669631304156.flatpaks-flatpak-runtime-27ef6bdc76d5@fedoraproject.org \
    --to=otaylor@fishsoup.net \
    --cc=git-commits@fedoraproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox