public inbox for cygwin-apps-cvs@sourceware.org
help / color / mirror / Atom feed
* [calm - Cygwin server-side packaging maintenance script] branch master, updated. 20230209-51-ge0c3e0a
@ 2023-12-16 16:33 Jon Turney
  0 siblings, 0 replies; only message in thread
From: Jon Turney @ 2023-12-16 16:33 UTC (permalink / raw)
  To: cygwin-apps-cvs




https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=e0c3e0a55b64689124adc70f5b5b2ee0926856b9

commit e0c3e0a55b64689124adc70f5b5b2ee0926856b9
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Thu Dec 14 19:26:40 2023 +0000

    Facilitate more python2 removal

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=c48d8a653378e405bc1083e33b7ea9991b8f6a04

commit c48d8a653378e405bc1083e33b7ea9991b8f6a04
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Tue Dec 12 22:01:29 2023 +0000

    Also sort by package "importance" in unmaintained packages report


Diff:
---
 calm/package.py       | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
 calm/past_mistakes.py |  4 +++-
 calm/reports.py       |  9 +++++----
 3 files changed, 57 insertions(+), 5 deletions(-)

diff --git a/calm/package.py b/calm/package.py
index a9aff3d..dd46b57 100755
--- a/calm/package.py
+++ b/calm/package.py
@@ -56,6 +56,16 @@ class Kind(Enum):
     source = 2
 
 
+@unique
+class Importance(IntEnum):
+    base = 1     # has base category
+    basedep = 2  # doesn't have base category, but is depended on by something that does
+    other = 3    # all others
+
+    def __str__(self):
+        return self.name
+
+
 # a path inside a package repository (e.g relative to relarea)
 class RepoPath():
     def __init__(self, _arch=None, _path=None, _fn=None):
@@ -1077,9 +1087,48 @@ def validate_packages(args, packages, valid_provides_extra=None, missing_obsolet
     # validate that all packages are in the package maintainers list
     error = validate_package_maintainers(args, packages) or error
 
+    assign_importance(packages)
+
     return not error
 
 
+# assign importance classes to packages
+def assign_importance(packages):
+    # XXX: if we had some package popularity data, we'd use it here
+    for po in packages.values():
+        po.importance = Importance.other
+
+    # recursively give dependencies of base packages the basedep importance
+    def recursive_basedep(p):
+        bv = p.best_version
+        requires = p.version_hints[bv].get('depends', '').split(', ')
+        requires = [re.sub(r'(.*) +\(.*\)', r'\1', r) for r in requires]
+        for r in requires:
+            if r in packages:
+                if packages[r].importance == Importance.other:
+                    packages[r].importance = Importance.basedep
+                    recursive_basedep(packages[r])
+
+    for po in packages.values():
+        bv = po.best_version
+        categories = po.version_hints[bv]['category'].lower().split()
+        if 'base' in categories:
+            recursive_basedep(po)
+
+    # base packages have base importance
+    for po in packages.values():
+        bv = po.best_version
+        categories = po.version_hints[bv]['category'].lower().split()
+        if 'base' in categories:
+            po.importance = Importance.base
+
+    # a source package has the importance of it's most important install package
+    for po in packages.values():
+        if po.kind == Kind.source:
+            for ip in po.is_used_by:
+                po.importance = min(po.importance, packages[ip].importance)
+
+
 #
 def validate_package_maintainers(args, packages):
     error = False
diff --git a/calm/past_mistakes.py b/calm/past_mistakes.py
index 13dfd50..5b7ddb1 100644
--- a/calm/past_mistakes.py
+++ b/calm/past_mistakes.py
@@ -171,8 +171,10 @@ nonexistent_provides = historical_provides + [
     'python2',
     'python2-devel',
     'python27',
-    'python-pygments',
     'python-lxml',
+    'python-mx',
+    'python-pygments',
+    'python-pynotify',
     '_windows',
     r'perl5_\d+',
     r'ruby_\d+',
diff --git a/calm/reports.py b/calm/reports.py
index 6fa570e..d56eb89 100644
--- a/calm/reports.py
+++ b/calm/reports.py
@@ -112,6 +112,7 @@ def unmaintained(args, packages, reportlist):
         up.ts = po.tar(v).mtime
         up.rdepends = len(rdepends)
         up.build_rdepends = len(build_rdepends)
+        up.importance = po.importance
 
         # some packages are mature. If 'v' is still latest upstream version,
         # then maybe we don't need to worry about this package quite as much...
@@ -125,11 +126,11 @@ def unmaintained(args, packages, reportlist):
     print('<p>Packages without a maintainer.</p>', file=body)
 
     print('<table class="grid">', file=body)
-    print('<tr><th>last updated</th><th>package</th><th>version</th><th>upstream version</th><th>rdepends</th><th>build_rdepends</th></tr>', file=body)
+    print('<tr><th>last updated</th><th>package</th><th>version</th><th>upstream version</th><th>rdepends</th><th>build_rdepends</th><th>importance</th></tr>', file=body)
 
-    for up in sorted(um_list, key=lambda i: (i.rdepends + i.build_rdepends, not i.unchanged, i.ts), reverse=True):
-        print('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>' %
-              (pkg2html.tsformat(up.ts), linkify(up.pn, up.po), up.v, up.upstream_v, up.rdepends, up.build_rdepends), file=body)
+    for up in sorted(um_list, key=lambda i: (-i.importance, i.rdepends + i.build_rdepends, not i.unchanged, i.ts), reverse=True):
+        print('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>' %
+              (pkg2html.tsformat(up.ts), linkify(up.pn, up.po), up.v, up.upstream_v, up.rdepends, up.build_rdepends, up.importance), file=body)
 
     print('</table>', file=body)
 


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-12-16 16:33 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-16 16:33 [calm - Cygwin server-side packaging maintenance script] branch master, updated. 20230209-51-ge0c3e0a Jon Turney

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).