mirror of
https://gitlab.com/buildroot.org/buildroot.git
synced 2026-09-09 07:51:59 -09:00
The list of reported developers is not ordered: that may leave the impression (when receiving a patch) that a Cc is more important than another, by virtue of being earlier in the list. Also, the ordering changes on every call. Report the developers in an alphabetically order, so that there is no confusion anymore, and so the ordering is reproducible across calls. Signed-off-by: Yann E. MORIN <yann.morin@orange.com> Signed-off-by: Julien Olivain <ju.o@free.fr>
115 lines
3.8 KiB
Python
Executable File
115 lines
3.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
import getdeveloperlib
|
|
import sys
|
|
|
|
|
|
def __main__():
|
|
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')
|
|
parser.add_argument('-d', dest='filename', action='store', default=None,
|
|
help='override the default DEVELOPERS file (for debug)')
|
|
args = parser.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:
|
|
parser.error("Cannot do more than one action")
|
|
if action == 0:
|
|
if sys.stdin.isatty():
|
|
parser.error("No action specified")
|
|
args.patches.append(sys.stdin)
|
|
|
|
devs = getdeveloperlib.parse_developers(args.filename)
|
|
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)
|
|
|
|
matching_devs = sorted(matching_devs)
|
|
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__()
|