get_maintainer: Add the --for-tree argument

Message ID 20221013215738.32326-1-palmer@rivosinc.com
State New
Headers
Series get_maintainer: Add the --for-tree argument |

Commit Message

Palmer Dabbelt Oct. 13, 2022, 9:57 p.m. UTC
  I recently wanted to look up the maintainers for each tree path via a
script, and I couldn't find a better way to do that than poking
get_maintainer.pl to add a new argument.  This lets folks run something
like

    $ ./scripts/get_maintainer.pl --for-tree git://github.com/kvm-riscv/linux.git
    Anup Patel <anup@brainfault.org> (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))
    kvm@vger.kernel.org (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))
    kvm-riscv@lists.infradead.org (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))
    linux-riscv@lists.infradead.org (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))

to find out who owns a tree.

Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
---
 scripts/get_maintainer.pl | 48 +++++++++++++++++++++++++++++++++++++--
 1 file changed, 46 insertions(+), 2 deletions(-)
  

Comments

Joe Perches Oct. 14, 2022, 12:39 a.m. UTC | #1
On Thu, 2022-10-13 at 14:57 -0700, Palmer Dabbelt wrote:
> I recently wanted to look up the maintainers for each tree path via a
> script, and I couldn't find a better way to do that than poking
> get_maintainer.pl to add a new argument.  This lets folks run something
> like
> 
>     $ ./scripts/get_maintainer.pl --for-tree git://github.com/kvm-riscv/linux.git
>     Anup Patel <anup@brainfault.org> (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))
>     kvm@vger.kernel.org (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))
>     kvm-riscv@lists.infradead.org (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))
>     linux-riscv@lists.infradead.org (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))
> 
> to find out who owns a tree.

I'm not sure this is useful.

It seems far simpler to grep the MAINTAINERS file for the repository.

And:

$ git grep "^T:" MAINTAINERS | sort | uniq -c | sort -rn | head -10
    153 MAINTAINERS:T:	git git://linuxtv.org/media_tree.git
     70 MAINTAINERS:T:	git git://anongit.freedesktop.org/drm/drm-misc
     33 MAINTAINERS:T:	git git://linuxtv.org/anttip/media_tree.git
      9 MAINTAINERS:T:	git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git
      6 MAINTAINERS:T:	git git://linuxtv.org/mkrufky/tuners.git
      6 MAINTAINERS:T:	git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git for-next/hardening
      6 MAINTAINERS:T:	git git://github.com/broadcom/stblinux.git
      5 MAINTAINERS:T:	git git://git.kernel.org/pub/scm/virt/kvm/kvm.git
      5 MAINTAINERS:T:	git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
      5 MAINTAINERS:T:	git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git dev

I think I would not like to see the output for git repositories
with 153 matches. (or even 5 matches)

