From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2201) id D9B763858425; Sat, 16 Dec 2023 16:33:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D9B763858425 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1702744393; bh=J8lJi4jtuJCLie41oBejVtaZBDIVRyRcmolfaMQpNLA=; h=To:Subject:Date:From:From; b=KLCCregH+NV+SmhhpbL+aFIrE4p6ecup1IRhRRM6CaH8q10I8jAlk+scQMqSxz2r8 nhZpvICN2ZQVvMt5waKzaWk/zikVpdnu2ul8Udod0bn3a33ZGVBseYNlxvvCI0Eqw7 NFoJqgKKDTaRoW/LFz5IsUgeN3D1EotHrqWnHe4o= To: cygwin-apps-cvs@sourceware.org Subject: [calm - Cygwin server-side packaging maintenance script] branch master, updated. 20230209-51-ge0c3e0a X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 23cbaac193afe222962fe12b8a5710973678b363 X-Git-Newrev: e0c3e0a55b64689124adc70f5b5b2ee0926856b9 Message-Id: <20231216163313.D9B763858425@sourceware.org> Date: Sat, 16 Dec 2023 16:33:13 +0000 (GMT) From: Jon Turney List-Id: https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=e0c3e0a55b64689124adc70f5b5b2ee0926856b9 commit e0c3e0a55b64689124adc70f5b5b2ee0926856b9 Author: Jon Turney 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 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('

Packages without a maintainer.

', file=body) print('', file=body) - print('', file=body) + print('', file=body) - for up in sorted(um_list, key=lambda i: (i.rdepends + i.build_rdepends, not i.unchanged, i.ts), reverse=True): - print('' % - (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('' % + (pkg2html.tsformat(up.ts), linkify(up.pn, up.po), up.v, up.upstream_v, up.rdepends, up.build_rdepends, up.importance), file=body) print('
last updatedpackageversionupstream versionrdependsbuild_rdepends
last updatedpackageversionupstream versionrdependsbuild_rdependsimportance
%s%s%s%s%s%s
%s%s%s%s%s%s%s
', file=body)