From aa17882425c882ce8142f5f15880aa238c1fa855 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 24 May 2014 14:06:29 -0700 Subject: [PATCH] grep: --exclude-dir=FOO/ now ignores the trailing slash Problem reported by Khaled Ziyaeen; see: http://bugs.gnu.org/17481 * NEWS, doc/grep.texi (File and Directory Selection): Document this. * src/grep.c (main): Implement this. * tests/include-exclude: Test this. --- NEWS | 5 +++++ doc/grep.texi | 4 ++-- src/grep.c | 1 + tests/include-exclude | 4 ++++ 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index bf31940..10b2d19 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,11 @@ GNU grep NEWS -*- outline -*- * Noteworthy changes in release ?.? (????-??-??) [?] +** Changes in behavior + + grep --exclude-dir='FOO/' now excludes the directory FOO. + Previously, the trailing slash meant the option was ineffective. + * Noteworthy changes in release 2.19 (2014-05-22) [stable] diff --git a/doc/grep.texi b/doc/grep.texi index feee0d8..c9417e5 100644 --- a/doc/grep.texi +++ b/doc/grep.texi @@ -668,8 +668,8 @@ under @option{--exclude}). @item address@hidden @opindex --exclude-dir @cindex exclude directories -Exclude directories matching the pattern @var{dir} from recursive -directory searches. +Skip any directory whose name matches the pattern @var{dir}, ignoring +any redundant trailing slashes in @var{dir}. @item -I Process a binary file as if it did not contain matching data; diff --git a/src/grep.c b/src/grep.c index ec955d8..6a2a029 100644 --- a/src/grep.c +++ b/src/grep.c @@ -2234,6 +2234,7 @@ main (int argc, char **argv) case EXCLUDE_DIRECTORY_OPTION: if (!excluded_directory_patterns) excluded_directory_patterns = new_exclude (); + strip_trailing_slashes (optarg); add_exclude (excluded_directory_patterns, optarg, EXCLUDE_WILDCARDS); break; diff --git a/tests/include-exclude b/tests/include-exclude index 28465cb..9c07139 100755 --- a/tests/include-exclude +++ b/tests/include-exclude @@ -36,6 +36,10 @@ grep -r --exclude-dir=dir . x > out || fail=1 sort out > k && mv k out compare exp-not-dir out || fail=1 +grep -r --exclude-dir=dir/ . x > out || fail=1 +sort out > k && mv k out +compare exp-not-dir out || fail=1 + # Test with a non-glob. grep -r --include=a . x > out || fail=1 # no need to sort -- 1.9.0