For instance: (I've more comments below this too)

$ ./scripts/get_maintainer.pl --for-tree=git://linuxtv.org/media_tree.git
Hans Verkuil <hverkuil@xs4all.nl> (maintainer:AIMSLAB FM RADIO RECEIVER DRIVER)
linux-media@vger.kernel.org (maintainer:AIMSLAB FM RADIO RECEIVER DRIVER)
Maxime Ripard <mripard@kernel.org> (maintainer:ALLWINNER A10 CSI DRIVER)
Paul Kocialkowski <paul.kocialkowski@bootlin.com> (maintainer:ALLWINNER A31 MIPI CSI-2 BRIDGE DRIVER)
Tianshu Qiu <tian.shu.qiu@intel.com> (maintainer:ASAHI KASEI AK7375 LENS VOICE COIL DRIVER)
Mauro Carvalho Chehab <mchehab@kernel.org> (maintainer:AZ6007 DVB DRIVER)
Fabien Dessenne <fabien.dessenne@foss.st.com> (supporter:BDISP ST MEDIA DRIVER)
Joe Tessler <jrt@google.com> (maintainer:CHRONTEL CH7322 CEC DRIVER)
Yong Deng <yong.deng@magewell.com> (maintainer:CSI DRIVERS FOR ALLWINNER V3s)
Andy Walls <awalls@md.metrocast.net> (maintainer:CX18 VIDEO4LINUX DRIVER)
Jernej Skrabec <jernej.skrabec@gmail.com> (maintainer:DEINTERLACE DRIVERS FOR ALLWINNER H3)
Hugues Fruchet <hugues.fruchet@foss.st.com> (supporter:DELTA ST MEDIA DRIVER)
Sakari Ailus <sakari.ailus@linux.intel.com> (maintainer:DONGWOON DW9714 LENS VOICE COIL DRIVER)
Dongchun Zhu <dongchun.zhu@mediatek.com> (maintainer:DONGWOON DW9768 LENS VOICE COIL DRIVER)
Alexey Klimov <klimov.linux@gmail.com> (maintainer:DSBR100 USB FM RADIO DRIVER)
Michael Krufky <mkrufky@linuxtv.org> (maintainer:DVB_USB_CXUSB MEDIA DRIVER)
Charles-Antoine Couret <charles-antoine.couret@nexvision.fr> (maintainer:GS1662 VIDEO SERIALIZER)
Frank Zago <frank@zago.net> (maintainer:GSPCA FINEPIX SUBDRIVER)
Olivier Lorin <o.lorin@laposte.net> (maintainer:GSPCA GL860 SUBDRIVER)
Erik Andren <erik.andren@gmail.com> (maintainer:GSPCA M5602 SUBDRIVER)
Brian Johnson <brijohn@gmail.com> (maintainer:GSPCA SN9C20X SUBDRIVER)
Leandro Costantino <lcostantino@gmail.com> (maintainer:GSPCA T613 SUBDRIVER)
Jean-Christophe Trotin <jean-christophe.trotin@foss.st.com> (supporter:HVA ST MEDIA DRIVER)
Shawn Tu <shawnx.tu@intel.com> (maintainer:HYNIX HI556 SENSOR DRIVER)
Yong Zhi <yong.zhi@intel.com> (maintainer:INTEL IPU3 CSI-2 CIO2 DRIVER)
Bingbu Cao <bingbu.cao@intel.com> (maintainer:INTEL IPU3 CSI-2 CIO2 DRIVER)
Dan Scally <djrscally@gmail.com> (maintainer:INTEL IPU3 CSI-2 CIO2 DRIVER)
Ramesh Shanmugasundaram <rashanmu@gmail.com> (maintainer:MAX2175 SDR TUNER DRIVER)
Laurent Pinchart <laurent.pinchart@ideasonboard.com> (supporter:MEDIA CONTROLLER FRAMEWORK)
Philipp Zabel <p.zabel@pengutronix.de> (maintainer:MEDIA DRIVER FOR FREESCALE IMX PXP)
Sergey Kozlov <serjk@netup.ru> (supporter:MEDIA DRIVERS FOR ASCOT2E)
Abylay Ospan <aospan@netup.ru> (supporter:MEDIA DRIVERS FOR ASCOT2E)
Jasmin Jessich <jasmin@anw.at> (maintainer:MEDIA DRIVERS FOR CXD2099AR CI CONTROLLERS)
Yasunari Takiguchi <Yasunari.Takiguchi@sony.com> (supporter:MEDIA DRIVERS FOR CXD2880)
Steve Longerbeam <slongerbeam@gmail.com> (maintainer:MEDIA DRIVERS FOR FREESCALE IMX)
Rui Miguel Silva <rmfrfs@gmail.com> (maintainer:MEDIA DRIVERS FOR FREESCALE IMX7)
Dmitry Osipenko <digetx@gmail.com> (maintainer:MEDIA DRIVERS FOR NVIDIA TEGRA - VDE)
linux-tegra@vger.kernel.org (maintainer:MEDIA DRIVERS FOR NVIDIA TEGRA - VDE)
Jacopo Mondi <jacopo@jmondi.org> (supporter:MEDIA DRIVERS FOR RENESAS - CEU)
linux-renesas-soc@vger.kernel.org (supporter:MEDIA DRIVERS FOR RENESAS - CEU)
Fabrizio Castro <fabrizio.castro.jz@renesas.com> (supporter:MEDIA DRIVERS FOR RENESAS - DRIF)
Kieran Bingham <kieran.bingham+renesas@ideasonboard.com> (supporter:MEDIA DRIVERS FOR RENESAS - FDP1)
"Niklas Söderlund" <niklas.soderlund@ragnatech.se> (supporter:MEDIA DRIVERS FOR RENESAS - VIN)
Neil Armstrong <neil.armstrong@linaro.org> (supporter:MESON AO CEC DRIVER FOR AMLOGIC SOCS)
linux-amlogic@lists.infradead.org (supporter:MESON AO CEC DRIVER FOR AMLOGIC SOCS)
Jimmy Su <jimmy.su@intel.com> (maintainer:OMNIVISION OV08D10 SENSOR DRIVER)
Arec Kao <arec.kao@intel.com> (maintainer:OMNIVISION OV13B10 SENSOR DRIVER)
Shunqian Zheng <zhengsq@rock-chips.com> (maintainer:OMNIVISION OV2685 SENSOR DRIVER)
Dave Stevenson <dave.stevenson@raspberrypi.com> (maintainer:OMNIVISION OV5647 SENSOR DRIVER)
Chiranjeevi Rapolu <chiranjeevi.rapolu@intel.com> (maintainer:OMNIVISION OV5670 SENSOR DRIVER)
Wenyou Yang <wenyou.yang@microchip.com> (maintainer:OMNIVISION OV7740 SENSOR DRIVER)
"Paul J. Murphy" <paul.j.murphy@intel.com> (maintainer:OMNIVISION OV9282 SENSOR DRIVER)
Daniele Alessandrelli <daniele.alessandrelli@intel.com> (maintainer:OMNIVISION OV9282 SENSOR DRIVER)
Mike Isely <isely@pobox.com> (maintainer:PVRUSB2 VIDEO4LINUX DRIVER)
pvrusb2@isely.net (maintainer:PVRUSB2 VIDEO4LINUX DRIVER)
Stanimir Varbanov <stanimir.varbanov@linaro.org> (maintainer:QUALCOMM VENUS VIDEO ACCELERATOR DRIVER)
linux-arm-msm@vger.kernel.org (maintainer:QUALCOMM VENUS VIDEO ACCELERATOR DRIVER)
Sean Young <sean@mess.org> (maintainer:RC-CORE / LIRC FRAMEWORK)
Eduardo Valentin <edubezval@gmail.com> (odd fixer:SI4713 FM RADIO TRANSMITTER I2C DRIVER)
Ricardo Ribalda <ribalda@kernel.org> (maintainer:SONY IMX214 SENSOR DRIVER)
Leon Luo <leonl@leopardimaging.com> (maintainer:SONY IMX274 SENSOR DRIVER)
Manivannan Sadhasivam <mani@kernel.org> (maintainer:SONY IMX290 SENSOR DRIVER)
Benjamin Mugnier <benjamin.mugnier@foss.st.com> (maintainer:ST MIPID02 CSI-2 TO PARALLEL BRIDGE DRIVER)
Sylvain Petinot <sylvain.petinot@foss.st.com> (maintainer:ST MIPID02 CSI-2 TO PARALLEL BRIDGE DRIVER)
Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> (maintainer:STK1160 USB VIDEO CAPTURE DRIVER)
Olli Salonen <olli.salonen@iki.fi> (maintainer:TDA18250 MEDIA DRIVER)
Antoine Jacquet <royale@zerezo.com> (maintainer:USB ZR364XX DRIVER)
linux-usb@vger.kernel.org (maintainer:USB ZR364XX DRIVER)
Shuah Khan <skhan@linuxfoundation.org> (maintainer:VIMC VIRTUAL MEDIA CONTROLLER DRIVER)
"Daniel W. S. Almeida" <dwlsalmeida@gmail.com> (maintainer:VIDTV VIRTUAL DIGITAL TV DRIVER)
Hyun Kwon <hyun.kwon@xilinx.com> (supporter:XILINX VIDEO IP CORES)

And I don't know how this is an improvement as the --for-tree argument
seems _very_ likely to be typoed.

> diff --git a/scripts/get_maintainer.pl b/scripts/get_maintainer.pl
[]
> @@ -23,6 +23,7 @@ use File::Spec::Functions;
>  
>  my $cur_path = fastgetcwd() . '/';
>  my $lk_path = "./";
> +my $for_tree = undef;
>  my $email = 1;
>  my $email_usename = 1;
>  my $email_maintainer = 1;
> @@ -239,6 +240,7 @@ if ($#ARGV > 0) {
>  
>  if (!GetOptions(
>  		'email!' => \$email,
> +		'for-tree=s' => \$for_tree,
>  		'git!' => \$email_git,
>  		'git-all-signature-types!' => \$email_git_all_signature_types,
>  		'git-blame!' => \$email_git_blame,
> @@ -300,7 +302,7 @@ if (defined $self_test) {
>      exit 0;
>  }
>  
> -if (-t STDIN && !@ARGV) {
> +if (-t STDIN && !@ARGV && !$for_tree) {
>      # We're talking to a terminal, but have no command line arguments.
>      die "$P: missing patchfile or -f file - use --help if necessary\n";
>  }
> @@ -527,7 +529,7 @@ sub read_mailmap {
>  
>  ## use the filenames on the command line or find the filenames in the patchfiles
>  
> -if (!@ARGV) {
> +if (!@ARGV && !$for_tree) {
>      push(@ARGV, "&STDIN");
>  }
>  
> @@ -951,6 +953,47 @@ sub get_maintainers {
>  	}
>      }
>  
> +    if ($for_tree) {
> +        my $tvi = find_first_section();
> +        while ($tvi < @typevalue) {
> +            my $start = find_starting_index($tvi);
> +            my $end = find_ending_index($tvi);
> +            $tvi = $end + 1;
> +
> +            my $i;
> +            my $tree_match = 0;
> +            for ($i = $start; $i < $end; $i++) {
> +                my $line = $typevalue[$i];
> +                if ($line =~ m/^([A-Z]):(.*)/) {
> +                    my $type = $1;
> +                    my $value = $2;
> +
> +                    if ($type eq 'T') {
> +                        if ($for_tree eq $value || "git $for_tree" eq $value) {
> +                            $tree_match = 1
> +                        }
> +                    }
> +                }
> +            }
> +
> +            if ($tree_match) {
> +                for ($i = $start; $i < $end; $i++) {
> +                    my $line = $typevalue[$i];
> +                    if ($line =~ m/^([A-Z]):(.*)/) {
> +                        my $type = $1;
> +                        my $value = $2;
> +
> +                        if ($type eq 'M' || $type eq 'L') {

And what about reviewers? 'R' ?

> +                            my $role = get_maintainer_role($i);

Also this improperly marks mailing lists as "maintainer:<SECTION>"
rather than "mailing list:<SECTION>" as it uses the S: value for
the section rather than the actual role of the person.

> +                            push_email_address($value, $role)
> +                        }
> +                    }
> +                }
> +            }
> +        }
> +    }
> +
> +
>      foreach my $email (@email_to, @list_to) {
>  	$email->[0] = deduplicate_email($email->[0]);
>      }
> @@ -1074,6 +1117,7 @@ Output type options:
>    --multiline => print 1 entry per line
>  
>  Other options:
> +  --for-tree => Get maintainers for the given tree
>    --pattern-depth => Number of pattern directory traversals (default: 0 (all))
>    --keywords => scan patch for keywords (default: $keywords)
>    --sections => print all of the subsystem sections with pattern matches
  
Palmer Dabbelt Oct. 14, 2022, 2:56 a.m. UTC | #2
On Thu, 13 Oct 2022 17:39:53 PDT (-0700), joe@perches.com wrote:
> On Thu, 2022-10-13 at 14:57 -0700, Palmer Dabbelt wrote:
>> I recently wanted to look up the maintainers for each tree path via a
>> script, and I couldn't find a better way to do that than poking
>> get_maintainer.pl to add a new argument.  This lets folks run something
>> like
>> 
>>     $ ./scripts/get_maintainer.pl --for-tree git://github.com/kvm-riscv/linux.git
>>     Anup Patel <anup@brainfault.org> (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))
>>     kvm@vger.kernel.org (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))
>>     kvm-riscv@lists.infradead.org (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))
>>     linux-riscv@lists.infradead.org (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))
>> 
>> to find out who owns a tree.
>
> I'm not sure this is useful.

Seems reasonable, I'm also not sure anyone would want to do this again.
I had a pretty specific use case for this, where I wanted to poke folks 
who still had git://github.com URLs in MAINTAINERS to move them to 
https://github.com URLs.  I'm not sure anyone would every want to do 
that sort of thing again, so no big deal on my end if this is just a 
NAK.

> It seems far simpler to grep the MAINTAINERS file for the repository.

That's what I tried first, but I didn't have any luck getting reliable 
results.  It's fine if you want to handle one at a time, but not if 
you're trying to script something -- though maybe making it easy to 
script this sort if thing is a bad idea, as it's somewhat likely to 
blast too many people?

> And:
>
> $ git grep "^T:" MAINTAINERS | sort | uniq -c | sort -rn | head -10
>     153 MAINTAINERS:T:	git git://linuxtv.org/media_tree.git
>      70 MAINTAINERS:T:	git git://anongit.freedesktop.org/drm/drm-misc
>      33 MAINTAINERS:T:	git git://linuxtv.org/anttip/media_tree.git
>       9 MAINTAINERS:T:	git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git
>       6 MAINTAINERS:T:	git git://linuxtv.org/mkrufky/tuners.git
>       6 MAINTAINERS:T:	git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git for-next/hardening
>       6 MAINTAINERS:T:	git git://github.com/broadcom/stblinux.git
>       5 MAINTAINERS:T:	git git://git.kernel.org/pub/scm/virt/kvm/kvm.git
>       5 MAINTAINERS:T:	git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
>       5 MAINTAINERS:T:	git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git dev
>
> I think I would not like to see the output for git repositories
> with 153 matches. (or even 5 matches)

The stblinux repo's URL is dead, I sent mail to all 5 of them.  Maybe 
that's overkill, but it seemed reasonable to me at the time...

> For instance: (I've more comments below this too)
>
> $ ./scripts/get_maintainer.pl --for-tree=git://linuxtv.org/media_tree.git
> Hans Verkuil <hverkuil@xs4all.nl> (maintainer:AIMSLAB FM RADIO RECEIVER DRIVER)
> linux-media@vger.kernel.org (maintainer:AIMSLAB FM RADIO RECEIVER DRIVER)
> Maxime Ripard <mripard@kernel.org> (maintainer:ALLWINNER A10 CSI DRIVER)
> Paul Kocialkowski <paul.kocialkowski@bootlin.com> (maintainer:ALLWINNER A31 MIPI CSI-2 BRIDGE DRIVER)
> Tianshu Qiu <tian.shu.qiu@intel.com> (maintainer:ASAHI KASEI AK7375 LENS VOICE COIL DRIVER)
> Mauro Carvalho Chehab <mchehab@kernel.org> (maintainer:AZ6007 DVB DRIVER)
> Fabien Dessenne <fabien.dessenne@foss.st.com> (supporter:BDISP ST MEDIA DRIVER)
> Joe Tessler <jrt@google.com> (maintainer:CHRONTEL CH7322 CEC DRIVER)
> Yong Deng <yong.deng@magewell.com> (maintainer:CSI DRIVERS FOR ALLWINNER V3s)
> Andy Walls <awalls@md.metrocast.net> (maintainer:CX18 VIDEO4LINUX DRIVER)
> Jernej Skrabec <jernej.skrabec@gmail.com> (maintainer:DEINTERLACE DRIVERS FOR ALLWINNER H3)
> Hugues Fruchet <hugues.fruchet@foss.st.com> (supporter:DELTA ST MEDIA DRIVER)
> Sakari Ailus <sakari.ailus@linux.intel.com> (maintainer:DONGWOON DW9714 LENS VOICE COIL DRIVER)
> Dongchun Zhu <dongchun.zhu@mediatek.com> (maintainer:DONGWOON DW9768 LENS VOICE COIL DRIVER)
> Alexey Klimov <klimov.linux@gmail.com> (maintainer:DSBR100 USB FM RADIO DRIVER)
> Michael Krufky <mkrufky@linuxtv.org> (maintainer:DVB_USB_CXUSB MEDIA DRIVER)
> Charles-Antoine Couret <charles-antoine.couret@nexvision.fr> (maintainer:GS1662 VIDEO SERIALIZER)
> Frank Zago <frank@zago.net> (maintainer:GSPCA FINEPIX SUBDRIVER)
> Olivier Lorin <o.lorin@laposte.net> (maintainer:GSPCA GL860 SUBDRIVER)
> Erik Andren <erik.andren@gmail.com> (maintainer:GSPCA M5602 SUBDRIVER)
> Brian Johnson <brijohn@gmail.com> (maintainer:GSPCA SN9C20X SUBDRIVER)
> Leandro Costantino <lcostantino@gmail.com> (maintainer:GSPCA T613 SUBDRIVER)
> Jean-Christophe Trotin <jean-christophe.trotin@foss.st.com> (supporter:HVA ST MEDIA DRIVER)
> Shawn Tu <shawnx.tu@intel.com> (maintainer:HYNIX HI556 SENSOR DRIVER)
> Yong Zhi <yong.zhi@intel.com> (maintainer:INTEL IPU3 CSI-2 CIO2 DRIVER)
> Bingbu Cao <bingbu.cao@intel.com> (maintainer:INTEL IPU3 CSI-2 CIO2 DRIVER)
> Dan Scally <djrscally@gmail.com> (maintainer:INTEL IPU3 CSI-2 CIO2 DRIVER)
> Ramesh Shanmugasundaram <rashanmu@gmail.com> (maintainer:MAX2175 SDR TUNER DRIVER)
> Laurent Pinchart <laurent.pinchart@ideasonboard.com> (supporter:MEDIA CONTROLLER FRAMEWORK)
> Philipp Zabel <p.zabel@pengutronix.de> (maintainer:MEDIA DRIVER FOR FREESCALE IMX PXP)
> Sergey Kozlov <serjk@netup.ru> (supporter:MEDIA DRIVERS FOR ASCOT2E)
> Abylay Ospan <aospan@netup.ru> (supporter:MEDIA DRIVERS FOR ASCOT2E)
> Jasmin Jessich <jasmin@anw.at> (maintainer:MEDIA DRIVERS FOR CXD2099AR CI CONTROLLERS)
> Yasunari Takiguchi <Yasunari.Takiguchi@sony.com> (supporter:MEDIA DRIVERS FOR CXD2880)
> Steve Longerbeam <slongerbeam@gmail.com> (maintainer:MEDIA DRIVERS FOR FREESCALE IMX)
> Rui Miguel Silva <rmfrfs@gmail.com> (maintainer:MEDIA DRIVERS FOR FREESCALE IMX7)
> Dmitry Osipenko <digetx@gmail.com> (maintainer:MEDIA DRIVERS FOR NVIDIA TEGRA - VDE)
> linux-tegra@vger.kernel.org (maintainer:MEDIA DRIVERS FOR NVIDIA TEGRA - VDE)
> Jacopo Mondi <jacopo@jmondi.org> (supporter:MEDIA DRIVERS FOR RENESAS - CEU)
> linux-renesas-soc@vger.kernel.org (supporter:MEDIA DRIVERS FOR RENESAS - CEU)
> Fabrizio Castro <fabrizio.castro.jz@renesas.com> (supporter:MEDIA DRIVERS FOR RENESAS - DRIF)
> Kieran Bingham <kieran.bingham+renesas@ideasonboard.com> (supporter:MEDIA DRIVERS FOR RENESAS - FDP1)
> "Niklas Söderlund" <niklas.soderlund@ragnatech.se> (supporter:MEDIA DRIVERS FOR RENESAS - VIN)
> Neil Armstrong <neil.armstrong@linaro.org> (supporter:MESON AO CEC DRIVER FOR AMLOGIC SOCS)
> linux-amlogic@lists.infradead.org (supporter:MESON AO CEC DRIVER FOR AMLOGIC SOCS)
> Jimmy Su <jimmy.su@intel.com> (maintainer:OMNIVISION OV08D10 SENSOR DRIVER)
> Arec Kao <arec.kao@intel.com> (maintainer:OMNIVISION OV13B10 SENSOR DRIVER)
> Shunqian Zheng <zhengsq@rock-chips.com> (maintainer:OMNIVISION OV2685 SENSOR DRIVER)
> Dave Stevenson <dave.stevenson@raspberrypi.com> (maintainer:OMNIVISION OV5647 SENSOR DRIVER)
> Chiranjeevi Rapolu <chiranjeevi.rapolu@intel.com> (maintainer:OMNIVISION OV5670 SENSOR DRIVER)
> Wenyou Yang <wenyou.yang@microchip.com> (maintainer:OMNIVISION OV7740 SENSOR DRIVER)
> "Paul J. Murphy" <paul.j.murphy@intel.com> (maintainer:OMNIVISION OV9282 SENSOR DRIVER)
> Daniele Alessandrelli <daniele.alessandrelli@intel.com> (maintainer:OMNIVISION OV9282 SENSOR DRIVER)
> Mike Isely <isely@pobox.com> (maintainer:PVRUSB2 VIDEO4LINUX DRIVER)
> pvrusb2@isely.net (maintainer:PVRUSB2 VIDEO4LINUX DRIVER)
> Stanimir Varbanov <stanimir.varbanov@linaro.org> (maintainer:QUALCOMM VENUS VIDEO ACCELERATOR DRIVER)
> linux-arm-msm@vger.kernel.org (maintainer:QUALCOMM VENUS VIDEO ACCELERATOR DRIVER)
> Sean Young <sean@mess.org> (maintainer:RC-CORE / LIRC FRAMEWORK)
> Eduardo Valentin <edubezval@gmail.com> (odd fixer:SI4713 FM RADIO TRANSMITTER I2C DRIVER)
> Ricardo Ribalda <ribalda@kernel.org> (maintainer:SONY IMX214 SENSOR DRIVER)
> Leon Luo <leonl@leopardimaging.com> (maintainer:SONY IMX274 SENSOR DRIVER)
> Manivannan Sadhasivam <mani@kernel.org> (maintainer:SONY IMX290 SENSOR DRIVER)
> Benjamin Mugnier <benjamin.mugnier@foss.st.com> (maintainer:ST MIPID02 CSI-2 TO PARALLEL BRIDGE DRIVER)
> Sylvain Petinot <sylvain.petinot@foss.st.com> (maintainer:ST MIPID02 CSI-2 TO PARALLEL BRIDGE DRIVER)
> Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> (maintainer:STK1160 USB VIDEO CAPTURE DRIVER)
> Olli Salonen <olli.salonen@iki.fi> (maintainer:TDA18250 MEDIA DRIVER)
> Antoine Jacquet <royale@zerezo.com> (maintainer:USB ZR364XX DRIVER)
> linux-usb@vger.kernel.org (maintainer:USB ZR364XX DRIVER)
> Shuah Khan <skhan@linuxfoundation.org> (maintainer:VIMC VIRTUAL MEDIA CONTROLLER DRIVER)
> "Daniel W. S. Almeida" <dwlsalmeida@gmail.com> (maintainer:VIDTV VIRTUAL DIGITAL TV DRIVER)
> Hyun Kwon <hyun.kwon@xilinx.com> (supporter:XILINX VIDEO IP CORES)

That certainly seems pretty worthless as a To list, but I guess in that 
case user get what they asked for?  For something like "your repo's URL 
is dead" it seems generally reasonable to just poke everyone involved, 
though blasting 153 people would still be a bad idea.  I always assume 
that get_maintainers.pl might produce too many people and take a look 
before sending a big email, but if this makes it too easy to just send 
something wacky then I'm fine just tossing it.

Either way, I certainly hope to never have to use this again so no big 
deal on my end ;)

> And I don't know how this is an improvement as the --for-tree argument
> seems _very_ likely to be typoed.
>
>> diff --git a/scripts/get_maintainer.pl b/scripts/get_maintainer.pl
> []
>> @@ -23,6 +23,7 @@ use File::Spec::Functions;
>>  
>>  my $cur_path = fastgetcwd() . '/';
>>  my $lk_path = "./";
>> +my $for_tree = undef;
>>  my $email = 1;
>>  my $email_usename = 1;
>>  my $email_maintainer = 1;
>> @@ -239,6 +240,7 @@ if ($#ARGV > 0) {
>>  
>>  if (!GetOptions(
>>  		'email!' => \$email,
>> +		'for-tree=s' => \$for_tree,
>>  		'git!' => \$email_git,
>>  		'git-all-signature-types!' => \$email_git_all_signature_types,
>>  		'git-blame!' => \$email_git_blame,
>> @@ -300,7 +302,7 @@ if (defined $self_test) {
>>      exit 0;
>>  }
>>  
>> -if (-t STDIN && !@ARGV) {
>> +if (-t STDIN && !@ARGV && !$for_tree) {
>>      # We're talking to a terminal, but have no command line arguments.
>>      die "$P: missing patchfile or -f file - use --help if necessary\n";
>>  }
>> @@ -527,7 +529,7 @@ sub read_mailmap {
>>  
>>  ## use the filenames on the command line or find the filenames in the patchfiles
>>  
>> -if (!@ARGV) {
>> +if (!@ARGV && !$for_tree) {
>>      push(@ARGV, "&STDIN");
>>  }
>>  
>> @@ -951,6 +953,47 @@ sub get_maintainers {
>>  	}
>>      }
>>  
>> +    if ($for_tree) {
>> +        my $tvi = find_first_section();
>> +        while ($tvi < @typevalue) {
>> +            my $start = find_starting_index($tvi);
>> +            my $end = find_ending_index($tvi);
>> +            $tvi = $end + 1;
>> +
>> +            my $i;
>> +            my $tree_match = 0;
>> +            for ($i = $start; $i < $end; $i++) {
>> +                my $line = $typevalue[$i];
>> +                if ($line =~ m/^([A-Z]):(.*)/) {
>> +                    my $type = $1;
>> +                    my $value = $2;
>> +
>> +                    if ($type eq 'T') {
>> +                        if ($for_tree eq $value || "git $for_tree" eq $value) {
>> +                            $tree_match = 1
>> +                        }
>> +                    }
>> +                }
>> +            }
>> +
>> +            if ($tree_match) {
>> +                for ($i = $start; $i < $end; $i++) {
>> +                    my $line = $typevalue[$i];
>> +                    if ($line =~ m/^([A-Z]):(.*)/) {
>> +                        my $type = $1;
>> +                        my $value = $2;
>> +
>> +                        if ($type eq 'M' || $type eq 'L') {
>
> And what about reviewers? 'R' ?
>
>> +                            my $role = get_maintainer_role($i);
>
> Also this improperly marks mailing lists as "maintainer:<SECTION>"
> rather than "mailing list:<SECTION>" as it uses the S: value for
> the section rather than the actual role of the person.

OK, sorry about those.  Happy to fix them, but I know almost nothing 
about get_maintainers.pl so it'd take a bit.  Generally sound like you 
don't want this one so I'm going to punt on fixing these for now, I 
don't care all that much about having this merged.

LMK if you want a v2, though.

>
>> +                            push_email_address($value, $role)
>> +                        }
>> +                    }
>> +                }
>> +            }
>> +        }
>> +    }
>> +
>> +
>>      foreach my $email (@email_to, @list_to) {
>>  	$email->[0] = deduplicate_email($email->[0]);
>>      }
>> @@ -1074,6 +1117,7 @@ Output type options:
>>    --multiline => print 1 entry per line
>>  
>>  Other options:
>> +  --for-tree => Get maintainers for the given tree
>>    --pattern-depth => Number of pattern directory traversals (default: 0 (all))
>>    --keywords => scan patch for keywords (default: $keywords)
>>    --sections => print all of the subsystem sections with pattern matches
  
Joe Perches Oct. 14, 2022, 3:48 a.m. UTC | #3
On Thu, 2022-10-13 at 19:56 -0700, Palmer Dabbelt wrote:
> On Thu, 13 Oct 2022 17:39:53 PDT (-0700), joe@perches.com wrote:
> > On Thu, 2022-10-13 at 14:57 -0700, Palmer Dabbelt wrote:
> > > I recently wanted to look up the maintainers for each tree path via a
> > > script, and I couldn't find a better way to do that than poking
> > > get_maintainer.pl to add a new argument.  This lets folks run something
> > > like
> > > 
> > >     $ ./scripts/get_maintainer.pl --for-tree git://github.com/kvm-riscv/linux.git
> > >     Anup Patel <anup@brainfault.org> (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))
> > >     kvm@vger.kernel.org (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))
> > >     kvm-riscv@lists.infradead.org (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))
> > >     linux-riscv@lists.infradead.org (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))
> > > 
> > > to find out who owns a tree.
> > 
> > I'm not sure this is useful.
[]
> Generally sound like you 
> don't want this one so I'm going to punt on fixing these for now, I 
> don't care all that much about having this merged.
> 
> LMK if you want a v2, though.

I think it's not necessary.

Thanks,  Joe
  
Palmer Dabbelt Oct. 14, 2022, 3:52 a.m. UTC | #4
On Thu, 13 Oct 2022 20:48:10 PDT (-0700), joe@perches.com wrote:
> On Thu, 2022-10-13 at 19:56 -0700, Palmer Dabbelt wrote:
>> On Thu, 13 Oct 2022 17:39:53 PDT (-0700), joe@perches.com wrote:
>> > On Thu, 2022-10-13 at 14:57 -0700, Palmer Dabbelt wrote:
>> > > I recently wanted to look up the maintainers for each tree path via a
>> > > script, and I couldn't find a better way to do that than poking
>> > > get_maintainer.pl to add a new argument.  This lets folks run something
>> > > like
>> > > 
>> > >     $ ./scripts/get_maintainer.pl --for-tree git://github.com/kvm-riscv/linux.git
>> > >     Anup Patel <anup@brainfault.org> (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))
>> > >     kvm@vger.kernel.org (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))
>> > >     kvm-riscv@lists.infradead.org (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))
>> > >     linux-riscv@lists.infradead.org (maintainer:KERNEL VIRTUAL MACHINE FOR RISC-V (KVM/riscv))
>> > > 
>> > > to find out who owns a tree.
>> > 
>> > I'm not sure this is useful.
> []
>> Generally sound like you 
>> don't want this one so I'm going to punt on fixing these for now, I 
>> don't care all that much about having this merged.
>> 
>> LMK if you want a v2, though.
>
> I think it's not necessary.

