#!/usr/bin/python3

import subprocess
import sys
import yaml


def read_from_git(ref, path):
    return subprocess.check_output(
        ['git', 'show', '%s:%s' % (ref, path)],
        shell=False, close_fds=True)


def validate_issues(issues):
    for name, data in issues.items():
        if 'description' not in data:
            print('ERROR: issue %s is missing a description' % name, file=sys.stderr)
            sys.exit(1)


def ensure_issues_are_known(issues, packages):
    for package, data in packages.items():
        for issue in data.get('issues', []):
            if issue not in issues:
                print('ERROR: issue %s not listed in issues.yml' % issue, file=sys.stderr)
                sys.exit(1)


def main():
    for ref_line in sys.stdin:
        old_value, new_value, ref_name = ref_line.strip().split(' ', 3)
        issues = yaml.safe_load(read_from_git(new_value, 'issues.yml'))
        packages = yaml.safe_load(read_from_git(new_value, 'packages.yml'))
        validate_issues(issues)
        ensure_issues_are_known(issues, packages)


if __name__ == '__main__':
    main()
