#!/usr/bin/env python # Copyright 2014 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Make sure all of the per-file *_messages.h OWNERS are consistent""" import os import re import sys def main(): file_path = os.path.dirname(__file__); root_dir = os.path.abspath(os.path.join(file_path, '..', '..')) owners = collect_owners(root_dir) all_owners = get_all_owners(owners) print_missing_owners(owners, all_owners) return 0 def collect_owners(root_dir): result = {} for root, dirs, files in os.walk(root_dir): if "OWNERS" in files: owner_file_path = os.path.join(root, "OWNERS") owner_set = extract_owners_from_file(owner_file_path) if owner_set: result[owner_file_path] = owner_set return result def extract_owners_from_file(owner_file_path): result = set() regexp = re.compile('^per-file.*_messages[^=]*=\s*(.*)@([^#]*)') with open(owner_file_path) as f: for line in f: match = regexp.match(line) if match: result.add(match.group(1).strip()) return result def get_all_owners(owner_dict): result = set() for key in owner_dict: result = result.union(owner_dict[key]) return result def print_missing_owners(owner_dict, owner_set): for key in owner_dict: for owner in owner_set: if not owner in owner_dict[key]: print key + " is missing " + owner if '__main__' == __name__: sys.exit(main())