You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.8 KiB
105 lines
2.8 KiB
#!/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)
|
|
|