The branch main has been updated by leres:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=1070477cc8b7a88b1fd2b1ba810a1fff761799a1

commit 1070477cc8b7a88b1fd2b1ba810a1fff761799a1
Author:     Craig Leres <le...@freebsd.org>
AuthorDate: 2025-02-08 21:19:54 +0000
Commit:     Craig Leres <le...@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} -- -

Reply via email to