[PATCH 3/7] scripts/get_maintainer.pl: Add --pattern-depth

From: Joe Perches
Date: Wed Aug 05 2009 - 22:44:38 EST


--pattern-depth is used to control how many levels of directory traversal
should be performed to find maintainers. default is 0 (all directory levels).

For instance:

MAINTAINERS currently has multiple M: and F: entries that match
net/netfilter/ipvs/ip_vs_app.c

IPVS
M: Wensong Zhang <wensong@xxxxxxxxxxxx>
M: Simon Horman <horms@xxxxxxxxxxxx>
M: Julian Anastasov <ja@xxxxxx>
[...]
F: net/netfilter/ipvs/

NETFILTER/IPTABLES/IPCHAINS
[...]
M: Patrick McHardy <kaber@xxxxxxxxx>
[...]
F: net/netfilter/

NETWORKING [GENERAL]
M: "David S. Miller" <davem@xxxxxxxxxxxxx>
[...]
F: net/

THE REST
M: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
[...]
F: */

Using this command will return all of those maintainers:
(except Linus unless --git-chief-maintainers is specified)

$ ./scripts/get_maintainer.pl --nogit -nol \
-f net/netfilter/ipvs/ip_vs_app.c
Julian Anastasov <ja@xxxxxx>
Simon Horman <horms@xxxxxxxxxxxx>
Wensong Zhang <wensong@xxxxxxxxxxxx>
Patrick McHardy <kaber@xxxxxxxxx>
David S. Miller <davem@xxxxxxxxxxxxx>

Adding --pattern-depth=1 will match at the deepest level
$ ./scripts/get_maintainer.pl --nogit -nol --pattern-depth=1 \
-f net/netfilter/ipvs/ip_vs_app.c
Julian Anastasov <ja@xxxxxx>
Simon Horman <horms@xxxxxxxxxxxx>
Wensong Zhang <wensong@xxxxxxxxxxxx>

Adding --pattern-depth=2 will match at the deepest level and 1 higher
$ ./scripts/get_maintainer.pl --nogit -nol --pattern-depth=2 \
-f net/netfilter/ipvs/ip_vs_app.c
Julian Anastasov <ja@xxxxxx>
Simon Horman <horms@xxxxxxxxxxxx>
Wensong Zhang <wensong@xxxxxxxxxxxx>
Patrick McHardy <kaber@xxxxxxxxx>

and so on.

Signed-off-by: Joe Perches <joe@xxxxxxxxxxx>
---
scripts/get_maintainer.pl | 21 ++++++++++++++-------
1 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/scripts/get_maintainer.pl b/scripts/get_maintainer.pl
index fb446e0..5132949 100755
--- a/scripts/get_maintainer.pl
+++ b/scripts/get_maintainer.pl
@@ -13,7 +13,7 @@
use strict;

my $P = $0;
-my $V = '0.18beta2';
+my $V = '0.19';

use Getopt::Long qw(:config no_auto_abbrev);

@@ -37,6 +37,7 @@ my $web = 0;
my $subsystem = 0;
my $status = 0;
my $from_filename = 0;
+my $pattern_depth = 0;
my $version = 0;
my $help = 0;

@@ -80,6 +81,7 @@ if (!GetOptions(
'status!' => \$status,
'scm!' => \$scm,
'web!' => \$web,
+ 'pattern-depth=i' => \$pattern_depth,
'f|file' => \$from_filename,
'v|version' => \$version,
'h|help' => \$help,
@@ -226,9 +228,13 @@ foreach my $file (@files) {
my $value = $2;
if ($type eq 'F') {
if (file_match_pattern($file, $value)) {
- my $pattern_depth = ($value =~ tr@/@@);
- $pattern_depth++ if (!(substr($value,-1,1) eq "/"));
- $hash{$tvi} = $pattern_depth;
+ my $value_pd = ($value =~ tr@/@@);
+ my $file_pd = ($file =~ tr@/@@);
+ $value_pd++ if (substr($value,-1,1) ne "/");
+ if ($pattern_depth == 0 ||
+ (($file_pd - $value_pd) < $pattern_depth)) {
+ $hash{$tvi} = $value_pd;
+ }
}
}
}
@@ -345,13 +351,14 @@ Output type options:
--separator [, ] => separator for multiple entries on 1 line
--multiline => print 1 entry per line

-Default options:
- [--email --git --m --n --l --multiline]
-
Other options:
+ --pattern-depth => Number of pattern directory traversals (default: 0 (all))
--version => show version
--help => show this help information

+Default options:
+ [--email --git --m --n --l --multiline --pattern-depth=0]
+
Notes:
Using "-f directory" may give unexpected results:
Used with "--git", git signators for _all_ files in and below
--
1.6.3.1.10.g659a0.dirty

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/