105 lines
2.8 KiB
Python
Executable file
105 lines
2.8 KiB
Python
Executable file
#!/usr/bin/python
|
|
# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
"""Extract list of team members for the root individual."""
|
|
|
|
|
|
import commands
|
|
import json
|
|
import logging
|
|
import optparse
|
|
import os
|
|
import sys
|
|
|
|
|
|
def ParseArgs(argv):
|
|
"""Get input and output file."""
|
|
base_dir = os.path.realpath(os.path.abspath(os.path.join(
|
|
os.getcwd(), os.path.dirname(__file__))))
|
|
|
|
parser = optparse.OptionParser()
|
|
parser.add_option('-r', '--root-person', help='initial person to follow',
|
|
dest='rootperson', default=None)
|
|
parser.add_option('-o', '--output-file', help='output file (json)',
|
|
dest='outputfile', default="kernel-team.json")
|
|
parser.add_option('-p', '--print-test', help='print the map as a test',
|
|
dest='printtest', action='store_true', default=False)
|
|
parser.add_option('-v', '--verbose', help='Show more output',
|
|
dest='verbose', action='store_true', default=False)
|
|
options, args = parser.parse_args()
|
|
|
|
if not options.rootperson:
|
|
parser.error('--root-person must be supplied')
|
|
|
|
logging_level = logging.INFO
|
|
if options.verbose:
|
|
logging_level = logging.DEBUG
|
|
|
|
logging.basicConfig(level=logging_level)
|
|
|
|
return options, args, base_dir
|
|
|
|
|
|
def SearchOnePerson(person):
|
|
"""Run a command to get details for one person."""
|
|
found = []
|
|
if person:
|
|
command = 'f %s | grep Reportees' % person
|
|
logging.debug(command)
|
|
find_result = commands.getoutput(command)
|
|
if find_result:
|
|
found = find_result.split(' ')[2:]
|
|
logging.debug(found)
|
|
return found
|
|
|
|
|
|
def FindTeamMembers(root_person):
|
|
"""Recursively iteratea through the list of team members until done.
|
|
|
|
Expect the root_person to have at least 1 report but not needed.
|
|
"""
|
|
remaining = [root_person]
|
|
extracted = [root_person]
|
|
while remaining:
|
|
found = SearchOnePerson(remaining.pop(0))
|
|
if found:
|
|
remaining += found
|
|
extracted += found
|
|
|
|
return extracted
|
|
|
|
|
|
def WriteJson(outputfile, extracted):
|
|
"""Write output in json format."""
|
|
f = open(outputfile, 'w')
|
|
json.dump(extracted, f)
|
|
f.close()
|
|
|
|
|
|
def PrintJson(jsonfile):
|
|
"""Read the json file and format-print its contents as a test."""
|
|
f = open(jsonfile, 'r')
|
|
team_list = json.load(f)
|
|
f.close()
|
|
for t in sorted(team_list):
|
|
logging.info('%s', t)
|
|
|
|
|
|
def main(argv):
|
|
"""Can generate tables, plots and email."""
|
|
options, args, base_dir = ParseArgs(argv)
|
|
|
|
logging.info('Using %s as root.', options.rootperson)
|
|
logging.info('Using output file: %s', options.outputfile)
|
|
|
|
team = FindTeamMembers(options.rootperson)
|
|
if team:
|
|
WriteJson(options.outputfile, team)
|
|
if options.printtest:
|
|
PrintJson(options.outputfile)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main(sys.argv)
|