#!/usr/bin/python -u
"""
Wrapper to run 'suite_scheduler.py --sanity' before uploading a patch.
This script is invoked through PRESUBMIT.cfg from repohooks, and expects a
list of commit files in the environment variable.
"""

import os, re, sys
import common
from autotest_lib.client.common_lib import utils


def _commit_contains_ini_or_control():
    """
    Checks if commit contains suite_scheduler.ini or a control file.

    @return: True if one of the files in the commit is suite_scheduler.ini.
    """
    file_list = os.environ.get('PRESUBMIT_FILES')
    if file_list is None:
        print 'Expected a list of presubmit files in the environment variable.'
        sys.exit(1)

    pattern = re.compile(r'.*files/suite_scheduler.ini$|.*control$|'
                          '.*control.\w+$')
    for file_path in file_list.split('\n'):
        if pattern.search(file_path):
            return True
    return False


def main():
    """
    Main function, invokes suite scheduler's sanity checker if the
    commit contains either suite_scheduler.ini or a control file.
    """
    if _commit_contains_ini_or_control():
        site_utils_dir = os.path.dirname(
                             os.path.dirname(os.path.abspath(__file__)))
        suite_scheduler = os.path.join(site_utils_dir,
                                       'suite_scheduler/suite_scheduler.py')
        output = utils.system_output(suite_scheduler + ' --sanity')
        if output:
            print output
            sys.exit(1)


if __name__ == '__main__':
    main()
