summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael D Kinney <michael.d.kinney@intel.com>2023-11-10 11:30:52 -0800
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2023-11-11 02:31:13 +0000
commit706811819dcbc16ee53c621ee552f81cc87526e0 (patch)
tree7a35201aa9cf219eea3804abef68c260fd4617c0
parent05f3c3f3d0cc49b123f7fcefaed3b89eb42396f8 (diff)
downloadedk2-706811819dcbc16ee53c621ee552f81cc87526e0.tar.gz
edk2-706811819dcbc16ee53c621ee552f81cc87526e0.tar.bz2
edk2-706811819dcbc16ee53c621ee552f81cc87526e0.zip
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 <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>
-rw-r--r--BaseTools/Scripts/GetMaintainer.py18
1 files 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('<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."""
@@ -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: