#!/usr/bin/env python3 import fnmatch import itertools import sys import strictyaml import whatthepatch maintainers_schema = strictyaml.MapPattern(strictyaml.Str(), strictyaml.Map({ strictyaml.Optional('Status'): strictyaml.Enum(["Supported", "Maintained"]), strictyaml.Optional('Maintainers'): strictyaml.Seq(strictyaml.Email()), strictyaml.Optional('Reviewers'): strictyaml.Seq(strictyaml.Email()), strictyaml.Optional('Lists'): strictyaml.Seq(strictyaml.Email()), strictyaml.Optional('Issue Trackers'): strictyaml.Seq(strictyaml.Url()), strictyaml.Optional('Patch Trackers'): strictyaml.Seq(strictyaml.Url()), strictyaml.Optional('Repositories'): strictyaml.Seq(strictyaml.Str()), strictyaml.Optional('Files'): strictyaml.Seq(strictyaml.Str()), })) with open('MAINTAINERS') as f: maintainers = strictyaml.load(f.read(), maintainers_schema).data with open(sys.argv[1]) as f: patch_files = list(set(itertools.chain.from_iterable((diff.header.old_path, diff.header.new_path) for diff in whatthepatch.parse_patch(f.read())))) for filename in patch_files: for k, v in maintainers.items(): for pattern in v.get('Files', []): if fnmatch.fnmatch(filename, pattern): print(f'{k}: {pattern} matches')