From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 71504 invoked by alias); 19 Feb 2020 15:45:30 -0000 Mailing-List: contact cygwin-apps-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cygwin-apps-cvs-owner@sourceware.org Received: (qmail 71306 invoked by uid 9795); 19 Feb 2020 15:45:28 -0000 Date: Wed, 19 Feb 2020 15:45:00 -0000 Message-ID: <20200219154528.71285.qmail@sourceware.org> From: jturney@sourceware.org To: cygwin-apps-cvs@sourceware.org Subject: [calm - Cygwin server-side packaging maintenance script] branch master, updated. 20200129-8-g0c1b671 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 7673c3a8428c5af430f441fdd5c61e868c1bef43 X-Git-Newrev: 0c1b671e3e3ca0c5b6b964cc8de3623764fb203a X-SW-Source: 2020-q1/txt/msg00017.txt https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=0c1b671e3e3ca0c5b6b964cc8de3623764fb203a commit 0c1b671e3e3ca0c5b6b964cc8de3623764fb203a Author: Jon Turney Date: Tue Feb 18 22:38:58 2020 +0000 Extend orphan maintainer list Extend orphan maintainer list to include everyone who: * has a sourceware shell account * that account is a member of the cygwin group * is currently a package maintainer Restructure gitolite.conf so the "push to all repos" list is synchronized with that https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=18d6ca071a42115f47130a34823b2edb38cbe35d commit 18d6ca071a42115f47130a34823b2edb38cbe35d Author: Jon Turney Date: Tue Feb 18 21:41:12 2020 +0000 Remove an old fixup tool Diff: --- calm/common_constants.py | 12 +++- calm/fix-missing-cygwin-dep.py | 140 ----------------------------------------- calm/mkgitoliteconf.py | 13 ++++ 3 files changed, 24 insertions(+), 141 deletions(-) diff --git a/calm/common_constants.py b/calm/common_constants.py index 9db93b2..5d884c4 100644 --- a/calm/common_constants.py +++ b/calm/common_constants.py @@ -42,7 +42,17 @@ EMAILS = ','.join(list(map(lambda m: m + '@sourceware.org', ['corinna', 'yselkow ALWAYS_BCC = 'jturney@sourceware.org, yselkowitz@sourceware.org' # these maintainers can upload orphaned packages as well -ORPHANMAINT = "Yaakov Selkowitz" +# +# (these people have sourceware shell access and cygwin group membership, so +# they can do whatever they like directly, anyhow) +ORPHANMAINT = '/'.join([ + 'Corinna Vinschen', + 'Eric Blake', + 'Jon Turney', + 'Ken Brown', + 'Marco Atzeri', + 'Yaakov Selkowitz', +]) # architectures we support ARCHES = ['x86', 'x86_64'] diff --git a/calm/fix-missing-cygwin-dep.py b/calm/fix-missing-cygwin-dep.py deleted file mode 100755 index 6ca3625..0000000 --- a/calm/fix-missing-cygwin-dep.py +++ /dev/null @@ -1,140 +0,0 @@ -#!/usr/bin/env python3 -# -# Copyright (c) 2016 Jon Turney -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# - -# -# Historically, cygwin was omitted from requires: and then upset added it back -# using the autodep mechanism -# -# Now we want to remove that complexity and treat it like a normal dependency, -# so this script fixes up setup.hints, adding cygwin to requires: where it -# should be -# - -import argparse -import logging -import os -import re -import sys -import tarfile - -import common_constants -import package - - -# -# -# -def main(args): - # build package list - packages = package.read_packages(args.rel_area, args.arch) - - for pn, po in packages.items(): - # package is source-only - if 'skip' in po.hints: - logging.info("%s is source-only" % (pn)) - continue - - # package requires: contains 'cygwin' already - # - # really this should use a whitespace boundary, not word boundary to - # avoid matching cygwin-debug etc., but we just happen to know that only - # debuginfo packages depend on cygwin-debuginfo which can safely be - # skipped as they will never depend on cygwin - requires = po.hints.get('requires', '') - if re.search(r'\bcygwin\b', requires): - logging.info("%s already has cygwin in requires" % (pn)) - continue - - # install tarfiles are all empty (usually because package is obsolete) - if all([t.is_empty for t in po.tars.values()]): - logging.info("%s has empty install tarfiles" % (pn)) - continue - - # search each install tarfile for executable files - # - # (any .exe or .dll file might have a dependency on cygwin1.dll, so for - # simplicity we will assume that it does) - amend = False - for t in po.tars: - logging.info("%s tarfile %s" % (pn, t)) - - if re.search(r'-src\.tar', t): - continue - - if po.tars[t].is_empty: - continue - - with tarfile.open(os.path.join(args.rel_area, args.arch, po.path, t)) as a: - if any(map(lambda f: re.search(r'^(bin|sbin|usr/bin|usr/lib|usr/libexec|usr/sbin)/.*\.(exe|dll|so|cmxs)$', f), a.getnames())): - logging.info("%s: matched in %s" % (pn, t)) - amend = True - break - - if not amend: - continue - - # adjust requires:, adding 'cygwin' to the end - logging.warning("Adding 'cygwin' to requires: in setup.hint for package '%s'" % (pn)) - if len(requires) > 0: - requires = requires + ' ' - po.hints['requires'] = requires + 'cygwin' - - # write the modified setup.hint file - if 'parse-warnings' in po.hints: - del po.hints['parse-warnings'] - if 'parse-errors' in po.hints: - del po.hints['parse-errors'] - - ofn = os.path.join(args.rel_area, args.arch, po.path, 'setup.hint') - fn = os.path.join(args.rel_area, args.arch, po.path, 'setup.hint.modified') - with open(fn, 'w') as f: - for k, v in po.hints.items(): - print("%s: %s" % (k, v), file=f) - - # show any 'unexpected' changes in the setup.hint - os.system("diff -u -I 'requires:' --ignore-blank-lines --ignore-space-change %s %s" % (ofn, fn)) - - # replace the setup.hint file - # (written this way so it doesn't spoil a hardlinked backup of the releasearea) - os.rename(fn, ofn) - - -# -# -# - -if __name__ == "__main__": - relarea_default = common_constants.FTP - - parser = argparse.ArgumentParser(description='requires fixer') - parser.add_argument('--arch', action='store', required=True, choices=common_constants.ARCHES) - parser.add_argument('-v', '--verbose', action='count', dest='verbose', help='verbose output', default=0) - parser.add_argument('--releasearea', action='store', metavar='DIR', help="release directory (default: " + relarea_default + ")", default=relarea_default, dest='rel_area') - (args) = parser.parse_args() - - if args.verbose: - logging.getLogger().setLevel(logging.INFO) - - logging.basicConfig(format=os.path.basename(sys.argv[0]) + ': %(message)s') - - main(args) diff --git a/calm/mkgitoliteconf.py b/calm/mkgitoliteconf.py index 761979d..65a08dc 100755 --- a/calm/mkgitoliteconf.py +++ b/calm/mkgitoliteconf.py @@ -68,6 +68,19 @@ def do_main(args): # header print("# automatically generated by mkgitoliteconf") + # global configuration + print('') + print('@leads = %s' % ' '.join(map(transform_username, common_constants.ORPHANMAINT.split('/')))) + print('') + print('repo @all') + print(' C = @leads') + print(' RW = @leads') + print(' R = @all') + print(' R = gitweb daemon') + 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('') + # for each package for p in sorted(pkgs): users = ' '.join(map(transform_username, pkgs[p]))