[calm - Cygwin server-side packaging maintenance script] branch master, updated. 20230209-67-g8b01a6e

Jon Turney jturney@sourceware.org
Sat Mar 9 16:46:51 GMT 2024




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

commit 8b01a6e8f2576bb31afe030551a29664e176afe9
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Sat Mar 9 12:27:25 2024 +0000

    Tolerate package html directories being owned by someone else
    
    As a consequence of the cygwin-admin/cygwin split, we might not own an
    existing package listing/summary HTML directory. Ignore any error trying
    to set permissions in that case.

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

commit 7090c60ca45c4ced5bf0aaf3ad05875b2048ff37
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Sat Feb 17 19:24:45 2024 +0000

    Don't warn if license expression canonicalization just changes case
    
    Also: consistently indicate if a problem warned about in hints is fixed

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

commit e91e31ef0dfaf67ad4b85832ff8ab770890b5ef7
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Sat Jan 20 16:45:02 2024 +0000

    Add a report of package lingering in test/unstable status


Diff:
---
 calm/hint.py                                       |  6 +--
 calm/pkg2html.py                                   |  5 ++-
 calm/reports.py                                    | 44 ++++++++++++++++++++++
 .../release/base-cygwin/base-cygwin-3.6-1.expected |  2 +-
 .../release/base-cygwin/base-cygwin-3.8-1.expected |  2 +-
 ...ingw64-i686-binutils-2.29.1.787c9873-1.expected |  2 +-
 ...6-binutils-debuginfo-2.29.1.787c9873-1.expected |  2 +-
 .../x86_64/release/splint/splint-3.1.2-1.expected  |  2 +-
 test/testdata/process_arch/htdocs.expected         |  2 +-
 9 files changed, 57 insertions(+), 10 deletions(-)

diff --git a/calm/hint.py b/calm/hint.py
index 1cbfb33..41f55f8 100755
--- a/calm/hint.py
+++ b/calm/hint.py
@@ -282,13 +282,13 @@ def hint_file_parse(fn, kind, strict=False):
                     # if sdesc ends with a '.', warn and fix it
                     if key == 'sdesc':
                         if re.search(r'\."$', value):
-                            warnings.append("sdesc ends with '.'")
+                            warnings.append("sdesc ends with '.', fixing")
                             value = re.sub(r'\."$', '"', value)
 
                     # if sdesc contains '  ', warn and fix it
                     if key == 'sdesc':
                         if '  ' in value:
-                            warnings.append("sdesc contains '  '")
+                            warnings.append("sdesc contains '  ', fixing")
                             value = value.replace('  ', ' ')
 
                     # message must have an id and some text
@@ -312,7 +312,7 @@ def hint_file_parse(fn, kind, strict=False):
                         else:
                             if not le.normalized_expression:
                                 warnings.append('errors in license expression: %s' % (le.errors))
-                            elif le.original_expression != le.normalized_expression:
+                            elif le.original_expression.lower() != le.normalized_expression.lower():
                                 warnings.append("license expression: '%s' normalizes to '%s'" % (value, le.normalized_expression))
 
                     # warn if value starts with a quote followed by whitespace
diff --git a/calm/pkg2html.py b/calm/pkg2html.py
index ea4cb8f..70b0aeb 100755
--- a/calm/pkg2html.py
+++ b/calm/pkg2html.py
@@ -125,7 +125,10 @@ def arch_packages(packages, p):
 def ensure_dir_exists(args, path):
     if not args.dryrun:
         utils.makedirs(path)
-        os.chmod(path, 0o755)
+        try:
+            os.chmod(path, 0o755)
+        except PermissionError:
+            pass
 
 
 #
diff --git a/calm/reports.py b/calm/reports.py
index a043cc4..d204032 100644
--- a/calm/reports.py
+++ b/calm/reports.py
@@ -196,6 +196,49 @@ def deprecated(args, packages, reportlist):
     write_report(args, 'Deprecated shared library packages', body, 'deprecated_so.html', reportlist)
 
 
+#
+# produce a report of packages where the latest version is marked test: and has
+# possibly been forgotten about
+#
+def unstable(args, packages, reportlist):
+    unstable_list = []
+
+    arch = 'x86_64'
+    # XXX: look into how we can make this 'src', after x86 is dropped
+    for p in packages[arch]:
+        po = packages[arch][p]
+
+        if po.kind != package.Kind.source:
+            continue
+
+        latest_v = sorted(po.versions(), key=lambda v: SetupVersion(v), reverse=True)[0]
+        if 'test' not in po.version_hints[latest_v]:
+            continue
+
+        unstablep = types.SimpleNamespace()
+        unstablep.pn = p
+        unstablep.po = po
+        unstablep.v = latest_v
+        unstablep.ts = po.tar(latest_v).mtime
+
+        unstable_list.append(unstablep)
+
+    body = io.StringIO()
+    print(textwrap.dedent('''\
+    <p>Packages where latest version is marked as unstable (testing).</p>'''), file=body)
+
+    print('<table class="grid sortable">', file=body)
+    print('<tr><th>package</th><th>version</th><th>timestamp</th></tr>', file=body)
+
+    for unstablep in sorted(unstable_list, key=lambda i: i.ts):
+        print('<tr><td>%s</td><td>%s</td><td>%s</td></tr>' %
+              (linkify(unstablep.pn, unstablep.po), unstablep.v, pkg2html.tsformat(unstablep.ts)), file=body)
+
+    print('</table>', file=body)
+
+    write_report(args, 'Packages marked as unstable', body, 'unstable.html', reportlist)
+
+
 # produce a report of packages which need rebuilding for the latest major
 # version version provides
 #
