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: link
Be 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).