diff options
author | Jon Turney <jon.turney@dronecode.org.uk> | 2020-08-20 20:34:20 +0300 |
---|---|---|
committer | Jon Turney <jon.turney@dronecode.org.uk> | 2020-08-23 17:52:11 +0300 |
commit | 0a29ad572cbe1bcc64fd3624f5c38eee79c50445 (patch) | |
tree | 9886394cee0d99a2b97f4a1d7f25268a275bb08a | |
parent | 9e95a30e862b8470ee17049f215d794a8863b0e5 (diff) |
Add an untest tool
-rw-r--r-- | calm/untest.py | 99 | ||||
-rw-r--r-- | calm/uploads.py | 2 |
2 files changed, 100 insertions, 1 deletions
diff --git a/calm/untest.py b/calm/untest.py new file mode 100644 index 0000000..b749c15 --- /dev/null +++ b/calm/untest.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2020 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. +# + +import argparse +import logging +import os +import re +import sys + +from . import common_constants +from . import maintainers + + +def untest(pvr): + # split name and vr + match = re.match(r'^(.+?)-(\d.*)', pvr) + if not match: + logging.error("unable to extract package and version from '%s'" % (pvr)) + return + + p = match.group(1) + vr = match.group(2) + + # check CYGNAME is a maintainer for package + cygname = os.environ['CYGNAME'] + + mlist = {} + mlist = maintainers.add_packages(mlist, common_constants.PKGMAINT) + + if cygname not in mlist: + logging.error("'%s' is not a package maintainer" % (cygname)) + return + + if p not in mlist[cygname].pkgs: + logging.error("package '%s' is not in the package list for maintainer '%s'" % (p, cygname)) + return + + # remove '^test:' lines from any package and subpackage hints + removed = 0 + total = 0 + for arch in common_constants.ARCHES + ['noarch']: + for (dirpath, _subdirs, files) in os.walk(os.path.join(common_constants.FTP, arch, 'release', p)): + for f in files: + if re.match(r'.*-' + re.escape(vr) + '(|-src).hint$', f): + total = total + 1 + fn = os.path.join(dirpath, f) + + with open(fn) as fh: + content = fh.read() + + if re.search(r'^test:', content, re.MULTILINE): + content = re.sub(r'^test:\s*$', '', content, 0, re.MULTILINE) + + with open(fn, 'w') as fh: + fh.write(content) + + logging.info("Removed test: label from %s" % os.path.relpath(fn, common_constants.FTP)) + removed = removed + 1 + + if removed == 0: + logging.error("'%s' is not marked test" % pvr) + else: + logging.info("%d out of %d hints for '%s' version '%s' modified" % (removed, total, p, vr)) + + +def main(): + parser = argparse.ArgumentParser(description='test hint remover') + parser.add_argument('package', nargs='*', metavar='PACKAGE') + (args) = parser.parse_args() + + logging.getLogger().setLevel(logging.INFO) + logging.basicConfig(format='untest: %(message)s') + + for p in args.package: + untest(p) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/calm/uploads.py b/calm/uploads.py index 388e089..2f4bb87 100644 --- a/calm/uploads.py +++ b/calm/uploads.py @@ -143,7 +143,7 @@ def scan(m, all_packages, arch, args): # only process packages for which we are listed as a maintainer if not package.is_in_package_list(pkgpath, m.pkgs): - logging.warning("package '%s' is not in the package list for maintainer %s" % (relpath, m.name)) + logging.warning("package '%s' is not in the package list for maintainer '%s'" % (relpath, m.name)) continue # see if we can fix-up any setup.hint files |