#!/usr/bin/env python3 # A script to generate a list of tests that have changed or added and create an # arguemnts file for sanitycheck to allow running those tests with --all import sys import re, os from email.utils import parseaddr import sh import logging import argparse if "ZEPHYR_BASE" not in os.environ: logging.error("$ZEPHYR_BASE environment variable undefined.\n") exit(1) logger = None repository_path = os.environ['ZEPHYR_BASE'] sh_special_args = { '_tty_out': False, '_cwd': repository_path } def init_logs(): global logger log_lev = os.environ.get('LOG_LEVEL', None) level = logging.INFO if log_lev == "DEBUG": level = logging.DEBUG elif log_lev == "ERROR": level = logging.ERROR console = logging.StreamHandler() format = logging.Formatter('%(levelname)-8s: %(message)s') console.setFormatter(format) logger = logging.getLogger('') logger.addHandler(console) logger.setLevel(level) logging.debug("Log init completed") def parse_args(): parser = argparse.ArgumentParser( description="Generate a sanitycheck argument for for tests " " that have changed") parser.add_argument('-c', '--commits', default=None, help="Commit range in the form: a..b") return parser.parse_args() def main(): args = parse_args() if not args.commits: exit(1) commit = sh.git("diff","--name-only", args.commits, **sh_special_args) files = commit.split("\n") tests = set() for f in files: d = os.path.dirname(f) while d: if os.path.exists(os.path.join(d, "testcase.yaml")) or os.path.exists(os.path.join(d, "sample.yaml")): tests.add(d) break else: d = os.path.dirname(d) if tests: print("-T\n%s\n--all" %("\n-T\n".join(tests))) if __name__ == "__main__": main()