@ -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 = "./" ;
@ -58,6 +59,7 @@ my $from_filename = 0;
my $ pattern_depth = 0 ;
my $ version = 0 ;
my $ help = 0 ;
my $ find_maintainer_files = 0 ;
my $ vcs_used = 0 ;
@ -249,6 +251,7 @@ if (!GetOptions(
'sections!' = > \ $ sections ,
'fe|file-emails!' = > \ $ file_emails ,
'f|file' = > \ $ from_filename ,
'find-maintainer-files' = > \ $ find_maintainer_files ,
'v|version' = > \ $ version ,
'h|help|usage' = > \ $ help ,
) ) {
@ -307,36 +310,74 @@ 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 ) = $ _ ;
return if ( $ file !~ m @/MAINTAINERS$@ ) ;
$ file = $ File:: Find:: name ;
return if ( ! - f $ file ) ;
push ( @ mfiles , $ file ) ;
}
close ( $ maint ) ;
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 !~ /^\./ ) ;
}
}
if ( $ find_maintainer_files ) {
find ( { wanted = > \ & find_is_maintainer_file ,
preprocess = > \ & find_ignore_git ,
no_chdir = > 1 ,
} , "${lk_path}" ) ;
} else {
push ( @ mfiles , "${lk_path}MAINTAINERS" ) if - f "${lk_path}MAINTAINERS" ;
}
foreach my $ file ( @ mfiles ) {
read_maintainer_file ( "$file" ) ;
}
#
# Read mail address map
@ -873,7 +914,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" )