git: 1070477cc8b7 - main - Fix remaining zgrep(1) wrapper script regressions
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 09 Feb 2025 18:45:06 UTC
The branch main has been updated by leres:
URL: https://cgit.FreeBSD.org/src/commit/?id=1070477cc8b7a88b1fd2b1ba810a1fff761799a1
commit 1070477cc8b7a88b1fd2b1ba810a1fff761799a1
Author: Craig Leres <leres@FreeBSD.org>
AuthorDate: 2025-02-08 21:19:54 +0000
Commit: Craig Leres <leres@FreeBSD.org>
CommitDate: 2025-02-09 18:45:03 +0000
Fix remaining zgrep(1) wrapper script regressions
Summary:
Fix short flags without whitespace, e.g:
zgrep -wefoo test
Fix multiple -e flags:
zgrep -e foo -e xxx test
Previously only the last pattern would be used.
Clean up possible leading blank in ${grep_args}.
Update comment: 2.51 -> 2.6.0
Add a test case for the last known zgrep wrapper issue: recursion
(-r) not implemented.
Reviewers: markj, kevans, ngie, bapt
Reviewed By: markj
Subscribers: imp
Differential Revision: https://reviews.freebsd.org/D48873
---
contrib/netbsd-tests/usr.bin/grep/t_grep.sh | 24 ++++++++++---
usr.bin/grep/zgrep.sh | 52 +++++++++++++++++++++++++----
2 files changed, 65 insertions(+), 11 deletions(-)
diff --git a/contrib/netbsd-tests/usr.bin/grep/t_grep.sh b/contrib/netbsd-tests/usr.bin/grep/t_grep.sh
index b1412a7a0715..c4ba9a9657db 100755
--- a/contrib/netbsd-tests/usr.bin/grep/t_grep.sh
+++ b/contrib/netbsd-tests/usr.bin/grep/t_grep.sh
@@ -221,8 +221,6 @@ zgrep_combined_flags_head()
}
zgrep_combined_flags_body()
{
- atf_expect_fail "known but unsolved zgrep wrapper script regression"
-
echo 'foo bar' > test
atf_check -o inline:"foo bar\n" zgrep -we foo test
@@ -278,8 +276,6 @@ zgrep_multiple_eflags_head()
}
zgrep_multiple_eflags_body()
{
- atf_expect_fail "known but unsolved zgrep wrapper script regression"
-
echo foobar > test
atf_check -o inline:"foobar\n" zgrep -e foo -e xxx test
@@ -940,6 +936,25 @@ zgrep_multiple_files_body()
echo bar > test2
atf_check -s exit:1 zgrep foo test1 test2
}
+
+atf_test_case zgrep_recursive
+zgrep_multiple_files_head()
+{
+ atf_set "descr" "Checks for zgrep wrapper recursion"
+}
+zgrep_recursive_body()
+{
+ atf_expect_fail "unimplemented zgrep wrapper script functionality"
+
+ mkdir -p tester1
+ echo foobar > tester1/test
+ atf_check -o inline:"tester1/test:foobar\n" zgrep -r foo tester1
+
+ mkdir -p tester2
+ echo foobar > tester2/test1
+ echo foobar > tester2/test2
+ atf_check -o inline:"tester2/test1:foobar\ntester2/test2:foobar\n" zgrep -r foo tester2
+}
# End FreeBSD
atf_init_test_cases()
@@ -996,5 +1011,6 @@ atf_init_test_cases()
atf_add_test_case mflag
atf_add_test_case mflag_trail_ctx
atf_add_test_case zgrep_multiple_files
+ atf_add_test_case zgrep_recursive
# End FreeBSD
}
diff --git a/usr.bin/grep/zgrep.sh b/usr.bin/grep/zgrep.sh
index d7a52dcad141..8bd630726647 100755
--- a/usr.bin/grep/zgrep.sh
+++ b/usr.bin/grep/zgrep.sh
@@ -74,7 +74,7 @@ esac
while [ $# -gt 0 -a ${endofopts} -eq 0 ]
do
case $1 in
- # from GNU grep-2.5.1 -- keep in sync!
+ # from GNU grep-2.6.0 -- keep in sync!
--)
shift
endofopts=1
@@ -85,6 +85,9 @@ do
shift
;;
--regexp=*)
+ if [ ${pattern_found} -ne 0 ]; then
+ grep_args="${grep_args} -e ${pattern}"
+ fi
pattern="${1#--regexp=}"
pattern_found=1
shift
@@ -100,20 +103,31 @@ do
grep_args="${grep_args} $1"
shift
;;
- -*[ABCDXdefm])
+ -[EFGHILOSUVabchilnopqsuvwxyz]*)
+ post="${1#-?}"
+ pre=${1%${post}}
+ grep_args="${grep_args} ${pre}"
+ shift
+ # Put back partial arg
+ set -- "-${post}" $*
+ ;;
+ -[ABCDdefm])
if [ $# -lt 2 ]
then
echo "${prg}: missing argument for $1 flag" >&2
exit 1
fi
case $1 in
- -*e)
+ -e)
+ if [ ${pattern_found} -ne 0 ]; then
+ grep_args="${grep_args} -e ${pattern}"
+ fi
pattern="$2"
pattern_found=1
shift 2
continue
;;
- -*f)
+ -f)
pattern_file=1
;;
*)
@@ -122,6 +136,27 @@ do
grep_args="${grep_args} $1 $2"
shift 2
;;
+ -[ABCDdefm]*)
+ post="${1#-e}"
+ case ${1} in
+ -e*)
+ if [ ${pattern_found} -ne 0 ]; then
+ grep_args="${grep_args} -e ${pattern}"
+ fi
+ pattern="${post}"
+ pattern_found=1
+ shift
+ continue
+ ;;
+ -f*)
+ pattern_file=1
+ ;;
+ *)
+ ;;
+ esac
+ grep_args="${grep_args} ${post}"
+ shift
+ ;;
-)
hyphen=1
shift
@@ -130,7 +165,7 @@ do
echo "${prg}: the ${1} flag is not currently supported" >&2
exit 1
;;
- -*)
+ -?)
grep_args="${grep_args} $1"
shift
;;
@@ -156,12 +191,15 @@ then
pattern_found=1
fi
+# Clean up possible leading blank
+grep_args="${grep_args# }"
+
# call grep ...
if [ $# -lt 1 ]
then
# ... on stdin
if [ ${pattern_file} -eq 0 ]; then
- ${cattool} ${catargs} - | ${grep} ${grep_args} -- "${pattern}" -
+ ${cattool} ${catargs} - | ${grep} ${grep_args} -e "${pattern}" -- -
else
${cattool} ${catargs} - | ${grep} ${grep_args} -- -
fi
@@ -176,7 +214,7 @@ else
for file; do
if [ ${pattern_file} -eq 0 ]; then
${cattool} ${catargs} -- "${file}" |
- ${grep} --label="${file}" ${grep_args} -- "${pattern}" -
+ ${grep} --label="${file}" ${grep_args} -e "${pattern}" -- -
else
${cattool} ${catargs} -- "${file}" |
${grep} --label="${file}" ${grep_args} -- -