From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752126AbdHBIEJ (ORCPT ); Wed, 2 Aug 2017 04:04:09 -0400 Received: from smtprelay0068.hostedemail.com ([216.40.44.68]:51849 "EHLO smtprelay.hostedemail.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752051AbdHBIEF (ORCPT ); Wed, 2 Aug 2017 04:04:05 -0400 X-Session-Marker: 6A6F6540706572636865732E636F6D X-Spam-Summary: 2,0,0,,d41d8cd98f00b204,joe@perches.com,:::::,RULES_HIT:41:69:355:379:541:599:800:960:973:979:982:988:989:1260:1277:1311:1313:1314:1345:1359:1373:1437:1515:1516:1518:1535:1544:1593:1594:1605:1711:1730:1747:1777:1792:2197:2199:2393:2559:2562:2828:3138:3139:3140:3141:3142:3622:3653:3865:3866:3867:3868:3870:3871:3872:4250:4321:4383:4605:5007:6299:7903:10004:10848:11026:11232:11658:11914:12043:12291:12438:12555:12683:12740:12760:12895:13439:14181:14659:14721:21080:21221:21324:21433:21450:21451:21627:30003:30012:30026:30029:30054:30055:30091,0,RBL:none,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:,MSBL:0,DNSBL:none,Custom_rules:0:0:0,LFtime:2,LUA_SUMMARY:none X-HE-Tag: screw44_65cbae3e2228 X-Filterd-Recvd-Size: 5085 Message-ID: <1501661042.31625.0.camel@perches.com> Subject: Re: [PATCH V2] get_maintainer: Prepare for separate MAINTAINERS files From: Joe Perches To: Andrew Morton , Linus Torvalds Cc: linux-kernel@vger.kernel.org Date: Wed, 02 Aug 2017 01:04:02 -0700 In-Reply-To: References: Content-Type: text/plain; charset="ISO-8859-1" X-Mailer: Evolution 3.22.6-1ubuntu1 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 > --- > > 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")