From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2201) id 1ECBE3858C27; Sun, 8 May 2022 14:56:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1ECBE3858C27 To: cygwin-apps-cvs@sourceware.org Subject: [calm - Cygwin server-side packaging maintenance script] branch master, updated. 20210626-36-g417126b X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 1fd374428b07a45b188b29fa4e7b2590a497f51a X-Git-Newrev: 417126bee6afcf6f5f3110d7fa8f7d5c5316c8fa Message-Id: <20220508145629.1ECBE3858C27@sourceware.org> Date: Sun, 8 May 2022 14:56:29 +0000 (GMT) From: Jon TURNEY X-BeenThere: cygwin-apps-cvs@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin-apps git logs List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 08 May 2022 14:56:29 -0000 https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=417126bee6afcf6f5f3110d7fa8f7d5c5316c8fa commit 417126bee6afcf6f5f3110d7fa8f7d5c5316c8fa Author: Jon Turney Date: Sat Mar 5 16:33:05 2022 +0000 Factor out navigating from pkg to srcpkg https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=8a55677b7ddc5f268ffd8a0759ae970a0c099ca3 commit 8a55677b7ddc5f268ffd8a0759ae970a0c099ca3 Author: Jon Turney Date: Mon Feb 28 16:34:29 2022 +0000 Give unmaintained packages the 'unmaintained' pseudo-category Give unmaintained packages the 'unmaintained' pseudo-category in setup.ini https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=2842bf596c73a76dab7dc26d4d85b8009a6016c1 commit 2842bf596c73a76dab7dc26d4d85b8009a6016c1 Author: Jon Turney Date: Thu Mar 3 16:34:17 2022 +0000 Drop MoveList.copy() Unneeded since 46bebfc1 https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=c4c43f1c5813ba64cefd98354ec0d321a319f883 commit c4c43f1c5813ba64cefd98354ec0d321a319f883 Author: Jon Turney Date: Fri Mar 4 17:00:17 2022 +0000 Drop mailhost & mailport from BufferingSMTPHandler Drop mailhost & mailport from BufferingSMTPHandler, unused since 356b1abe changed from using SMTP to sendmail. Diff: --- calm/buffering_smtp_handler.py | 3 -- calm/common_constants.py | 4 --- calm/movelist.py | 16 --------- calm/package.py | 49 +++++++++++++++++++-------- calm/pkg2html.py | 2 +- test/testdata/inifile/setup.ini.expected | 6 ++-- test/testdata/process_arch/setup.ini.expected | 6 ++-- 7 files changed, 41 insertions(+), 45 deletions(-) diff --git a/calm/buffering_smtp_handler.py b/calm/buffering_smtp_handler.py index c826d34..10b1e7b 100644 --- a/calm/buffering_smtp_handler.py +++ b/calm/buffering_smtp_handler.py @@ -34,12 +34,9 @@ class BufferingSMTPHandler(logging.handlers.BufferingHandler): def __init__(self, toaddrs, subject, - mailhost=common_constants.MAILHOST, fromaddr='cygwin-apps@cygwin.com', logging_format='%(levelname)s: %(message)s'): logging.handlers.BufferingHandler.__init__(self, capacity=0) - self.mailhost = mailhost - self.mailport = None self.fromaddr = fromaddr self.toaddrs = toaddrs self.subject = subject diff --git a/calm/common_constants.py b/calm/common_constants.py index ebbe834..203685d 100644 --- a/calm/common_constants.py +++ b/calm/common_constants.py @@ -66,9 +66,6 @@ PKGMAINT = '/www/sourceware/htdocs/cygwin/cygwin-pkg-maint' # removed files archive directory VAULT = '/sourceware/snapshot-tmp/cygwin' -# SMTP smarthost -MAILHOST = 'localhost' - # defaults for package freshness DEFAULT_KEEP_COUNT = 3 DEFAULT_KEEP_COUNT_TEST = 2 @@ -79,7 +76,6 @@ DEFAULT_KEEP_DAYS = 0 if os.uname()[1] == 'tambora': EMAILS = 'jon.turney@dronecode.org.uk' ALWAYS_BCC = '' - MAILHOST = 'allegra' # package compressions PACKAGE_COMPRESSIONS = ['bz2', 'gz', 'lzma', 'xz', 'zst'] diff --git a/calm/movelist.py b/calm/movelist.py index c7bdde8..7bf445f 100644 --- a/calm/movelist.py +++ b/calm/movelist.py @@ -23,7 +23,6 @@ import logging import os -import shutil from collections import defaultdict from . import utils @@ -91,18 +90,3 @@ class MoveList(object): if pi: i.movelist[p] = pi return i - - # copy the files in a movelist - def copy(self, args, fromdir, todir): - for p in sorted(self.movelist): - logging.debug("mkdir %s" % os.path.join(todir, p)) - if not args.dryrun: - utils.makedirs(os.path.join(todir, p)) - logging.debug("copy from '%s' to '%s':" % (os.path.join(fromdir, p), os.path.join(todir, p))) - for f in sorted(self.movelist[p]): - if os.path.exists(os.path.join(fromdir, p, f)): - logging.debug("%s" % (f)) - if not args.dryrun: - shutil.copy2(os.path.join(fromdir, p, f), os.path.join(todir, p, f)) - else: - logging.error("%s can't be copied as it doesn't exist" % (f)) diff --git a/calm/package.py b/calm/package.py index 8c6a3f1..522689e 100755 --- a/calm/package.py +++ b/calm/package.py @@ -79,6 +79,22 @@ class Package(object): def versions(self): return self.tarfiles.keys() + def srcpackage(self, vr, suffix=True): + if self.kind == Kind.source: + spn = self.name + else: + # source tarfile is in the external-source package, if specified, + # otherwise it's in the sibling source package + hints = self.version_hints.get(vr, {}) + spn = hints.get('external-source', self.name + '-src') + + # strip '-src' suffix? + if not suffix: + if spn.endswith('-src'): + spn = spn[:-4] + + return spn + # information we keep about a tar file class Tar(object): @@ -419,6 +435,7 @@ def read_one_package(packages, p, relpath, dirpath, files, remove, kind, strict) actual_tars[ovr] = tars[vr] packages[pn] = Package() + packages[pn].name = pn packages[pn].version_hints = version_hints packages[pn].override_hints = override_hints packages[pn].tarfiles = actual_tars @@ -503,6 +520,7 @@ def validate_packages(args, packages, valid_requires_extra=None): packages[p].obsolete = False packages[p].rdepends = set() packages[p].build_rdepends = set() + packages[p].orphaned = False # perform various package validations for p in sorted(packages.keys()): @@ -754,12 +772,7 @@ def validate_packages(args, packages, valid_requires_extra=None): sourceless = False missing_source = True - # source tarfile is in the external-source package, if specified, - # otherwise it's in the sibling source package - if 'external-source' in packages[p].version_hints[v]: - es_p = packages[p].version_hints[v]['external-source'] - else: - es_p = p + '-src' + es_p = packages[p].srcpackage(v) # mark the source tarfile as being used by an install tarfile if es_p in packages: @@ -836,7 +849,7 @@ def validate_packages(args, packages, valid_requires_extra=None): # ignore packages which have a different external-source: # (e.g. where a different source package supersedes this one) - es = packages[install_p].version_hints[packages[install_p].best_version].get('external-source', source_p) + es = packages[install_p].srcpackage(packages[install_p].best_version) if es != source_p: continue @@ -878,6 +891,7 @@ def validate_package_maintainers(args, packages): # read maintainer list mlist = {} mlist = maintainers.add_packages(mlist, args.pkglist) + pkg_maintainers = maintainers.invert(mlist) # make the list of all packages all_packages = maintainers.all_packages(mlist) @@ -900,7 +914,7 @@ def validate_package_maintainers(args, packages): # validate that the source package has a maintainer bv = packages[p].best_version if bv: - es = packages[p].version_hints[bv].get('external-source', p) + es = packages[p].srcpackage(bv) if es in packages: es_pn = packages[es].orig_name if es_pn not in all_packages and p not in all_packages: @@ -908,6 +922,10 @@ def validate_package_maintainers(args, packages): logging.error("package '%s' is not obsolete, but has no maintainer" % (p)) error = True + if 'ORPHANED' in pkg_maintainers[packages[p].orig_name]: + # note orphaned packages + packages[p].orphaned = True + return error @@ -969,9 +987,13 @@ def write_setup_ini(args, packages, arch): if 'ldesc' in po.version_hints[bv]: print("ldesc: %s" % po.version_hints[bv]['ldesc'], file=f) + # mark orphaned packages with the 'unmaintained' pseudo-category + category = po.version_hints[bv]['category'] + if po.orphaned: + category += ' unmaintained' # for historical reasons, category names must start with a capital # letter - category = ' '.join(map(upper_first_character, po.version_hints[bv]['category'].split())) + category = ' '.join(map(upper_first_character, category.split())) print("category: %s" % category, file=f) # compute the union of requires for all versions @@ -1074,12 +1096,9 @@ def write_setup_ini(args, packages, arch): hints = po.version_hints.get(version, {}) # follow external-source - if 'external-source' in hints: - s = hints['external-source'] - else: - s = sibling_src - if s not in packages: - s = None + s = po.srcpackage(version) + if s not in packages: + s = None # external-source points to a source file in another package if s: diff --git a/calm/pkg2html.py b/calm/pkg2html.py index b2080dc..ae6a6a7 100755 --- a/calm/pkg2html.py +++ b/calm/pkg2html.py @@ -243,7 +243,7 @@ def update_package_listings(args, packages): if homepage: print('homepage: %s

