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 >