Works for me.
  

Patch

diff --git a/scripts/get_maintainer.pl b/scripts/get_maintainer.pl
index ab123b498fd9..70abefadd295 100755
--- a/scripts/get_maintainer.pl
+++ b/scripts/get_maintainer.pl
@@ -23,6 +23,7 @@  use File::Spec::Functions;
 
 my $cur_path = fastgetcwd() . '/';
 my $lk_path = "./";
+my $for_tree = undef;
 my $email = 1;
 my $email_usename = 1;
 my $email_maintainer = 1;
@@ -239,6 +240,7 @@  if ($#ARGV > 0) {
 
 if (!GetOptions(
 		'email!' => \$email,
+		'for-tree=s' => \$for_tree,
 		'git!' => \$email_git,
 		'git-all-signature-types!' => \$email_git_all_signature_types,
 		'git-blame!' => \$email_git_blame,
@@ -300,7 +302,7 @@  if (defined $self_test) {
     exit 0;
 }
 
-if (-t STDIN && !@ARGV) {
+if (-t STDIN && !@ARGV && !$for_tree) {
     # We're talking to a terminal, but have no command line arguments.
     die "$P: missing patchfile or -f file - use --help if necessary\n";
 }
@@ -527,7 +529,7 @@  sub read_mailmap {
 
 ## use the filenames on the command line or find the filenames in the patchfiles
 
-if (!@ARGV) {
+if (!@ARGV && !$for_tree) {
     push(@ARGV, "&STDIN");
 }
 
@@ -951,6 +953,47 @@  sub get_maintainers {
 	}
     }
 
+    if ($for_tree) {
+        my $tvi = find_first_section();
+        while ($tvi < @typevalue) {
+            my $start = find_starting_index($tvi);
+            my $end = find_ending_index($tvi);
+            $tvi = $end + 1;
+
+            my $i;
+            my $tree_match = 0;
+            for ($i = $start; $i < $end; $i++) {
+                my $line = $typevalue[$i];
+                if ($line =~ m/^([A-Z]):(.*)/) {
+                    my $type = $1;
+                    my $value = $2;
+
+                    if ($type eq 'T') {
+                        if ($for_tree eq $value || "git $for_tree" eq $value) {
+                            $tree_match = 1
+                        }
+                    }
+                }
+            }
+
+            if ($tree_match) {
+                for ($i = $start; $i < $end; $i++) {
+                    my $line = $typevalue[$i];
+                    if ($line =~ m/^([A-Z]):(.*)/) {
+                        my $type = $1;
+                        my $value = $2;
+
+                        if ($type eq 'M' || $type eq 'L') {
+                            my $role = get_maintainer_role($i);
+                            push_email_address($value, $role)
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+
     foreach my $email (@email_to, @list_to) {
 	$email->[0] = deduplicate_email($email->[0]);
     }
@@ -1074,6 +1117,7 @@  Output type options:
   --multiline => print 1 entry per line
 
 Other options:
+  --for-tree => Get maintainers for the given tree
   --pattern-depth => Number of pattern directory traversals (default: 0 (all))
   --keywords => scan patch for keywords (default: $keywords)
   --sections => print all of the subsystem sections with pattern matches