#!/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())

Add script to tools/security to check consistency of message file owners.
Add script to tools/security to check consistency of message file owners.

Periodic use of this script will show places where the OWNERS files
have become inconsistent.  This poses a problem for CL authors when
the reviewer they have selected doesn't cover all message files, so
they would have to add another.

I've stopped short of adding code to correct the files, this would
make a nice follow-up.

R=jschuh@chromium.org
BUG=

Review URL: https://codereview.chromium.org/138033013

git-svn-id: de016e52bd170d2d4f2344f9bf92d50478b649e0@245320 0039d316-1c4b-4281-b951-d872f2087c98
