svn commit: r322564 - in stable/11/usr.bin/grep: . tests

Kyle Evans kevans at FreeBSD.org
Wed Aug 16 01:45:54 UTC 2017


Author: kevans
Date: Wed Aug 16 01:45:53 2017
New Revision: 322564
URL: https://svnweb.freebsd.org/changeset/base/322564

Log:
  bsdgrep: Use implied working directory for -r if no directories are passed
  
  MFC r317050: bsdgrep: for -r, use the working directory if none specified
  
  This is more sensible than the previous behaviour of grepping stdin,
  and matches newer GNU grep behaviour.
  
  MFC r317300 (ngie): Only expect :grep_r_implied to pass with bsdgrep(1)
  
  The test fails with gnu grep from base and ports.
  
  MFC r319002 (ngie): :rgrep : use atf-check to check the exit code/save the
  output of grep -r instead of calling grep -r without it, and saving the
  output to a file
  
  This ensures that any errors thrown via grep -r are caught, not lost, and
  uses existing atf-sh idioms for saving files.
  
  PR:		216307
  Approved by:	emaste (mentor, blanket MFC)
  Relnotes:	yes

Added:
  stable/11/usr.bin/grep/tests/grep_freebsd_test.sh
     - copied, changed from r317050, head/usr.bin/grep/tests/grep_freebsd_test.sh
Modified:
  stable/11/usr.bin/grep/grep.c
  stable/11/usr.bin/grep/tests/Makefile
  stable/11/usr.bin/grep/util.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/usr.bin/grep/grep.c
==============================================================================
--- stable/11/usr.bin/grep/grep.c	Wed Aug 16 01:27:48 2017	(r322563)
+++ stable/11/usr.bin/grep/grep.c	Wed Aug 16 01:45:53 2017	(r322564)
@@ -739,7 +739,7 @@ main(int argc, char *argv[])
 	if ((aargc == 0 || aargc == 1) && !Hflag)
 		hflag = true;
 
-	if (aargc == 0)
+	if (aargc == 0 && dirbehave != DIR_RECURSE)
 		exit(!procfile("-"));
 
 	if (dirbehave == DIR_RECURSE)

Modified: stable/11/usr.bin/grep/tests/Makefile
==============================================================================
--- stable/11/usr.bin/grep/tests/Makefile	Wed Aug 16 01:27:48 2017	(r322563)
+++ stable/11/usr.bin/grep/tests/Makefile	Wed Aug 16 01:45:53 2017	(r322564)
@@ -2,6 +2,7 @@
 
 PACKAGE=	tests
 
+ATF_TESTS_SH+=	grep_freebsd_test
 NETBSD_ATF_TESTS_SH=	grep_test
 
 ${PACKAGE}FILES+=		d_basic.out

Copied and modified: stable/11/usr.bin/grep/tests/grep_freebsd_test.sh (from r317050, head/usr.bin/grep/tests/grep_freebsd_test.sh)
==============================================================================
--- head/usr.bin/grep/tests/grep_freebsd_test.sh	Mon Apr 17 13:22:39 2017	(r317050, copy source)
+++ stable/11/usr.bin/grep/tests/grep_freebsd_test.sh	Wed Aug 16 01:45:53 2017	(r322564)
@@ -25,11 +25,45 @@
 #
 # $FreeBSD$
 
+# What grep(1) are we working with?
+# - 0 : bsdgrep
+# - 1 : gnu grep 2.51 (base)
+# - 2 : gnu grep (ports)
+GREP_TYPE_BSD=0
+GREP_TYPE_GNU_FREEBSD=1
+GREP_TYPE_GNU=2
+GREP_TYPE_UNKNOWN=3
+
+grep_type()
+{
+	local grep_version=$(grep --version)
+
+	case "$grep_version" in
+	*"BSD grep"*)
+		return $GREP_TYPE_BSD
+		;;
+	*"GNU grep"*)
+		case "$grep_version" in
+		*2.5.1-FreeBSD*)
+			return $GREP_TYPE_GNU_FREEBSD
+			;;
+		*)
+			return $GREP_TYPE_GNU
+			;;
+		esac
+		;;
+	esac
+	atf_fail "unknown grep type: $grep_version"
+}
+
 atf_test_case grep_r_implied
 grep_r_implied_body()
 {
-	(cd "$(atf_get_srcdir)" && grep -r -e "test" < /dev/null) ||
-	    atf_skip "Implied working directory is not supported with your version of grep(1)"
+	grep_type
+	if [ $? -ne $GREP_TYPE_BSD ]; then
+		atf_skip "this test only works with bsdgrep(1)"
+	fi
+
 	(cd "$(atf_get_srcdir)" && grep -r --exclude="*.out" -e "test" .) > d_grep_r_implied.out
 
 	atf_check -s exit:0 -x \
@@ -43,8 +77,7 @@ rgrep_head()
 }
 rgrep_body()
 {
-	grep -r --exclude="*.out" -e "test" "$(atf_get_srcdir)" > d_grep_r_implied.out
-
+	atf_check -o save:d_grep_r_implied.out grep -r --exclude="*.out" -e "test" "$(atf_get_srcdir)"
 	atf_check -o file:d_grep_r_implied.out rgrep --exclude="*.out" -e "test" "$(atf_get_srcdir)"
 }
 

Modified: stable/11/usr.bin/grep/util.c
==============================================================================
--- stable/11/usr.bin/grep/util.c	Wed Aug 16 01:27:48 2017	(r322563)
+++ stable/11/usr.bin/grep/util.c	Wed Aug 16 01:45:53 2017	(r322564)
@@ -109,6 +109,7 @@ grep_tree(char **argv)
 	FTSENT *p;
 	int c, fts_flags;
 	bool ok;
+	const char *wd[] = { ".", NULL };
 
 	c = fts_flags = 0;
 
@@ -126,7 +127,9 @@ grep_tree(char **argv)
 
 	fts_flags |= FTS_NOSTAT | FTS_NOCHDIR;
 
-	if (!(fts = fts_open(argv, fts_flags, NULL)))
+	fts = fts_open((argv[0] == NULL) ?
+	    __DECONST(char * const *, wd) : argv, fts_flags, NULL);
+	if (fts == NULL)
 		err(2, "fts_open");
 	while ((p = fts_read(fts)) != NULL) {
 		switch (p->fts_info) {


More information about the svn-src-all mailing list