diff --git a/package-notes.txt b/package-notes.txt
index 8ad049a..7ea16e5 100644
--- a/package-notes.txt
+++ b/package-notes.txt
@@ -3,6 +3,10 @@
# BINARY-PACKAGE-NAME: FREE FORM NOTES
# BINARY-PACKAGE-NAME: FLAG: FREE FORM NOTES
# Where flag is one of
+# EB: Extra package to include in base runtime
+# EB_SDK: Extra package to include in base sdk
+# E: Extra package to include in runtime
+# E_SDK: Extra package to include in sdk
# F: flag this package as a problem
# F?: flag this package as questionable
# FD: flag that this package is only being pulled in as a dependency of a problem package
diff --git a/report-template.html b/report-template.html
index c02dae1..2539e9e 100644
--- a/report-template.html
+++ b/report-template.html
@@ -28,6 +28,7 @@
| - Root package, only included because of files in runtime |
| - Included because of files in runtime, also depended upon |
| - Included because of dependencies |
+ - Listed as an extra package in package-notes.txt |
Mouse over shaded squares for details.
diff --git a/report.css b/report.css
index 65f3cea..ae56c53 100644
--- a/report.css
+++ b/report.css
@@ -82,6 +82,11 @@ td.root {
border: 1px solid #666666;
padding: 0px;
}
+td.extra {
+ background: #8888bb;
+ border: 1px solid #666666;
+ padding: 0px;
+}
td.present, td.files {
background: #aaaaaa;
border: 1px solid #666666;
@@ -111,6 +116,9 @@ tr.flagged-dep {
tr.waived {
color: #006600;
}
+tr.extra {
+ color: #000066;
+}
.hidden {
display: none;
}
diff --git a/tools/generate-report.py b/tools/generate-report.py
index 81a0693..7f25374 100755
--- a/tools/generate-report.py
+++ b/tools/generate-report.py
@@ -60,6 +60,8 @@ class Package(object):
return "flagged-dep"
elif self.flag == 'W':
return "waived"
+ elif self.flag is not None and self.flag.startswith('E'):
+ return "extra"
elif self.gnome_platform and not self.live:
return "questionable"
@@ -128,6 +130,8 @@ class Package(object):
return 'present'
elif required_by is not None and len(required_by) > 0:
return 'files'
+ elif self.flag is not None and self.flag.startswith('E'):
+ return 'extra'
else:
return 'root'
@@ -218,10 +222,13 @@ def add_package(name, which, level, only_if_exists=False, source_package=None):
if source_package is not None:
pkg.source_package = source_package
-def add_packages(filename, which, resolve_deps=False, only_if_exists=False):
- start("Adding packages from {}".format(filename))
- with open(filename) as f:
- pkgs = set(line.strip() for line in f)
+def add_packages(source, which, resolve_deps=False, only_if_exists=False):
+ if isinstance(source, str):
+ start("Adding packages from {}".format(source))
+ with open(source) as f:
+ pkgs = set(line.strip() for line in f)
+ else:
+ pkgs = source
if resolve_deps:
resolved_packages = json.loads(fedmod_output(['resolve-deps', '--json'] + list(pkgs)))
@@ -246,7 +253,8 @@ def add_packages(filename, which, resolve_deps=False, only_if_exists=False):
for package in pkgs:
add_package(package, which, level=2, only_if_exists=only_if_exists)
- done()
+ if isinstance(source, str):
+ done()
def add_package_files(filename, which):
with open(filename) as f:
@@ -260,6 +268,43 @@ def add_package_files(filename, which):
else:
setattr(pkg, which + '_files', [f])
+def read_package_notes():
+ comment_re = re.compile(r'\s*#.*')
+ flag_re = re.compile(r'[A-Z_?]+$')
+ package_re = re.compile(r'\S+')
+
+ with open("package-notes.txt") as f:
+ for line in f:
+ line = comment_re.sub('', line)
+ line = line.strip()
+ if line == '':
+ continue
+ parts = line.split(":", 2)
+ name = parts[0].strip()
+ if not re.match(package_re, name):
+ warn("Can't parse package note: {}".format(line))
+ continue
+ if len(parts) == 1:
+ flag = note = None
+ elif len(parts) == 2:
+ x = parts[1].strip()
+ if flag_re.match(x):
+ flag = x
+ note = None
+ else:
+ note = x
+ flag = None
+ elif len(parts) == 3:
+ x = parts[1].strip()
+ if flag_re.match(x):
+ flag = x
+ note = parts[2].strip()
+ else:
+ flag = None
+ note = parts[1] + ':' + parts[2]
+
+ yield name, note, flag
+
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)
@@ -272,6 +317,32 @@ add_package_files('out/freedesktop-Sdk.matched', 'freedesktop_sdk')
add_package_files('out/gnome-Platform.matched', 'gnome_platform')
add_package_files('out/gnome-Sdk.matched', 'gnome_sdk')
+# Add extra packages
+extra_base = []
+extra_base_sdk = []
+extra = []
+extra_sdk = []
+
+for name, note, flag in read_package_notes():
+ if flag == 'EB':
+ extra_base.append(name)
+ extra_base_sdk.append(name)
+ extra.append(name)
+ extra_sdk.append(name)
+ elif flag == 'EB_SDK':
+ extra_base_sdk.append(name)
+ extra_sdk.append(name)
+ elif flag == 'E':
+ extra.append(name)
+ extra_sdk.append(name)
+ elif flag == 'E_SDK':
+ extra_sdk.append(name)
+
+add_packages(extra_base, 'freedesktop_platform', resolve_deps=True)
+add_packages(extra_base_sdk, 'freedesktop_sdk', resolve_deps=True)
+add_packages(extra, 'gnome_platform', resolve_deps=True)
+add_packages(extra_sdk, 'gnome_sdk', resolve_deps=True)
+
source_packages = {}
for package in packages.values():
source_package = source_packages.get(package.source_package, None)
@@ -307,51 +378,17 @@ for l in output.split('\n'):
package_to_module[fields[0]] = fields[1][1:-1]
done()
-start("Loading package notes")
-comment_re = re.compile(r'\s*#.*')
-flag_re = re.compile(r'[A-Z?]+$')
-package_re = re.compile(r'\S+')
-
-with open("package-notes.txt") as f:
- for line in f:
- line = comment_re.sub('', line)
- line = line.strip()
- if line == '':
- continue
- parts = line.split(":", 2)
- name = parts[0].strip()
- if not re.match(package_re, name):
- warn("Can't parse package note: {}".format(line))
- continue
- if len(parts) == 1:
- flag = note = None
- elif len(parts) == 2:
- x = parts[1].strip()
- if flag_re.match(x):
- flag = x
- note = None
- else:
- note = x
- flag = None
- elif len(parts) == 3:
- x = parts[1].strip()
- if flag_re.match(x):
- flag = x
- note = parts[2].strip()
- else:
- flag = None
- note = parts[1] + ':' + parts[2]
-
- pkg = packages.get(name, None)
- if pkg is None:
- warn("Package note for missing package: {}".format(name))
- continue
-
- if flag is not None:
- pkg.flag = flag
- if note is not None:
- pkg._note = note
-done()
+# Add package notes to packages
+for name, note, flag in read_package_notes():
+ pkg = packages.get(name, None)
+ if pkg is None:
+ warn("Package note for missing package: {}".format(name))
+ continue
+
+ if flag is not None:
+ pkg.flag = flag
+ if note is not None:
+ pkg._note = note
#
# Get summary information for unmatched files