From 706811819dcbc16ee53c621ee552f81cc87526e0 Mon Sep 17 00:00:00 2001 From: Michael D Kinney Date: Fri, 10 Nov 2023 11:30:52 -0800 Subject: BaseTools/Scripts/GetMaintainer: Handle reviewer only case REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4593 If a package only has reviewers and no maintainers, then also return the maintainers. In order to detect this case, get_maintainers() is updated to return maintainers, reviews, and lists separately instead of a single merged list. This also allows this module to be used by other scripts that need to distinguish between maintainers, reviewers, and lists. Cc: Rebecca Cran Cc: Liming Gao Cc: Bob Feng Cc: Yuwei Chen Cc: Leif Lindholm Signed-off-by: Michael D Kinney Acked-by: Rebecca Cran Reviewed-by: Leif Lindholm --- BaseTools/Scripts/GetMaintainer.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/BaseTools/Scripts/GetMaintainer.py b/BaseTools/Scripts/GetMaintainer.py index cb3aadbbef..1361fb6c0e 100644 --- a/BaseTools/Scripts/GetMaintainer.py +++ b/BaseTools/Scripts/GetMaintainer.py @@ -76,6 +76,7 @@ def get_section_maintainers(path, section): """Returns a list with email addresses to any M: and R: entries matching the provided path in the provided section.""" maintainers = [] + reviewers = [] lists = [] nowarn_status = ['Supported', 'Maintained'] @@ -83,12 +84,18 @@ def get_section_maintainers(path, section): for status in section['status']: if status not in nowarn_status: print('WARNING: Maintained status for "%s" is \'%s\'!' % (path, status)) - for address in section['maintainer'], section['reviewer']: + for address in section['maintainer']: # Convert to list if necessary if isinstance(address, list): maintainers += address else: maintainers += [address] + for address in section['reviewer']: + # Convert to list if necessary + if isinstance(address, list): + reviewers += address + else: + reviewers += [address] for address in section['list']: # Convert to list if necessary if isinstance(address, list): @@ -96,16 +103,18 @@ def get_section_maintainers(path, section): else: lists += [address] - return {'maintainers': maintainers, 'lists': lists} + return {'maintainers': maintainers, 'reviewers': reviewers, 'lists': lists} def get_maintainers(path, sections, level=0): """For 'path', iterates over all sections, returning maintainers for matching ones.""" maintainers = [] + reviewers = [] lists = [] for section in sections: recipients = get_section_maintainers(path, section) maintainers += recipients['maintainers'] + reviewers += recipients['reviewers'] lists += recipients['lists'] if not maintainers: @@ -115,13 +124,14 @@ def get_maintainers(path, sections, level=0): if level == 0: recipients = get_maintainers('', sections, level=level + 1) maintainers += recipients['maintainers'] + reviewers += recipients['reviewers'] lists += recipients['lists'] else: print("No maintainers set for project.") if not maintainers: return None - return {'maintainers': maintainers, 'lists': lists} + return {'maintainers': maintainers, 'reviewers': reviewers, 'lists': lists} def parse_maintainers_line(line): """Parse one line of Maintainers.txt, returning any match group and its key.""" @@ -187,7 +197,7 @@ if __name__ == '__main__': for file in FILES: print(file) recipients = get_maintainers(file, SECTIONS) - ADDRESSES += recipients['maintainers'] + recipients['lists'] + ADDRESSES += recipients['maintainers'] + recipients['reviewers'] + recipients['lists'] for address in list(OrderedDict.fromkeys(ADDRESSES)): if '<' in address and '>' in address: -- cgit v1.2.3