Re: [PATCH] get_maintainer: add --json output mode

From: Joe Perches

Date: Mon Apr 06 2026 - 22:39:05 EST


On Mon, 2026-04-06 at 13:01 -0400, Sasha Levin wrote:
> Add a --json flag to get_maintainer.pl that emits structured JSON
> output, making results machine-parseable for CI systems, IDE
> integrations, and AI-assisted development tools.

OK here too but perhaps the code can be consolidated a bit more.

> diff --git a/scripts/get_maintainer.pl b/scripts/get_maintainer.pl
> index 4414194bedcfd..37817ca701bd6 100755
> --- a/scripts/get_maintainer.pl
> +++ b/scripts/get_maintainer.pl
> @@ -68,6 +68,7 @@ my $pattern_depth = 0;
> my $self_test = undef;
> my $version = 0;
> my $help = 0;
> +my $json = 0;
> my $find_maintainer_files = 0;
> my $maintainer_path;
> my $vcs_used = 0;
> @@ -285,6 +286,7 @@ if (!GetOptions(
> 'find-maintainer-files' => \$find_maintainer_files,
> 'mpath|maintainer-path=s' => \$maintainer_path,
> 'self-test:s' => \$self_test,
> + 'json!' => \$json,
> 'v|version' => \$version,
> 'h|help|usage' => \$help,
> )) {
> @@ -648,39 +650,74 @@ my %deduplicate_name_hash = ();
> my %deduplicate_address_hash = ();
>
> my @maintainers = get_maintainers();
> -if (@maintainers) {
> - @maintainers = merge_email(@maintainers);
> - output(@maintainers);
> -}
>
> -if ($scm) {
> - @scm = uniq(@scm);
> - output(@scm);
> -}
> +if ($json) {
> + my @json_maintainers;
> + if (@maintainers) {
> + my %saw;
> + for (@maintainers) {
> + my ($address, $role) = @$_;
> + if (!$saw{$address}) {
> + my ($name, $email_addr) = parse_email($address);
> + my $entry = '{"name":"' . json_escape_str($name) .
> + '","email":"' . json_escape_str($email_addr) . '"';
> + $entry .= ',"role":"' . json_escape_str($role) . '"' if ($output_roles && $role ne '');
> + $entry .= '}';
> + push(@json_maintainers, $entry);
> + $saw{$address} = 1;

Isn't this effectively the merge_email(@maintainers) above?
Why not use it?