[calm - Cygwin server-side packaging maintenance script] branch master, updated. 20210408-22-g88ddf1e

Jon TURNEY via Cygwin-apps-cvs <[email protected]>
Newsgroups gmane.os.cygwin.cvs.apps
Message-ID <[email protected]>


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

commit 88ddf1ea8212fcffb8a9b12f7645b16ea446f97c
Author: Jon Turney <[email protected]>
Date:   Sat May 29 14:35:11 2021 +0100

    Make 'homepage:' mandatory in new -src.hint uploads
    
    Also update test data appropriately

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

commit aea57c2823ad55b2c34b6d0cf8d8548f7965e679
Author: Jon Turney <[email protected]>
Date:   Tue May 25 22:47:01 2021 +0100

    Add highlander rule to generated gitolite configuration

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

commit a19693172eaa93311b0a8aada3667d8fa8d4d2d7
Author: Jon Turney <[email protected]>
Date:   Tue May 25 13:08:35 2021 +0100

    Only log about no-for-output once
    
    We want this to be shown for an upload introducing a new package like
    this, but not every time for existing packages.
    
    Future work: move this so it runs as part of post-upload package
    checking, not on every run.


Diff:
---
 calm/hint.py                                          |   8 ++++++--
 calm/mkgitoliteconf.py                                |   2 ++
 calm/package.py                                       |  17 ++++++++++-------
 .../perl-Net-SMTP-SSL-1.03-2-src.tar.xz               | Bin 2752 -> 2792 bytes
 .../release/per-version/per-version-5.0-1-src.tar.xz  | Bin 228 -> 296 bytes
 .../testpackage-zstd/testpackage-zstd-1.0-1-src.hint  |   1 +
 test/testdata/process_arch/homedir.expected           |   4 ++--
 test/testdata/process_arch/packages.json.expected     |   1 +
 test/testdata/process_arch/setup.ini.expected         |   8 ++++----
 test/testdata/uploads/pkglist.expected                |   1 +
 10 files changed, 27 insertions(+), 15 deletions(-)

diff --git a/calm/hint.py b/calm/hint.py
index 6cabea4..9deb2f0 100755
--- a/calm/hint.py
+++ b/calm/hint.py
@@ -192,7 +192,7 @@ def split_trim_sort_join(hint, splitchar, joinchar=None):
 
 
 # parse the file |fn| as a .hint file of kind |kind|
-def hint_file_parse(fn, kind):
+def hint_file_parse(fn, kind, strict=False):
     hints = OrderedDict()
     errors = []
     warnings = []
@@ -289,9 +289,13 @@ def hint_file_parse(fn, kind):
                 errors.append("hint only contains skip: key, please update to cygport >= 0.22.0")
 
             # for the pvr kind, 'category' and 'sdesc' must be present
-            # XXX: genini also requires 'requires' but that seems wrong
+            # (genini also requires 'requires' but that seems wrong)
+            # for the spvr kind, 'homepage' must be present for new packages
             if (kind == pvr) or (kind == spvr):
                 mandatory = ['category', 'sdesc']
+                if (kind == spvr) and strict:
+                    mandatory.append('homepage')
+
                 for k in mandatory:
                     if k not in hints:
                         errors.append("required key '%s' missing" % (k))
diff --git a/calm/mkgitoliteconf.py b/calm/mkgitoliteconf.py
index 4082be6..38c042d 100755
--- a/calm/mkgitoliteconf.py
+++ b/calm/mkgitoliteconf.py
@@ -82,6 +82,8 @@ def do_main(args):
     print('    config uploadpack.allowReachableSHA1InWant = true')
     print('    - VREF/MAX_NEWBIN_SIZE/1024 = @all')
     print('# this rejects binary files over the size limit, text files of any size are still permiited')
+    print('    - VREF/HIGHLANDER/cygport = @all')
+    print('# this checks for trees which contain more than one .cygport file')
     print('')
 
     # for each package
diff --git a/calm/package.py b/calm/package.py
index 75dfc4c..d253afb 100755
--- a/calm/package.py
+++ b/calm/package.py
@@ -136,8 +136,8 @@ def sha512_file(fn, block_size=256 * 128):
 
 
 # helper function to read hints
-def read_hints(p, fn, kind):
-    hints = hint.hint_file_parse(fn, kind)
+def read_hints(p, fn, kind, strict=False):
+    hints = hint.hint_file_parse(fn, kind, strict)
 
     if 'parse-errors' in hints:
         for l in hints['parse-errors']:
