REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4593
If a package only has reviewers and no maintainers, then also return the <default> 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 <rebe...@bsdio.com> Cc: Liming Gao <gaolim...@byosoft.com.cn> Cc: Bob Feng <bob.c.f...@intel.com> Cc: Yuwei Chen <yuwei.c...@intel.com> Cc: Leif Lindholm <quic_llind...@quicinc.com> Signed-off-by: Michael D Kinney <michael.d.kin...@intel.com> --- BaseTools/Scripts/GetMaintainer.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/BaseTools/Scripts/GetMaintainer.py b/BaseTools/Scripts/GetMaintainer.py index 2a3147c059b5..081460451e9b 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,17 +103,20 @@ def get_section_maintainers(path, section): else: lists += [address] - return maintainers, lists + return maintainers, reviewers, 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: - tmp_maint, tmp_lists = get_section_maintainers(path, section) + tmp_maint, tmp_review, tmp_lists = get_section_maintainers(path, section) if tmp_maint: maintainers += tmp_maint + if tmp_review: + reviewers += tmp_review if tmp_lists: lists += tmp_lists @@ -115,13 +125,15 @@ def get_maintainers(path, sections, level=0): # REPO.working_dir/<default> print('"%s": no maintainers found, looking for default' % path) if level == 0: - maintainers = get_maintainers('<default>', sections, level=level + 1) + maintainers, tmp_review, tmp_lists = get_maintainers('<default>', sections, level=level + 1) + reviewers += tmp_review + lists += tmp_lists else: print("No <default> maintainers set for project.") if not maintainers: return None - return maintainers + lists + return maintainers, reviewers, lists def parse_maintainers_line(line): """Parse one line of Maintainers.txt, returning any match group and its key.""" @@ -186,9 +198,9 @@ if __name__ == '__main__': for file in FILES: print(file) - addresslist = get_maintainers(file, SECTIONS) - if addresslist: - ADDRESSES += addresslist + maintainers, reviewers, lists = get_maintainers(file, SECTIONS) + if maintainers or reviewers or lists: + ADDRESSES += (maintainers + reviewers + lists) for address in list(OrderedDict.fromkeys(ADDRESSES)): if '<' in address and '>' in address: -- 2.40.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#111046): https://edk2.groups.io/g/devel/message/111046 Mute This Topic: https://groups.io/mt/102510794/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/leave/9847357/21656/1706620634/xyzzy [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-