[PATCH v2 1/2] get_maintainer: add --substatus for reporting subsystem status

From: Vlastimil Babka
Date: Mon Feb 03 2025 - 06:14:16 EST


The subsystem status is currently reported with --role(stats) by
adjusting the maintainer role for any status different from Maintained.
This has two downsides:

- if a subsystem has only reviewers or mailing lists and no maintainers,
the status is not reported (i.e. typically, Orphan subsystems have no
maintainers)

- the Supported status means that someone is paid for maintaining, but
it is reported as "supporter" for all the maintainers, which can be
incorrect. People have been also confused about what "supporter"
means.

This patch introduces a new --substatus option and functionality aimed
to report the subsystem status separately, without adjusting the
reported maintainer role. After the e-mails are output, the status of
subsystems will follow, for example:

...
linux-kernel@xxxxxxxxxxxxxxx (open list:LIBRARY CODE)
LIBRARY CODE status: Supported

In order to allow replacing the role rewriting seamlessly, the new
option works as follows:

- it is automatically enabled when --email and --role are enabled
(the defaults include --email and --rolestats which implies --role)

- usages with --norolestats e.g. for git's --cc-cmd will thus need no
adjustments

- the most common Maintained status is not reported at all, to reduce
unnecessary noise

- THE REST catch-all section (contains lkml) status is not reported

- the existing --subsystem and --status options are unaffected so their
users will need no adjustments

Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx>
---
scripts/get_maintainer.pl | 28 +++++++++++++++++++++++++---
1 file changed, 25 insertions(+), 3 deletions(-)

diff --git a/scripts/get_maintainer.pl b/scripts/get_maintainer.pl
index 5ac02e19873722d0f5bf3ac8de8374338c7bddc3..da7fc70f17cd8d46b45da8db0b2029bb11b25af1 100755
--- a/scripts/get_maintainer.pl
+++ b/scripts/get_maintainer.pl
@@ -50,6 +50,7 @@ my $output_multiline = 1;
my $output_separator = ", ";
my $output_roles = 0;
my $output_rolestats = 1;
+my $output_substatus = undef;
my $output_section_maxlen = 50;
my $scm = 0;
my $tree = 1;
@@ -269,6 +270,7 @@ if (!GetOptions(
'separator=s' => \$output_separator,
'subsystem!' => \$subsystem,
'status!' => \$status,
+ 'substatus!' => \$output_substatus,
'scm!' => \$scm,
'tree!' => \$tree,
'web!' => \$web,
@@ -314,6 +316,10 @@ $output_multiline = 0 if ($output_separator ne ", ");
$output_rolestats = 1 if ($interactive);
$output_roles = 1 if ($output_rolestats);

+if (!defined $output_substatus) {
+ $output_substatus = $email && $output_roles;
+}
+
if ($sections || $letters ne "") {
$sections = 1;
$email = 0;
@@ -637,6 +643,7 @@ my @web = ();
my @bug = ();
my @subsystem = ();
my @status = ();
+my @substatus = ();
my %deduplicate_name_hash = ();
my %deduplicate_address_hash = ();

@@ -651,6 +658,11 @@ if ($scm) {
output(@scm);
}

+if ($output_substatus) {
+ @substatus = uniq(@substatus);
+ output(@substatus);
+}
+
if ($status) {
@status = uniq(@status);
output(@status);
@@ -859,6 +871,7 @@ sub get_maintainers {
@bug = ();
@subsystem = ();
@status = ();
+ @substatus = ();
%deduplicate_name_hash = ();
%deduplicate_address_hash = ();
if ($email_git_all_signature_types) {
@@ -1073,6 +1086,7 @@ version: $V
--remove-duplicates => minimize duplicate email names/addresses
--roles => show roles (status:subsystem, git-signer, list, etc...)
--rolestats => show roles and statistics (commits/total_commits, %)
+ --substatus => show subsystem status if not Maintained (default: match --roles)"
--file-emails => add email addresses found in -f file (default: 0 (off))
--fixes => for patches, add signatures of commits with 'Fixes: <commit>' (default: 1 (on))
--scm => print SCM tree(s) if any
@@ -1335,7 +1349,9 @@ sub add_categories {
my $start = find_starting_index($index);
my $end = find_ending_index($index);

- push(@subsystem, $typevalue[$start]);
+ my $subsystem = $typevalue[$start];
+ push(@subsystem, $subsystem);
+ my $status = "Unknown";

for ($i = $start + 1; $i < $end; $i++) {
my $tv = $typevalue[$i];
@@ -1386,8 +1402,8 @@ sub add_categories {
}
} elsif ($ptype eq "R") {
if ($email_reviewer) {
- my $subsystem = get_subsystem_name($i);
- push_email_addresses($pvalue, "reviewer:$subsystem" . $suffix);
+ my $subs = get_subsystem_name($i);
+ push_email_addresses($pvalue, "reviewer:$subs" . $suffix);
}
} elsif ($ptype eq "T") {
push(@scm, $pvalue . $suffix);
@@ -1397,9 +1413,14 @@ sub add_categories {
push(@bug, $pvalue . $suffix);
} elsif ($ptype eq "S") {
push(@status, $pvalue . $suffix);
+ $status = $pvalue;
}
}
}
+
+ if ($subsystem ne "THE REST" and $status ne "Maintained") {
+ push(@substatus, $subsystem . " status: " . $status . $suffix)
+ }
}

sub email_inuse {
@@ -1903,6 +1924,7 @@ EOT
$done = 1;
$output_rolestats = 0;
$output_roles = 0;
+ $output_substatus = 0;
last;
} elsif ($nr =~ /^\d+$/ && $nr > 0 && $nr <= $count) {
$selected{$nr - 1} = !$selected{$nr - 1};

--
2.48.1