d23e308
commit ceca37901783988204caaf40dff4623d535cc789
d23e308
Author:     Lasse Collin <lasse.collin@tukaani.org>
d23e308
AuthorDate: Wed Jun 11 20:43:28 2014 +0300
d23e308
Commit:     Lasse Collin <lasse.collin@tukaani.org>
d23e308
CommitDate: Wed Jun 11 20:43:28 2014 +0300
d23e308
d23e308
    xzgrep: exit 0 when at least one file matches.
d23e308
    
d23e308
    Mimic the original grep behavior and return exit_success when
d23e308
    at least one xz compressed file matches given pattern.
d23e308
    
d23e308
    Original bugreport:
d23e308
    https://bugzilla.redhat.com/show_bug.cgi?id=1108085
d23e308
    
d23e308
    Thanks to Pavel Raiskup for the patch.
d23e308
d23e308
diff --git a/src/scripts/xzgrep.in b/src/scripts/xzgrep.in
d23e308
index 951266b..018915f 100644
d23e308
--- a/src/scripts/xzgrep.in
d23e308
+++ b/src/scripts/xzgrep.in
d23e308
@@ -147,7 +147,9 @@ if test $# -eq 0; then
d23e308
 fi
d23e308
 
d23e308
 exec 3>&1
d23e308
-res=0
d23e308
+
d23e308
+# res=1 means that no file matched yet
d23e308
+res=1
d23e308
 
d23e308
 for i; do
d23e308
   case $i in
d23e308
@@ -195,8 +197,17 @@ for i; do
d23e308
     fi >&3 5>&-
d23e308
   )
d23e308
   r=$?
d23e308
+
d23e308
+  # fail occured previously, nothing worse can happen
d23e308
+  test $res -gt 1 && continue
d23e308
+
d23e308
   test "$xz_status" -eq 0 || test "$xz_status" -eq 2 \
d23e308
       || test "$(kill -l "$xz_status" 2> /dev/null)" = "PIPE" || r=2
d23e308
-  test $res -lt $r && res=$r
d23e308
+
d23e308
+  # still no match
d23e308
+  test $r -eq 1 && continue
d23e308
+
d23e308
+  # 0 == match, >=2 == fail
d23e308
+  res=$r
d23e308
 done
d23e308
 exit $res