public inbox for cygwin-apps-cvs@sourceware.org help / color / mirror / Atom feed
From: Jon TURNEY <jturney@sourceware.org> To: cygwin-apps-cvs@sourceware.org Subject: [calm - Cygwin server-side packaging maintenance script] branch master, updated. 20210626-36-g417126b Date: Sun, 8 May 2022 14:56:29 +0000 (GMT) [thread overview] Message-ID: <20220508145629.1ECBE3858C27@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=417126bee6afcf6f5f3110d7fa8f7d5c5316c8fa commit 417126bee6afcf6f5f3110d7fa8f7d5c5316c8fa Author: Jon Turney <jon.turney@dronecode.org.uk> 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 <jon.turney@dronecode.org.uk> 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 <jon.turney@dronecode.org.uk> 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 <jon.turney@dronecode.org.uk> 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('<span class="detail">homepage</span>: <a href="%s">%s</a><br><br>' % (homepage, homepage), file=f) else: - es = po.version_hints[bv].get('external-source', p + '-src') + es = po.srcpackage(bv) print('<span class="detail">source package</span>: %s<br><br>' % 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'
reply other threads:[~2022-05-08 14:56 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=20220508145629.1ECBE3858C27@sourceware.org \ --to=jturney@sourceware.org \ --cc=cygwin-apps-cvs@sourceware.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: linkBe 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; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).