Skip to content

Commit d72b708

Browse files
committed
Integrate patch for --ignore-dir=match:...
See also GH #42
1 parent 17504aa commit d72b708

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

ack

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,16 @@ sub _compile_descend_filter {
8888
return unless $idirs && @{$idirs};
8989

9090
my %ignore_dirs;
91+
my @ignore_dirs_re;
9192

9293
foreach my $idir (@{$idirs}) {
9394
if ( $idir =~ /^(\w+):(.*)/ ) {
9495
if ( $1 eq 'is') {
9596
$ignore_dirs{$2} = 1;
9697
}
98+
elsif ( $1 eq 'match') {
99+
push @ignore_dirs_re, $2;
100+
}
97101
else {
98102
Carp::croak( 'Non-is filters are not yet supported for --ignore-dir' );
99103
}
@@ -104,7 +108,8 @@ sub _compile_descend_filter {
104108
}
105109

106110
return sub {
107-
return !exists $ignore_dirs{$_} && !exists $ignore_dirs{$File::Next::dir};
111+
return !exists $ignore_dirs{$_} && !exists $ignore_dirs{$File::Next::dir}
112+
&& !grep { $File::Next::dir =~ $_ } @ignore_dirs_re;
108113
};
109114
}
110115

@@ -147,12 +152,17 @@ sub _compile_file_filter {
147152
my $dont_ignore_dir_list = $opt->{no_ignore_dirs};
148153

149154
my %ignore_dir_set;
155+
my @ignore_dirs_re;
150156
my %dont_ignore_dir_set;
157+
my @dont_ignore_dirs_re;
151158

152159
foreach my $filter (@{ $ignore_dir_list }) {
153160
if ( $filter =~ /^(\w+):(.*)/ ) {
154161
if ( $1 eq 'is' ) {
155162
$ignore_dir_set{ $2 } = 1;
163+
}
164+
elsif ( $1 eq 'match') {
165+
push @ignore_dirs_re, $2;
156166
} else {
157167
Carp::croak( 'Non-is filters are not yet supported for --ignore-dir' );
158168
}
@@ -164,6 +174,9 @@ sub _compile_file_filter {
164174
if ( $filter =~ /^(\w+):(.*)/ ) {
165175
if ( $1 eq 'is' ) {
166176
$dont_ignore_dir_set{ $2 } = 1;
177+
}
178+
elsif ( $1 eq 'match') {
179+
push @dont_ignore_dirs_re, $2;
167180
} else {
168181
Carp::croak( 'Non-is filters are not yet supported for --ignore-dir' );
169182
}
@@ -196,6 +209,7 @@ sub _compile_file_filter {
196209

197210
my $is_ignoring = 0;
198211

212+
$is_ignoring = grep { $dirname =~ $_ } @ignore_dirs_re;
199213
foreach my $dir ( @dirs ) {
200214
if ( $ignore_dir_set{ $dir } ) {
201215
$is_ignoring = 1;
@@ -204,7 +218,7 @@ sub _compile_file_filter {
204218
$is_ignoring = 0;
205219
}
206220
}
207-
if ( $is_ignoring ) {
221+
if ( $is_ignoring && !grep { $dirname =~ $_ } @dont_ignore_dirs_re) {
208222
return 0;
209223
}
210224
}

0 commit comments

Comments
 (0)