@@ -268,6 +311,7 @@ def do_reports(args, packages):
 
     unmaintained(args, packages, reportlist)
     deprecated(args, packages, reportlist)
+    unstable(args, packages, reportlist)
 
     provides_rebuild(args, packages, 'perl_rebuilds.html', 'perl_base', reportlist)
     provides_rebuild(args, packages, 'ruby_rebuilds.html', 'ruby', reportlist)
diff --git a/test/testdata/hints/x86_64/release/base-cygwin/base-cygwin-3.6-1.expected b/test/testdata/hints/x86_64/release/base-cygwin/base-cygwin-3.6-1.expected
index 7505632..cf2dc9b 100644
--- a/test/testdata/hints/x86_64/release/base-cygwin/base-cygwin-3.6-1.expected
+++ b/test/testdata/hints/x86_64/release/base-cygwin/base-cygwin-3.6-1.expected
@@ -2,4 +2,4 @@
  'ldesc': '"Initial base installation helper script."',
  'category': 'Base',
  'requires': '',
- 'parse-warnings': ["sdesc ends with '.'"]}
+ 'parse-warnings': ["sdesc ends with '.', fixing"]}
diff --git a/test/testdata/hints/x86_64/release/base-cygwin/base-cygwin-3.8-1.expected b/test/testdata/hints/x86_64/release/base-cygwin/base-cygwin-3.8-1.expected
index cac431d..68ae615 100644
--- a/test/testdata/hints/x86_64/release/base-cygwin/base-cygwin-3.8-1.expected
+++ b/test/testdata/hints/x86_64/release/base-cygwin/base-cygwin-3.8-1.expected
@@ -2,4 +2,4 @@
  'ldesc': '"Initial base installation helper script."',
  'category': 'Base',
  'requires': 'cygwin-api0_291',
- 'parse-warnings': ["sdesc ends with '.'"]}
+ 'parse-warnings': ["sdesc ends with '.', fixing"]}
diff --git a/test/testdata/hints/x86_64/release/mingw64-i686-binutils/mingw64-i686-binutils-2.29.1.787c9873-1.expected b/test/testdata/hints/x86_64/release/mingw64-i686-binutils/mingw64-i686-binutils-2.29.1.787c9873-1.expected
index 114e53c..d76051c 100644
--- a/test/testdata/hints/x86_64/release/mingw64-i686-binutils/mingw64-i686-binutils-2.29.1.787c9873-1.expected
+++ b/test/testdata/hints/x86_64/release/mingw64-i686-binutils/mingw64-i686-binutils-2.29.1.787c9873-1.expected
@@ -3,4 +3,4 @@
  'sdesc': '"The GNU Binutils are a collection of binary tools. This package\n is capable of targeting win32"',
  'ldesc': '"Binutils for MinGW-w64 Win32 toolchain"',
  'parse-errors': ['key sdesc has multi-line value'],
- 'parse-warnings': ["sdesc ends with '.'", 'sdesc is much longer than ldesc']}
+ 'parse-warnings': ["sdesc ends with '.', fixing", 'sdesc is much longer than ldesc']}
diff --git a/test/testdata/hints/x86_64/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/mingw64-i686-binutils-debuginfo-2.29.1.787c9873-1.expected b/test/testdata/hints/x86_64/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/mingw64-i686-binutils-debuginfo-2.29.1.787c9873-1.expected
index c936ff6..007397d 100644
--- a/test/testdata/hints/x86_64/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/mingw64-i686-binutils-debuginfo-2.29.1.787c9873-1.expected
+++ b/test/testdata/hints/x86_64/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/mingw64-i686-binutils-debuginfo-2.29.1.787c9873-1.expected
@@ -4,4 +4,4 @@
  'ldesc': '"Debug info for mingw64-i686-binutils"',
  'sdesc': '"This package contains files necessary for debugging the\nmingw64-i686-binutils package with gdb"',
  'parse-errors': ['key sdesc has multi-line value'],
- 'parse-warnings': ["sdesc ends with '.'", 'sdesc is much longer than ldesc']}
+ 'parse-warnings': ["sdesc ends with '.', fixing", 'sdesc is much longer than ldesc']}
diff --git a/test/testdata/hints/x86_64/release/splint/splint-3.1.2-1.expected b/test/testdata/hints/x86_64/release/splint/splint-3.1.2-1.expected
index 5667e4b..3549cfb 100644
--- a/test/testdata/hints/x86_64/release/splint/splint-3.1.2-1.expected
+++ b/test/testdata/hints/x86_64/release/splint/splint-3.1.2-1.expected
@@ -12,4 +12,4 @@
  'category': 'Devel',
  'requires': 'cygwin',
  'parse-errors': ['key sdesc has multi-line value'],
- 'parse-warnings': ["sdesc ends with '.'"]}
+ 'parse-warnings': ["sdesc ends with '.', fixing"]}
diff --git a/test/testdata/process_arch/htdocs.expected b/test/testdata/process_arch/htdocs.expected
index d9afd07..f63f346 100644
--- a/test/testdata/process_arch/htdocs.expected
+++ b/test/testdata/process_arch/htdocs.expected
@@ -1,5 +1,5 @@
 {'.': ['calm.db', 'packages.inc', 'reports_list.inc', 'src_packages.inc'],
- 'reports': ['deprecated_so.html', 'perl_rebuilds.html', 'ruby_rebuilds.html', 'unmaintained.html'],
+ 'reports': ['deprecated_so.html', 'perl_rebuilds.html', 'ruby_rebuilds.html', 'unmaintained.html', 'unstable.html'],
  'summary': ['arc-src.html',
              'arc.html',
              'base-cygwin.html',



More information about the Cygwin-apps-cvs mailing list