Anton Shestakov <av6@dwimlabs.net>, Fri, 17 Jun 2016 18:29:21 +0800
checker: use default directory for mkstemp (influenced by TMPDIR, TEMP or TMP)
checker.py
Permissions: -rwxr-xr-x
from __future__ import print_function from argparse import ArgumentParser, FileType from datetime import datetime from shutil import rmtree from subprocess import check_call, check_output, CalledProcessError from tempfile import mkdtemp def run_ignore_1(fn, args): except CalledProcessError as e: def run(args, silent=False, get_output=False, ignore_1=False): print('$ ' + ' '.join(args)) result = run_ignore_1(fn, args) print('# C&O error: {}'.format(e)) print('# C&O job failed') return datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S+00:00') print('# C&O job started: {}'.format(now())) tmp = mkdtemp(prefix='candolint.') print('# C&O task: clone') print('# C&O project URL: {}'.format(config['url'])) if ok and not run(['hg', 'clone', config['url'], source]): print('$ cd {}'.format(source)) if ok and not run(['hg', 'sum']): template = (r'# C&O commit: {rev}:{node} {branch}\n' r'# C&O commit date: {date|isodatesec}\n' r'# C&O commit author: {author|person}\n' r'# C&O commit message: {desc|firstline}\n') if not run(['hg', 'log', '-r', '.', '-T', template], silent=True): print('# C&O task: setup') run(['virtualenv', venv]) pip = os.path.join(venv, 'bin', 'pip') for linter in config['linters']: if not run([pip, 'install'] + linter['pip']): print('# C&O task: checks') for linter in config['linters']: if 'cmd' not in linter or 'files' not in linter: cmd = ['hg', 'files', 'set:' + ' or '.join(linter['files'])] files = run(cmd, silent=True, get_output=True, ignore_1=True) for f in files.splitlines(): cmd = [os.path.join(venv, 'bin', linter['cmd'])] if not run(cmd + linter.get('flags', []) + [f], ignore_1=True): print('# C&O task: cleanup') print('# C&O job finished: {}'.format(now())) parser = ArgumentParser() parser.add_argument('config', help='configuration file (YAML)', type=FileType('r')) args = parser.parse_args() config = yaml.safe_load(args.config) if __name__ == '__main__':