#!/usr/bin/env python3 import argparse import getdeveloperlib import sys def parse_args(): parser = argparse.ArgumentParser() parser.add_argument('patches', metavar='P', type=argparse.FileType('r'), nargs='*', help='list of patches (use - to read patches from stdin)') parser.add_argument('-a', dest='architecture', action='store', help='find developers in charge of this architecture') parser.add_argument('-p', dest='package', action='store', help='find developers in charge of this package') parser.add_argument('-f', dest='files', nargs='*', help='find developers in charge of these files') parser.add_argument('-c', dest='check', action='store_const', const=True, help='list files not handled by any developer') parser.add_argument('-e', dest='email', action='store_const', const=True, help='only list affected developer email addresses') parser.add_argument('-v', dest='validate', action='store_const', const=True, help='validate syntax of DEVELOPERS file') return parser.parse_args() def __main__(): args = parse_args() # Check that only one action is given action = 0 if args.architecture is not None: action += 1 if args.package is not None: action += 1 if args.files: action += 1 if args.check: action += 1 if args.validate: action += 1 if len(args.patches) != 0: action += 1 if action > 1: print("Cannot do more than one action") return if action == 0: print("No action specified") return devs = getdeveloperlib.parse_developers() if devs is None: sys.exit(1) # Validation is done by parse_developers() above and we error out # if the validation didn't work, so if we reach here, it means # validation passed, so we can simply bail out in success. if args.validate: return # Handle the check action if args.check: files = getdeveloperlib.check_developers(devs) for f in files: print(f) # Handle the architecture action if args.architecture is not None: for dev in devs: if args.architecture in dev.architectures: print(dev.name) return # Handle the package action if args.package is not None: for dev in devs: if args.package in dev.packages: print(dev.name) return # Handle the files action if args.files is not None: for dev in devs: for f in args.files: if dev.hasfile(f): print(dev.name) break # Handle the patches action if len(args.patches) != 0: (files, infras) = getdeveloperlib.analyze_patches(args.patches) matching_devs = set() for dev in devs: # See if we have developers matching by package name for f in files: if dev.hasfile(f): matching_devs.add(dev.name) # See if we have developers matching by package infra for i in infras: if i in dev.infras: matching_devs.add(dev.name) if args.email: for dev in matching_devs: print(dev) else: result = "--to buildroot@buildroot.org" for dev in matching_devs: result += " --cc \"%s\"" % dev if result != "": print("git send-email %s" % result) __main__()