@@ -247,7 +247,7 @@ def read_package_dir(packages, basedir, dirpath, files, remove=None, upload=Fals
     for kind in Kind:
         # only create a package if there's archives for it to contain
         if fl[kind]:
-            result = read_one_package(packages, p, relpath, dirpath, fl[kind] + fl['all'], remove, kind) or result
+            result = read_one_package(packages, p, relpath, dirpath, fl[kind] + fl['all'], remove, kind, upload) or result
 
     # warn about unexpected files, including tarfiles which don't match the
     # package name
@@ -261,7 +261,7 @@ def read_package_dir(packages, basedir, dirpath, files, remove=None, upload=Fals
 #
 # read a single package
 #
-def read_one_package(packages, p, relpath, dirpath, files, remove, kind):
+def read_one_package(packages, p, relpath, dirpath, files, remove, kind, strict):
     warnings = False
 
     if not re.match(r'^[\w\-._+]*$', p):
@@ -390,7 +390,7 @@ def read_one_package(packages, p, relpath, dirpath, files, remove, kind):
         hint_fn = '%s-%s%s.hint' % (p, vr, '-src' if kind == Kind.source else '')
         if hint_fn in files:
             # is there a PVR.hint file?
-            pvr_hint = read_hints(p, os.path.join(dirpath, hint_fn), hint.pvr if kind == Kind.binary else hint.spvr)
+            pvr_hint = read_hints(p, os.path.join(dirpath, hint_fn), hint.pvr if kind == Kind.binary else hint.spvr, strict)
             if not pvr_hint:
                 logging.error("error parsing %s" % (os.path.join(dirpath, hint_fn)))
                 return True
@@ -594,8 +594,11 @@ def validate_packages(args, packages):
         # 'not_for_output'
         if packages[p].kind == Kind.binary:
             if not has_nonempty_install and not has_requires and not obsolete:
-                packages[p].not_for_output = True
-                logging.info("package '%s' has no non-empty install tarfiles and no dependencies, marking as 'not_for_output'" % (p))
+                if not packages[p].not_for_output:
+                    packages[p].not_for_output = True
+                    logging.info("package '%s' has no non-empty install tarfiles and no dependencies, marking as 'not for output'" % (p))
+            else:
+                packages[p].not_for_output = False
 
         levels = ['test', 'curr', 'prev']
 
diff --git a/test/testdata/homes/Blooey McFooey/noarch/release/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-2-src.tar.xz b/test/testdata/homes/Blooey McFooey/noarch/release/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-2-src.tar.xz
index 9e7f93d..fb7a692 100644
Binary files a/test/testdata/homes/Blooey McFooey/noarch/release/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-2-src.tar.xz and b/test/testdata/homes/Blooey McFooey/noarch/release/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-2-src.tar.xz differ
diff --git a/test/testdata/homes/Blooey McFooey/x86/release/per-version/per-version-5.0-1-src.tar.xz b/test/testdata/homes/Blooey McFooey/x86/release/per-version/per-version-5.0-1-src.tar.xz
index 0e6f1e8..7bb8552 100644
Binary files a/test/testdata/homes/Blooey McFooey/x86/release/per-version/per-version-5.0-1-src.tar.xz and b/test/testdata/homes/Blooey McFooey/x86/release/per-version/per-version-5.0-1-src.tar.xz differ
diff --git a/test/testdata/homes/Blooey McFooey/x86/release/testpackage-zstd/testpackage-zstd-1.0-1-src.hint b/test/testdata/homes/Blooey McFooey/x86/release/testpackage-zstd/testpackage-zstd-1.0-1-src.hint
index 386cdb9..6b9d514 100644
--- a/test/testdata/homes/Blooey McFooey/x86/release/testpackage-zstd/testpackage-zstd-1.0-1-src.hint	
+++ b/test/testdata/homes/Blooey McFooey/x86/release/testpackage-zstd/testpackage-zstd-1.0-1-src.hint	
@@ -2,5 +2,6 @@ category: Base
 build-depends: cygport 
 sdesc: "test package (zstd compressed)"
 ldesc: "test package (zstd compressed)"
+homepage: http://zstd.testpkg.invalid
 skip:
 
diff --git a/test/testdata/process_arch/homedir.expected b/test/testdata/process_arch/homedir.expected
index 7c07d4f..5804575 100644
--- a/test/testdata/process_arch/homedir.expected
+++ b/test/testdata/process_arch/homedir.expected
@@ -2,7 +2,7 @@
  'Blooey McFooey': ['!reminder-timestamp'],
  'Blooey McFooey/noarch': [],
  'Blooey McFooey/noarch/release': [],
- 'Blooey McFooey/noarch/release/perl-Net-SMTP-SSL': [],
+ 'Blooey McFooey/noarch/release/perl-Net-SMTP-SSL': ['perl-Net-SMTP-SSL-1.03-2-src.hint.bak'],
  'Blooey McFooey/x86': [],
  'Blooey McFooey/x86/release': [],
  'Blooey McFooey/x86/release/after-ready': ['after-ready-1.0-1.tar.bz2', 'setup.hint'],
@@ -10,7 +10,7 @@
  'Blooey McFooey/x86/release/not-on-maintainer-list': ['not-on-maintainer-list-1.0-1.tar.bz2', 'setup.hint'],
  'Blooey McFooey/x86/release/not-on-package-list': ['not-on-package-list-1.0-1.tar.bz2', 'setup.hint'],
  'Blooey McFooey/x86/release/not-ready': ['-not-ready-0.9-1.tar.bz2', 'not-ready-1.0-1.tar.bz2', 'setup.hint'],
- 'Blooey McFooey/x86/release/per-version': [],
+ 'Blooey McFooey/x86/release/per-version': ['per-version-5.0-1-src.hint.bak'],
  'Blooey McFooey/x86/release/per-version-replacement-hint-only': [],
  'Blooey McFooey/x86/release/testpackage': ['testpackage-1.0-1-src.hint.bak'],
  'Blooey McFooey/x86/release/testpackage-zstd': ['testpackage-zstd-1.0-1-src.hint',
diff --git a/test/testdata/process_arch/packages.json.expected b/test/testdata/process_arch/packages.json.expected
index 05e4168..512fcf2 100644
--- a/test/testdata/process_arch/packages.json.expected
+++ b/test/testdata/process_arch/packages.json.expected
@@ -266,6 +266,7 @@
  '                "x86",\n'
  '                "x86_64"\n'
  '            ],\n'
+ '            "homepage": "https://metacpan.org/release/RJBS/Net-SMTP-SSL-1.04",\n'
  '            "maintainers": [\n'
  '                "Blooey McFooey",\n'
  '                "Yaakov Selkowitz"\n'
diff --git a/test/testdata/process_arch/setup.ini.expected b/test/testdata/process_arch/setup.ini.expected
index 6705bfb..d97f1a3 100644
--- a/test/testdata/process_arch/setup.ini.expected
+++ b/test/testdata/process_arch/setup.ini.expected
@@ -252,8 +252,8 @@
  'version: 5.0-1\n'
  'install: x86/release/per-version/per-version-5.0-1.tar.xz 228 '
  'e675b0ac4bc2c3e1c4971bc56d77b0cd53a9bdf5632873a235d7582e29dfd3e8a7bb04b28f6cdee3e6b3d14c25ed39392538e3f628a9bfda6c905646ebc3c225\n'
- 'source: x86/release/per-version/per-version-5.0-1-src.tar.xz 228 '
- 'e675b0ac4bc2c3e1c4971bc56d77b0cd53a9bdf5632873a235d7582e29dfd3e8a7bb04b28f6cdee3e6b3d14c25ed39392538e3f628a9bfda6c905646ebc3c225\n'
+ 'source: x86/release/per-version/per-version-5.0-1-src.tar.xz 296 '
+ '3937b5bedff65c8eaee1705661ca2d1402c5af417b258f0d87adcc377b815024a559b591651adc00d069454582183512c234ce915276bdf7c276efd6a9bdf354\n'
  'depends2: base-cygwin\n'
  '\n'
  '@ per-version-replacement-hint-only\n'
@@ -276,8 +276,8 @@
  'version: 1.03-2\n'
  'install: noarch/release/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-2.tar.xz 3180 '
  'aac6428f56fed431da1430242a327f36f1ec1ca6106366acb6752dd87f1b9adb87767709be9279b2f9435d16cee003f119a5ed4519c7365c8411404555618e66\n'
- 'source: noarch/release/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-2-src.tar.xz 2752 '
- '4de528554acb0b63f2a964bc8a0421118f96ce05cb4c9d111983aaea1a4a93025b31627fd66875fa09c2dfaecc11a89f2a294bdd3c77055bfaa93a27fdfc1f07\n'
+ 'source: noarch/release/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-2-src.tar.xz 2792 '
+ '2c6e4f22eecef8f5e664898745d7957da0399cd6e9f1b900c0bdf39bed8404ed90aca60cc4c8ee69a38d28e302c39bcdbb440c8c972bb46a90300f33a031e800\n'
  '[prev]\n'
  'version: 1.02-1\n'
  'install: noarch/release/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.02-1.tar.xz 3180 '
diff --git a/test/testdata/uploads/pkglist.expected b/test/testdata/uploads/pkglist.expected
index fb3d59d..8312127 100644
--- a/test/testdata/uploads/pkglist.expected
+++ b/test/testdata/uploads/pkglist.expected
@@ -28,6 +28,7 @@
            'build-depends': 'cygport',
            'sdesc': '"test package (zstd compressed)"',
            'ldesc': '"test package (zstd compressed)"',
+           'homepage': 'http://zstd.testpkg.invalid',
            'skip': ''}}, {}, False),
  'testpackage2-subpackage': Package('testpackage2/testpackage2-subpackage', {'1.0-1': Tar('testpackage2-subpackage-1.0-1.tar.bz2', 'x86/release/testpackage2/testpackage2-subpackage', 'c4bf8e28d71b532e2b741e2931906dec0f0a70d4d051c0503476f864a5228f43765ae3342aafcebfd5a1738073537726b2bfbbd89c6da939a5f46d95aca3feaf', 46, True)}, {'1.0-1': {'sdesc': '"A test subpackage 2"',
            'ldesc': '"A test subpackage 2"',
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.