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

From: Lorenzo Stoakes
Date: Tue Feb 04 2025 - 05:19:53 EST


On Mon, Feb 03, 2025 at 12:13:16PM +0100, Vlastimil Babka wrote:
> 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>

This LGTM afaict, and makes sense, so:

Acked-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>

> ---
> 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
>