public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Joe Perches <joe@perches.com>
To: Andrew Morton <akpm@linux-foundation.org>,
	Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH V2] get_maintainer: Prepare for separate MAINTAINERS files
Date: Wed, 02 Aug 2017 01:04:02 -0700	[thread overview]
Message-ID: <1501661042.31625.0.camel@perches.com> (raw)
In-Reply-To: <b4ad35855e77209e998a5001f2bbed7da06ef72a.1500841805.git.joe@perches.com>

On Sun, 2017-07-23 at 13:32 -0700, Joe Perches wrote:
> Allow for MAINTAINERS to become a directory and if it is,
> read all the files in the directory for maintained sections.

ping?

> Also look for all files named MAINTAINERS in all subdirectories
> excluding the .git directory.
> 
> This adds ~.3 seconds of CPU on an Intel i5-6200 with an SSD.
> 
> Miscellanea:
> 
> o Create a read_maintainer_file subroutine from the existing code
> o Test only the existence of MAINTAINERS, not whether it's a file
> 
> Signed-off-by: Joe Perches <joe@perches.com>
> ---
> 
> v2: Search for MAINTAINERS in subdirectories, ignoring .git
> 
>  scripts/get_maintainer.pl | 84 +++++++++++++++++++++++++++++++++--------------
>  1 file changed, 59 insertions(+), 25 deletions(-)
> 
> diff --git a/scripts/get_maintainer.pl b/scripts/get_maintainer.pl
> index 3bd5f4f30235..56d5d3ef4c81 100755
> --- a/scripts/get_maintainer.pl
> +++ b/scripts/get_maintainer.pl
> @@ -18,6 +18,7 @@ my $V = '0.26';
>  
>  use Getopt::Long qw(:config no_auto_abbrev);
>  use Cwd;
> +use File::Find;
>  
>  my $cur_path = fastgetcwd() . '/';
>  my $lk_path = "./";
> @@ -307,36 +308,69 @@ if (!top_of_kernel_tree($lk_path)) {
>  
>  my @typevalue = ();
>  my %keyword_hash;
> +my @mfiles = ();
>  
> -open (my $maint, '<', "${lk_path}MAINTAINERS")
> -    or die "$P: Can't open MAINTAINERS: $!\n";
> -while (<$maint>) {
> -    my $line = $_;
> -
> -    if ($line =~ m/^([A-Z]):\s*(.*)/) {
> -	my $type = $1;
> -	my $value = $2;
> -
> -	##Filename pattern matching
> -	if ($type eq "F" || $type eq "X") {
> -	    $value =~ s@\.@\\\.@g;       ##Convert . to \.
> -	    $value =~ s/\*/\.\*/g;       ##Convert * to .*
> -	    $value =~ s/\?/\./g;         ##Convert ? to .
> -	    ##if pattern is a directory and it lacks a trailing slash, add one
> -	    if ((-d $value)) {
> -		$value =~ s@([^/])$@$1/@;
> +sub read_maintainer_file {
> +    my ($file) = @_;
> +
> +    open (my $maint, '<', "$file")
> +	or die "$P: Can't open MAINTAINERS file '$file': $!\n";
> +    while (<$maint>) {
> +	my $line = $_;
> +
> +	if ($line =~ m/^([A-Z]):\s*(.*)/) {
> +	    my $type = $1;
> +	    my $value = $2;
> +
> +	    ##Filename pattern matching
> +	    if ($type eq "F" || $type eq "X") {
> +		$value =~ s@\.@\\\.@g;       ##Convert . to \.
> +		$value =~ s/\*/\.\*/g;       ##Convert * to .*
> +		$value =~ s/\?/\./g;         ##Convert ? to .
> +		##if pattern is a directory and it lacks a trailing slash, add one
> +		if ((-d $value)) {
> +		    $value =~ s@([^/])$@$1/@;
> +		}
> +	    } elsif ($type eq "K") {
> +		$keyword_hash{@typevalue} = $value;
>  	    }
> -	} elsif ($type eq "K") {
> -	    $keyword_hash{@typevalue} = $value;
> +	    push(@typevalue, "$type:$value");
> +	} elsif (!(/^\s*$/ || /^\s*\#/)) {
> +	    $line =~ s/\n$//g;
> +	    push(@typevalue, $line);
>  	}
> -	push(@typevalue, "$type:$value");
> -    } elsif (!/^(\s)*$/) {
> -	$line =~ s/\n$//g;
> -	push(@typevalue, $line);
> +    }
> +    close($maint);
> +}
> +
> +sub find_is_maintainer_file {
> +    my $file = $File::Find::name;
> +    if (-f $file && $file =~ m@/MAINTAINERS$@) {
> +	push(@mfiles, $file);
> +    }
> +}
> +
> +sub find_ignore_git {
> +    return grep { $_ !~ /^\.git$/; } @_;
> +}
> +
> +if (-d "${lk_path}MAINTAINERS") {
> +    opendir(DIR, "${lk_path}MAINTAINERS") or die $!;
> +    my @files = readdir(DIR);
> +    closedir(DIR);
> +    foreach my $file (@files) {
> +	push(@mfiles, "${lk_path}MAINTAINERS/$file") if ($file !~ /^\./);
>      }
>  }
> -close($maint);
>  
> +find( { wanted => \&find_is_maintainer_file,
> +	preprocess => \&find_ignore_git,
> +	no_chdir => 1,
> +      }, "${lk_path}");
> +
> +foreach my $file (@mfiles) {
> +    read_maintainer_file("$file");
> +}
>  
>  #
>  # Read mail address map
> @@ -873,7 +907,7 @@ sub top_of_kernel_tree {
>      if (   (-f "${lk_path}COPYING")
>  	&& (-f "${lk_path}CREDITS")
>  	&& (-f "${lk_path}Kbuild")
> -	&& (-f "${lk_path}MAINTAINERS")
> +	&& (-e "${lk_path}MAINTAINERS")
>  	&& (-f "${lk_path}Makefile")
>  	&& (-f "${lk_path}README")
>  	&& (-d "${lk_path}Documentation")

  reply	other threads:[~2017-08-02  8:04 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-23 20:32 [PATCH V2] get_maintainer: Prepare for separate MAINTAINERS files Joe Perches
2017-08-02  8:04 ` Joe Perches [this message]
2017-08-02 18:06   ` Randy Dunlap
2017-08-02 18:15     ` Linus Torvalds
2017-08-02 20:35       ` Joe Perches
2017-08-14 22:09       ` Pavel Machek
2017-08-15  0:58         ` Joe Perches

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1501661042.31625.0.camel@perches.com \
    --to=joe@perches.com \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox