Re: [PATCH] get_maintainer: Add email addresses from .yaml files

From: Sam Ravnborg
Date: Mon Apr 27 2020 - 01:58:12 EST


Hi Joe.

On Sun, Apr 26, 2020 at 10:40:52PM -0700, Joe Perches wrote:
> .yaml files can contain maintainer/author addresses and it seems
> unlikely or unnecessary that individual MAINTAINER file section
> entries for each .yaml file will be created.
>
> So dd the email addresses found in .yaml files to the default
^
add

> get_maintainer output.
>
> The email addresses are marked with "(in file)" when using the
> "--roles" or "--rolestats" options.
>
> Miscellanea:
>
> o Change $file_emails to $email_file_emails to avoid visual
> naming conflicts with @file_emails
>
> Signed-off-by: Joe Perches <joe@xxxxxxxxxxx>
Acked-by: Sam Ravnborg <sam@xxxxxxxxxxxx>
Tested-by: Sam Ravnborg <sam@xxxxxxxxxxxx>

The patch did not apply on top of -rc3, but it was trivial to fix.
Tested and works like a charm.
Thanks for doing this!

Sam

> ---
> scripts/get_maintainer.pl | 44 +++++++++++++++++++++++++++++---------------
> 1 file changed, 29 insertions(+), 15 deletions(-)
>
> diff --git a/scripts/get_maintainer.pl b/scripts/get_maintainer.pl
> index 6cbcd1..6d973f 100755
> --- a/scripts/get_maintainer.pl
> +++ b/scripts/get_maintainer.pl
> @@ -57,7 +57,7 @@ my $status = 0;
> my $letters = "";
> my $keywords = 1;
> my $sections = 0;
> -my $file_emails = 0;
> +my $email_file_emails = 0;
> my $from_filename = 0;
> my $pattern_depth = 0;
> my $self_test = undef;
> @@ -69,6 +69,12 @@ my $vcs_used = 0;
>
> my $exit = 0;
>
> +my @files = ();
> +my @fixes = (); # If a patch description includes Fixes: lines
> +my @range = ();
> +my @keyword_tvi = ();
> +my @file_emails = ();
> +
> my %commit_author_hash;
> my %commit_signer_hash;
>
> @@ -266,7 +272,7 @@ if (!GetOptions(
> 'pattern-depth=i' => \$pattern_depth,
> 'k|keywords!' => \$keywords,
> 'sections!' => \$sections,
> - 'fe|file-emails!' => \$file_emails,
> + 'fe|file-emails!' => \$email_file_emails,
> 'f|file' => \$from_filename,
> 'find-maintainer-files' => \$find_maintainer_files,
> 'mpath|maintainer-path=s' => \$maintainer_path,
> @@ -424,6 +430,22 @@ sub read_all_maintainer_files {
> }
> }
>
> +sub maintainers_in_file {
> + my ($file) = @_;
> +
> + return if ($file =~ m@\bMAINTAINERS$@);
> +
> + if (-f $file && ($email_file_emails || $file =~ /\.yaml$/)) {
> + open(my $f, '<', $file)
> + or die "$P: Can't open $file: $!\n";
> + my $text = do { local($/) ; <$f> };
> + close($f);
> +
> + my @poss_addr = $text =~ m$[A-Za-zÀ-ÿ\"\' \,\.\+-]*\s*[\,]*\s*[\(\<\{]{0,1}[A-Za-z0-9_\.\+-]+\@[A-Za-z0-9\.-]+\.[A-Za-z0-9]+[\)\>\}]{0,1}$g;
> + push(@file_emails, clean_file_emails(@poss_addr));
> + }
> +}
> +
> #
> # Read mail address map
> #
> @@ -504,12 +526,6 @@ sub read_mailmap {
>
> ## use the filenames on the command line or find the filenames in the patchfiles
>
> -my @files = ();
> -my @fixes = (); # If a patch description includes Fixes: lines
> -my @range = ();
> -my @keyword_tvi = ();
> -my @file_emails = ();
> -
> if (!@ARGV) {
> push(@ARGV, "&STDIN");
> }
> @@ -527,7 +543,7 @@ foreach my $file (@ARGV) {
> $file =~ s/^\Q${cur_path}\E//; #strip any absolute path
> $file =~ s/^\Q${lk_path}\E//; #or the path to the lk tree
> push(@files, $file);
> - if ($file ne "MAINTAINERS" && -f $file && ($keywords || $file_emails)) {
> + if ($file ne "MAINTAINERS" && -f $file && $keywords) {
> open(my $f, '<', $file)
> or die "$P: Can't open $file: $!\n";
> my $text = do { local($/) ; <$f> };
> @@ -539,10 +555,6 @@ foreach my $file (@ARGV) {
> }
> }
> }
> - if ($file_emails) {
> - my @poss_addr = $text =~ m$[A-Za-zÀ-ÿ\"\' \,\.\+-]*\s*[\,]*\s*[\(\<\{]{0,1}[A-Za-z0-9_\.\+-]+\@[A-Za-z0-9\.-]+\.[A-Za-z0-9]+[\)\>\}]{0,1}$g;
> - push(@file_emails, clean_file_emails(@poss_addr));
> - }
> }
> } else {
> my $file_cnt = @files;
> @@ -923,6 +935,8 @@ sub get_maintainers {
> print("\n");
> }
> }
> +
> + maintainers_in_file($file);
> }
>
> if ($keywords) {
> @@ -1835,7 +1849,7 @@ tm toggle maintainers
> tg toggle git entries
> tl toggle open list entries
> ts toggle subscriber list entries
> -f emails in file [$file_emails]
> +f emails in file [$email_file_emails]
> k keywords in file [$keywords]
> r remove duplicates [$email_remove_duplicates]
> p# pattern match depth [$pattern_depth]
> @@ -1960,7 +1974,7 @@ EOT
> bool_invert(\$email_git_all_signature_types);
> $rerun = 1;
> } elsif ($sel eq "f") {
> - bool_invert(\$file_emails);
> + bool_invert(\$email_file_emails);
> $rerun = 1;
> } elsif ($sel eq "r") {
> bool_invert(\$email_remove_duplicates);
>