' % (homepage, homepage), file=f) else: - es = po.version_hints[bv].get('external-source', p + '-src') + es = po.srcpackage(bv) print('source package: %s

' % linkify_package(es), file=f) es_po = arch_package(packages, es) diff --git a/test/testdata/inifile/setup.ini.expected b/test/testdata/inifile/setup.ini.expected index 3f583d7..b96b8a9 100644 --- a/test/testdata/inifile/setup.ini.expected +++ b/test/testdata/inifile/setup.ini.expected @@ -339,7 +339,7 @@ '\n' '@ test-c\n' 'sdesc: "test package C"\n' - 'category: Devel\n' + 'category: Devel Unmaintained\n' 'requires: test-d test-e\n' 'version: 1.0-1\n' 'install: noarch/release/test-c/test-c-1.0-1.tar.xz 256 ' @@ -351,7 +351,7 @@ '\n' '@ test-d\n' 'sdesc: "test package D"\n' - 'category: Devel\n' + 'category: Devel Unmaintained\n' 'version: 1.0.42590-1\n' 'install: noarch/release/test-d/test-d-1.0-1.tar.xz 236 ' '2e47817b620a7dbfe6810d47aee0adbcdf4663dc57932bcc51fc4b9bcfafa00dbbc2bfbefb1692dd5f6cc5333f23aea324d7c4d9b2ca091b917811fcdb70ca1f\n' @@ -360,7 +360,7 @@ '\n' '@ test-e\n' 'sdesc: "test package E"\n' - 'category: Devel\n' + 'category: Devel Unmaintained\n' 'version: 1.0-1\n' 'install: noarch/release/test-e/test-e-1.0-1.tar.xz 236 ' '2e47817b620a7dbfe6810d47aee0adbcdf4663dc57932bcc51fc4b9bcfafa00dbbc2bfbefb1692dd5f6cc5333f23aea324d7c4d9b2ca091b917811fcdb70ca1f\n' diff --git a/test/testdata/process_arch/setup.ini.expected b/test/testdata/process_arch/setup.ini.expected index d97f1a3..9e9fb93 100644 --- a/test/testdata/process_arch/setup.ini.expected +++ b/test/testdata/process_arch/setup.ini.expected @@ -328,7 +328,7 @@ '\n' '@ test-c\n' 'sdesc: "test package C"\n' - 'category: Devel\n' + 'category: Devel Unmaintained\n' 'requires: test-d test-e\n' 'version: 1.0-1\n' 'install: noarch/release/test-c/test-c-1.0-1.tar.xz 256 ' @@ -340,7 +340,7 @@ '\n' '@ test-d\n' 'sdesc: "test package D"\n' - 'category: Devel\n' + 'category: Devel Unmaintained\n' 'version: 1.0.42590-1\n' 'install: noarch/release/test-d/test-d-1.0-1.tar.xz 236 ' '2e47817b620a7dbfe6810d47aee0adbcdf4663dc57932bcc51fc4b9bcfafa00dbbc2bfbefb1692dd5f6cc5333f23aea324d7c4d9b2ca091b917811fcdb70ca1f\n' @@ -349,7 +349,7 @@ '\n' '@ test-e\n' 'sdesc: "test package E"\n' - 'category: Devel\n' + 'category: Devel Unmaintained\n' 'version: 1.0-1\n' 'install: noarch/release/test-e/test-e-1.0-1.tar.xz 236 ' '2e47817b620a7dbfe6810d47aee0adbcdf4663dc57932bcc51fc4b9bcfafa00dbbc2bfbefb1692dd5f6cc5333f23aea324d7c4d9b2ca091b917811fcdb70ca1f\n'