Skip to content

Commit

Permalink
BaseTools/Scripts/GetMaintainer: Handle reviewer only case
Browse files Browse the repository at this point in the history
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 <rebecca@bsdio.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Yuwei Chen <yuwei.chen@intel.com>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
Acked-by: Rebecca Cran <rebecca@bsdio.com>
Reviewed-by: Leif Lindholm <quic_llindhol@quicinc.com>
  • Loading branch information
mdkinney authored and mergify[bot] committed Nov 11, 2023
1 parent 05f3c3f commit 7068118
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions BaseTools/Scripts/GetMaintainer.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,36 +76,45 @@ 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']

if path_in_section(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):
lists += address
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:
Expand All @@ -115,13 +124,14 @@ def get_maintainers(path, sections, level=0):
if level == 0:
recipients = get_maintainers('<default>', sections, level=level + 1)
maintainers += recipients['maintainers']
reviewers += recipients['reviewers']
lists += recipients['lists']
else:
print("No <default> 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."""
Expand Down Expand Up @@ -187,7 +197,7 @@ def get_modified_files(repo, args):
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:
Expand Down

0 comments on commit 7068118

Please sign in to comment.