Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package build-compare for openSUSE:Factory 
checked in at 2022-03-09 18:46:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/build-compare (Old)
 and      /work/SRC/openSUSE:Factory/.build-compare.new.2349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "build-compare"

Wed Mar  9 18:46:26 2022 rev:120 rq:959841 version:20220307T115648.b5abdde

Changes:
--------
--- /work/SRC/openSUSE:Factory/build-compare/build-compare.changes      
2021-09-25 22:51:22.591343915 +0200
+++ /work/SRC/openSUSE:Factory/.build-compare.new.2349/build-compare.changes    
2022-03-11 11:40:44.534572361 +0100
@@ -1,0 +2,19 @@
+Fri Mar  4 12:34:56 UTC 2022 - o...@aepfle.de
+
+- handle -a also in same-build-result.sh
+- Find rpmlint.log in more places
+- fix logic error in appstream comparison
+- rework exit handling in same-build-result.sh
+- Fix result in case no rpmlint.log exist
+- remove count of checks and packages from rpmlint.log
+- remove Check time report from rpmlint.log
+- ELF diffing performance improvements
+- unpack packages in parallel
+- Add zstd handling
+
+-------------------------------------------------------------------
+Wed Feb 23 08:13:27 UTC 2022 - Stefan Seyfried <seife+...@b1-systems.com>
+
+- Add extra handling for KMP versions
+
+-------------------------------------------------------------------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ build-compare.spec ++++++
--- /var/tmp/diff_new_pack.xIzmpA/_old  2022-03-11 11:40:45.150573052 +0100
+++ /var/tmp/diff_new_pack.xIzmpA/_new  2022-03-11 11:40:45.154573057 +0100
@@ -21,7 +21,7 @@
 License:        GPL-2.0+
 Group:          Development/Tools/Building
 Url:            https://github.com/openSUSE/build-compare
-Version:        20210921T214418.86d06d9
+Version:        20220307T115648.b5abdde
 Release:        0
 Source1:        COPYING
 Source2:        same-build-result.sh

++++++ functions.sh ++++++
--- /var/tmp/diff_new_pack.xIzmpA/_old  2022-03-11 11:40:45.222573133 +0100
+++ /var/tmp/diff_new_pack.xIzmpA/_new  2022-03-11 11:40:45.226573137 +0100
@@ -141,23 +141,38 @@
 # - it is used as direntry below certain paths
 # - it is assigned to some variable in scripts, at the end of a line
 # - it is used in PROVIDES, at the end of a line
+#   - special-case KMP package:
+#     PROVIDES version_k.*-release at end of line, trim release
+#     [   23s] -acpi_call-kmp-default 8 1.2.2_k5.17.0_rc5_1.ga9b2c1d-6.110
+#     [   23s] +acpi_call-kmp-default 8 1.2.2_k5.17.0_rc5_1.ga9b2c1d-6.111
 # Trim name-version-release string:
 # - it is used in update-scripts which are called by libzypp
+#   - special-case KMP package:
+#     [   64s]  PREIN
+#     [   64s]  /bin/sh (none)  
/usr/lib/module-init-tools/kernel-scriptlets/kmp-pre --name 
"acpi_call-kmp-default" \
+#     [   64s] -  --version "1.2.2_k5.17.0_rc5_1.ga9b2c1d" --release "6.112" 
--kernelrelease "5.17.0-rc5-1.ga9b2c1d" \
+#     [   64s] +  --version "1.2.2_k5.17.0_rc5_1.ga9b2c1d" --release "6.113" 
--kernelrelease "5.17.0-rc5-1.ga9b2c1d" \
 function trim_release_old()
 {
+  local rel_regex_l=${version_release_old_regex_l##*-}
   sed -e "
   
/\(\/boot\|\/lib\/modules\|\/lib\/firmware\|\/usr\/src\|$version_release_old_regex_l\$\|$version_release_old_regex_l)\)/{s,$version_release_old_regex_l,@VERSION@-@RELEASE_LONG@,g;s,$version_release_old_regex_s,@VERSION@-@RELEASE_SHORT@,g}
   
s/\(\/var\/adm\/update-scripts\/\)${name_ver_rel_old_regex_l}\([^[:blank:]]\+\)/\1@NAME_VER_REL@\2/g
   
s/\(\/var\/adm\/update-messages\/\)${name_ver_rel_old_regex_l}\([^[:blank:]]\+\)/\1@NAME_VER_REL@\2/g
+  
s/\(^[^[:blank:]].*-kmp-.*[[:blank:]].*_k.*-\)${rel_regex_l}$/\1@RELEASE_LONG@/g
+  s/--release \"${rel_regex_l}\" --kernel/--release \"@RELEASE_LONG@\" 
--kernel/g
   /\/usr\/lib\/\.build-id/d
   "
 }
 function trim_release_new()
 {
+  local rel_regex_l=${version_release_new_regex_l##*-}
   sed -e "
   
/\(\/boot\|\/lib\/modules\|\/lib\/firmware\|\/usr\/src\|$version_release_new_regex_l\$\|$version_release_new_regex_l)\)/{s,$version_release_new_regex_l,@VERSION@-@RELEASE_LONG@,g;s,$version_release_new_regex_s,@VERSION@-@RELEASE_SHORT@,g}
   
s/\(\/var\/adm\/update-scripts\/\)${name_ver_rel_new_regex_l}\([^[:blank:]]\+\)/\1@NAME_VER_REL@\2/g
   
s/\(\/var\/adm\/update-messages\/\)${name_ver_rel_new_regex_l}\([^[:blank:]]\+\)/\1@NAME_VER_REL@\2/g
+  
s/\(^[^[:blank:]].*-kmp-.*[[:blank:]].*_k.*-\)${rel_regex_l}$/\1@RELEASE_LONG@/g
+  s/--release \"${rel_regex_l}\" --kernel/--release \"@RELEASE_LONG@\" 
--kernel/g
   /\/usr\/lib\/\.build-id/d
   "
 }
@@ -280,16 +295,15 @@
 function cmp_rpm_meta ()
 {
     local RES
-    local file1 file2
     local f
     local sh=$1
     local oldrpm=$2
     local newrpm=$3
-
-    file1=`mktemp`
-    file2=`mktemp`
-    rpm_meta_old=`mktemp`
-    rpm_meta_new=`mktemp`
+    local tmpdir="$(mktemp -d)"
+    local file1="$tmpdir/file1"
+    local file2="$tmpdir/file2"
+    local rpm_meta_old="$tmpdir/rpm-meta-old"
+    local rpm_meta_new="$tmpdir/rpm-meta-new"
 
     collect_rpm_querytags
     set_rpm_meta_global_variables $oldrpm
@@ -303,6 +317,7 @@
     else
       ls -l $rpm_meta_old $rpm_meta_new
       echo "empty 'rpm -qp' output..."
+      rm -rf "$tmpdir"
       return 1
     fi
 
@@ -317,17 +332,20 @@
 
     # Check the whole spec file at first, return 0 immediately if they
     # are the same.
-    cat $rpm_meta_old | trim_release_old > $file1
-    cat $rpm_meta_new | trim_release_new > $file2
+    trim_release_old < $rpm_meta_old > $file1
+    trim_release_new < $rpm_meta_new > $file2
     echo "comparing the rpm tags of $name_new"
-    if diff --label old-rpm-tags --label new-rpm-tags -au $file1 $file2; then
-      rm $file1 $file2 $rpm_meta_old $rpm_meta_new
+    if diff --speed-large-files --label old-rpm-tags --label new-rpm-tags -au0 
$file1 $file2; then
+      rm -rf "$tmpdir"
       return 0
     fi
 
     get_value QF_TAGS $rpm_meta_old > $file1
     get_value QF_TAGS $rpm_meta_new > $file2
-    comp_file rpmtags $file1 $file2 $rpm_meta_old $rpm_meta_new || return 1
+    if ! comp_file rpmtags $file1 $file2 $rpm_meta_old $rpm_meta_new; then
+      rm -rf "$tmpdir"
+      return 1
+    fi
 
     # This might happen when?!
     echo "comparing RELEASE"
@@ -337,6 +355,7 @@
           # Make sure all kernel packages have the same %RELEASE
           echo "release prefix mismatch"
           if test -z "$check_all"; then
+            rm -rf "$tmpdir"
             return 1
           fi
           difffound=1
@@ -348,16 +367,25 @@
 
     get_value QF_PROVIDES $rpm_meta_old | trim_release_old | sort > $file1
     get_value QF_PROVIDES $rpm_meta_new | trim_release_new | sort > $file2
-    comp_file PROVIDES $file1 $file2 $rpm_meta_old $rpm_meta_new || return 1
+    if ! comp_file PROVIDES $file1 $file2 $rpm_meta_old $rpm_meta_new; then
+      rm -rf "$tmpdir"
+      return 1
+    fi
 
     get_value QF_SCRIPT $rpm_meta_old | trim_release_old > $file1
     get_value QF_SCRIPT $rpm_meta_new | trim_release_new > $file2
-    comp_file scripts $file1 $file2 $rpm_meta_old $rpm_meta_new || return 1
+    if ! comp_file scripts $file1 $file2 $rpm_meta_old $rpm_meta_new; then
+      rm -rf "$tmpdir"
+      return 1
+    fi
 
     # First check the file attributes and later the md5s
     get_value QF_FILELIST $rpm_meta_old | trim_release_old > $file1
     get_value QF_FILELIST $rpm_meta_new | trim_release_new > $file2
-    comp_file filelist $file1 $file2 $rpm_meta_old $rpm_meta_new || return 1
+    if ! comp_file filelist $file1 $file2 $rpm_meta_old $rpm_meta_new; then
+      rm -rf "$tmpdir"
+      return 1
+    fi
 
     # now the md5sums. if they are different, we check more detailed
     # if there are different filenames, we will already have aborted before
@@ -392,8 +420,8 @@
         echo mv -v \"new/${f}\" \"new/`echo ${f} | trim_release_new`\"
       done >> "${sh}"
     fi
-    #
-    rm $file1 $file2
+
+    rm -rf "$tmpdir"
     [ "$difffound" = 1 ] && RES=1
     return $RES
 }
@@ -404,9 +432,9 @@
     version_release_new="`sed -ne 's/^Version: \(.*\)/\1/p' $2/control`"
     name_ver_rel_new="`sed -n -e 's/^Package: \(.*\)/\1/p' $2/control`-`sed -n 
-e 's/^Version: \(.*\)/\1/p' $2/control`"
     set_regex
-    cat $1/control | trim_release_old > $1/control.fixed
+    trim_release_old < $1/control > $1/control.fixed
     mv $1/control.fixed $1/control
-    cat $2/control | trim_release_new > $2/control.fixed
+    trim_release_new < $2/control > $2/control.fixed
     mv $2/control.fixed $2/control
 }
 

++++++ pkg-diff.sh ++++++
--- /var/tmp/diff_new_pack.xIzmpA/_old  2022-03-11 11:40:45.242573155 +0100
+++ /var/tmp/diff_new_pack.xIzmpA/_new  2022-03-11 11:40:45.246573159 +0100
@@ -55,7 +55,7 @@
     s/[0-9a-f]\+ </</
     s/^<\(.*\)>:/\1:/
     s/<\(.*\)+0x[0-9a-f]\+>/<\1 + ofs>/
-  ' 
+  '
 }
 
 filter_xenefi() {
@@ -318,6 +318,13 @@
           xz -d new/$file.xz &
           wait
           ;;
+        zst)
+          mv old/$file{,.zst}
+          mv new/$file{,.zst}
+          zstd -d old/$file.zst &
+          zstd -d new/$file.zst &
+          wait
+          ;;
       esac
       ftype=`/usr/bin/file old/$file | sed 's@^[^:]\+:[[:blank:]]*@@'`
       case $ftype in
@@ -414,7 +421,7 @@
     *.dvi)
       filter_generic dvi
       ;;
-    *png)
+    *.png)
       # Try to remove timestamps, only if convert from ImageMagick is installed
       if [[ $(type -p convert) ]]; then
         filter_generic png
@@ -599,7 +606,7 @@
     *.ps)
       filter_generic ps
       ;;
-    *pdf)
+    *.pdf)
       filter_generic pdf
       ;;
     */linuxrc.config)
@@ -858,7 +865,7 @@
       compare_archive "${file}" 'archive_squashfs'
       return $?
        ;;
-    *.tar|*.tar.bz2|*.tar.gz|*.tgz|*.tbz2)
+    *.tar|*.tar.bz2|*.tar.gz|*.tgz|*.tbz2|*.tar.zst)
       compare_archive "${file}" 'archive_tar'
       return $?
       ;;
@@ -866,30 +873,36 @@
       compare_archive "${file}" 'archive_zip'
       return $?
       ;;
-     *.bz2)
-        bunzip2 -c old/$file > old/${file/.bz2/}
-        bunzip2 -c new/$file > new/${file/.bz2/}
-        check_single_file ${file/.bz2/}
-        return $?
-        ;;
-     *.gz)
-        gunzip -c old/$file > old/${file/.gz/}
-        gunzip -c new/$file > new/${file/.gz/}
-        check_single_file ${file/.gz/}
-        return $?
-        ;;
-     *.rpm)
-       $self_script -a old/$file new/$file
-        return $?
-        ;;
+    *.bz2)
+      bunzip2 -c old/$file > old/${file/.bz2/}
+      bunzip2 -c new/$file > new/${file/.bz2/}
+      check_single_file ${file/.bz2/}
+      return $?
+      ;;
+    *.gz)
+      gunzip -c old/$file > old/${file/.gz/}
+      gunzip -c new/$file > new/${file/.gz/}
+      check_single_file ${file/.gz/}
+      return $?
+      ;;
+    *.zst)
+      zstd -dc old/$file > old/${file/.zst/}
+      zstd -dc new/$file > new/${file/.zst/}
+      check_single_file ${file/.zst/}
+      return $?
+      ;;
+    *.rpm)
+      $self_script -a old/$file new/$file
+      return $?
+      ;;
   esac
 
   ftype=`/usr/bin/file "old/$file" | sed -e 's@^[^:]\+:[[:blank:]]*@@' -e 
's@[[:blank:]]*$@@'`
   case $ftype in
-     PE32\ executable*Mono\/\.Net\ assembly*)
-       wprint "PE32 Mono/.Net assembly: $file"
-       if [ -x /usr/bin/monodis ] ; then
-         monodis "old/$file" 2>/dev/null|sed -e 's/GUID = {.*}/GUID = { 42 
}/;'> ${file1}
+    PE32\ executable*Mono\/\.Net\ assembly*)
+      wprint "PE32 Mono/.Net assembly: $file"
+      if [ -x /usr/bin/monodis ] ; then
+        monodis "old/$file" 2>/dev/null|sed -e 's/GUID = {.*}/GUID = { 42 
}/;'> ${file1}
          monodis "new/$file" 2>/dev/null|sed -e 's/GUID = {.*}/GUID = { 42 
}/;'> ${file2}
          if ! cmp -s "${file1}" "${file2}"; then
            wprint "$file differs ($ftype)"
@@ -909,207 +922,184 @@
     set?id\ ELF*[LM]SB\ shared\ object*|\
     ELF*[LM]SB\ pie\ executable*|\
     set?id\ ELF*[LM]SB\ pie\ executable*)
-      diff --speed-large-files --unified \
-        --label "old $file (disasm)" \
-        --label "new $file (disasm)" \
-        <( $OBJDUMP -d --no-show-raw-insn old/$file |
-          filter_disasm |
-          sed -e "s,old/,," ;
-          echo "${PIPESTATUS[@]}" > $file1
-          ) \
-        <( $OBJDUMP -d --no-show-raw-insn new/$file |
-          filter_disasm |
-          sed -e "s,new/,," ;
-          echo "${PIPESTATUS[@]}" > $file2
-          ) > $dfile
-      ret=$?
-
-      failed=
+      local sections=($(
+      $OBJDUMP -s new/$file |
+        sed -n --regexp-extended -e '
+          /Contents of section .*:/ {
+            s,.* (.*):,-j \1,g
+            /\.build-id/d
+            /\.gnu_debuglink/d
+            /\.gnu_debugdata/d
+            p
+          }
+        '))
+      ($OBJDUMP -s ${sections[@]} old/$file |
+        sed -e "s,old/,,"  ; echo "${PIPESTATUS[@]}" > $file1 ) > 
old/$file.objdump &
+      ($OBJDUMP -s ${sections[@]} new/$file |
+        sed -e "s,new/,,"  ; echo "${PIPESTATUS[@]}" > $file2 ) > 
new/$file.objdump &
+      wait
       read i < ${file1}
       pipestatus=( $i )
       objdump_failed="${pipestatus[0]}"
-      i=0
-      while test $i -lt ${#pipestatus[@]}
-      do
-        if test "${pipestatus[$i]}" != "0"
-        then
-          wprint "ELF: pipe command #$i failed with ${pipestatus[$i]} for 
old/$file"
-          failed='failed'
-        fi
-        : $(( i++ ))
-      done
+      if [[ ${pipestatus[*]} =~ [1-9] ]]
+      then
+        wprint "ELF section: pipe command failed for old/$file"
+        elfdiff='failed'
+      fi
       read i < ${file2}
       pipestatus=( $i )
       objdump_failed="${objdump_failed}${pipestatus[0]}"
-      i=0
-      while test $i -lt ${#pipestatus[@]}
-      do
-        if test "${pipestatus[$i]}" != "0"
+      if [[ ${pipestatus[*]} =~ [1-9] ]]
+      then
+        wprint "ELF section: pipe command failed for new/$file"
+        elfdiff='failed'
+      fi
+      if test -z "${elfdiff}"
+      then
+        diff --speed-large-files --unified \
+          --label "old $file (objdump)" \
+          --label "new $file (objdump)" \
+          old/$file.objdump new/$file.objdump > $dfile
+        ret=$?
+        if test "$ret" != "0"
         then
-          wprint "ELF: pipe command #$i failed with ${pipestatus[$i]} for 
new/$file"
-          failed='failed'
+          wprint "$file differs in ELF sections"
+          $buildcompare_head $dfile
+          elfdiff='elfdiff'
         fi
-        : $(( i++ ))
-      done
-
-      if test "${objdump_failed}" != "00" || test -n "${failed}"
+      fi
+      if test -z "$elfdiff"
+      then
+        rm old/$file.objdump new/$file.objdump &
+        return 0
+      fi
+      watchdog_touch
+      elfdiff=
+      ($OBJDUMP -d --no-show-raw-insn old/$file | filter_disasm |
+        sed -e "s,^old/[^:]\+,,"  ; echo "${PIPESTATUS[@]}" > $file1 ) > 
old/$file.objdump &
+      ($OBJDUMP -d --no-show-raw-insn new/$file | filter_disasm |
+        sed -e "s,^new/[^:]\+,,"  ; echo "${PIPESTATUS[@]}" > $file2 ) > 
new/$file.objdump &
+      wait
+      read i < ${file1}
+      pipestatus=( $i )
+      objdump_failed="${objdump_failed}${pipestatus[0]}"
+      if [[ ${pipestatus[*]} =~ [1-9] ]]
+      then
+        wprint "ELF disassembly: pipe command failed for old/$file"
+        elfdiff='failed'
+      fi
+      read i < ${file2}
+      pipestatus=( $i )
+      objdump_failed="${objdump_failed}${pipestatus[0]}"
+      if [[ ${pipestatus[*]} =~ [1-9] ]]
+      then
+        wprint "ELF disassembly: pipe command failed for new/$file"
+        elfdiff='failed'
+      fi
+      if test ${objdump_failed} -gt 0 || test -n "${elfdiff}"
       then
         # objdump had no idea how to handle it
+        rm old/$file.objdump new/$file.objdump &
         if diff_two_files; then
           return 0
         fi
         return 1
       fi
-
       elfdiff=
+      diff --speed-large-files --unified \
+        --label "old $file (disasm)" \
+        --label "new $file (disasm)" \
+        old/$file.objdump new/$file.objdump > $dfile
+      ret=$?
+      rm old/$file.objdump new/$file.objdump &
       if test "$ret" != "0"
       then
         wprint "$file differs in assembler output"
         $buildcompare_head $dfile
         elfdiff='elfdiff'
+      else
+        watchdog_touch
       fi
-
-      sections="$(
-        $OBJDUMP -s new/$file |
-        sed -n --regexp-extended -e '
-          /Contents of section .*:/ {
-            s,.* (.*):,\1,g
-            /\.build-id/d
-            /\.gnu_debuglink/d
-            /\.gnu_debugdata/d
-            p
-          }
-        '
-        )"
-      for section in $sections
-      do
-        diff --unified \
-          --label "old $file (objdump)" \
-          --label "new $file (objdump)" \
-          <( $OBJDUMP -s -j $section old/$file |
-              sed -e "s,^old/,," ;
-              echo "${PIPESTATUS[@]}" > $file1) \
-          <( $OBJDUMP -s -j $section new/$file |
-            sed -e "s,^new/,," ;
-            echo "${PIPESTATUS[@]}" > $file2
-            ) > $dfile
-        ret=$?
-        failed=
-        read i < ${file1}
-        pipestatus=( $i )
-        objdump_failed="${pipestatus[0]}"
-        i=0
-        while test $i -lt ${#pipestatus[@]}
-        do
-          if test "${pipestatus[$i]}" != "0"
-          then
-            wprint "ELF section: pipe command #$i failed with 
${pipestatus[$i]} for old/$file"
-            failed='failed'
-          fi
-          : $(( i++ ))
-        done
-        read i < ${file2}
-        pipestatus=( $i )
-        objdump_failed="${objdump_failed}${pipestatus[0]}"
-        i=0
-        while test $i -lt ${#pipestatus[@]}
-        do
-          if test "${pipestatus[$i]}" != "0"
-          then
-            wprint "ELF section: pipe command #$i failed with 
${pipestatus[$i]} for new/$file"
-            failed='failed'
-          fi
-          : $(( i++ ))
-        done
-        if test -n "${failed}"
-        then
-          elfdiff='elfdiff'
-          break
-        fi
-        if test "$ret" != "0"
-        then
-          wprint "$file differs in ELF section $section"
-          $buildcompare_head $dfile
-          elfdiff='elfdiff'
-        else
-          watchdog_touch
-        fi
-      done
-      if test -n "$elfdiff"; then
+      if test -n "$elfdiff"
+      then
         return 1
       fi
+      ;;
+    *ASCII*|*text*)
+      if ! cmp -s "old/$file" "new/$file" ; then
+        wprint "$file differs ($ftype)"
+        diff -u "old/$file" "new/$file" | $buildcompare_head
+        return 1
+      fi
+      ;;
+    directory|setuid\ directory|setuid,\ directory|sticky,\ directory)
+      # tar might package directories - ignore them here
       return 0
       ;;
-     *ASCII*|*text*)
-       if ! cmp -s "old/$file" "new/$file"; then
-         wprint "$file differs ($ftype)"
-         diff -u "old/$file" "new/$file" | $buildcompare_head
-         return 1
-       fi
-       ;;
-     directory|setuid\ directory|setuid,\ directory|sticky,\ directory)
-       # tar might package directories - ignore them here
-       return 0
-       ;;
-     bzip2\ compressed\ data*)
-       if ! check_compressed_file "$file" "bz2"; then
-           return 1
-       fi
-       ;;
-     gzip\ compressed\ data*)
-       if ! check_compressed_file "$file" "gzip"; then
-           return 1
-       fi
-       ;;
-     XZ\ compressed\ data*)
-       if ! check_compressed_file "$file" "xz"; then
-           return 1
-       fi
-       ;;
+    bzip2\ compressed\ data*)
+      if ! check_compressed_file "$file" "bz2" ; then
+        return 1
+      fi
+      ;;
+    gzip\ compressed\ data*)
+      if ! check_compressed_file "$file" "gzip" ; then
+        return 1
+      fi
+      ;;
+    XZ\ compressed\ data*)
+      if ! check_compressed_file "$file" "xz" ; then
+        return 1
+      fi
+      ;;
+    Zstandard\ compressed\ data*)
+      if ! check_compressed_file "$file" "zst" ; then
+        return 1
+      fi
+      ;;
     Zip\ archive\ data,*)
       if ! compare_archive "${file}" 'archive_zip' ; then
         return 1
       fi
       ;;
-     POSIX\ tar\ archive)
-          mv old/$file{,.tar}
-          mv new/$file{,.tar}
-          if ! check_single_file ${file}.tar; then
-            return 1
-          fi
-       ;;
-     cpio\ archive)
-          mv old/$file{,.cpio}
-          mv new/$file{,.cpio}
-          if ! check_single_file ${file}.cpio; then
-            return 1
-          fi
-     ;;
-     Squashfs\ filesystem,*)
-        wprint "$file ($ftype)"
-        mv old/$file{,.squashfs}
-        mv new/$file{,.squashfs}
-        if ! check_single_file ${file}.squashfs; then
-          return 1
-        fi
-     ;;
-     broken\ symbolic\ link\ to\ *|symbolic\ link\ to\ *)
-       readlink "old/$file" > $file1
-       readlink "new/$file" > $file2
-       if ! diff -u $file1 $file2; then
-         wprint "symlink target for $file differs"
-         return 1
-       fi
-       ;;
-     block\ special\ *)
-     ;;
-     character\ special\ *)
-     ;;
-     *)
-       if ! diff_two_files; then
-           return 1
-       fi
-       ;;
+    POSIX\ tar\ archive)
+      mv old/$file{,.tar}
+      mv new/$file{,.tar}
+      if ! check_single_file ${file}.tar; then
+        return 1
+      fi
+      ;;
+    cpio\ archive)
+      mv old/$file{,.cpio}
+      mv new/$file{,.cpio}
+      if ! check_single_file ${file}.cpio; then
+        return 1
+      fi
+      ;;
+    Squashfs\ filesystem,*)
+      wprint "$file ($ftype)"
+      mv old/$file{,.squashfs}
+      mv new/$file{,.squashfs}
+      if ! check_single_file ${file}.squashfs; then
+        return 1
+      fi
+      ;;
+    broken\ symbolic\ link\ to\ *|symbolic\ link\ to\ *)
+      readlink "old/$file" > $file1
+      readlink "new/$file" > $file2
+      if ! diff -u $file1 $file2; then
+        wprint "symlink target for $file differs"
+        return 1
+      fi
+      ;;
+    block\ special\ *)
+      ;;
+    character\ special\ *)
+      ;;
+    *)
+      if ! diff_two_files; then
+        return 1
+      fi
+      ;;
   esac
   return 0
 }
@@ -1211,8 +1201,9 @@
 esac
 
 wprint "Extracting packages"
-unpackage $oldpkg $dir/old
-unpackage $newpkg $dir/new
+unpackage $oldpkg $dir/old &
+unpackage $newpkg $dir/new &
+wait
 
 case $oldpkg in
   *.deb|*.ipk)
@@ -1241,12 +1232,12 @@
 # preserve cmp_rpm_meta result for check_all runs
 ret=$RES
 for file in "${files[@]}"; do
-   if ! check_single_file "$file"; then
-       ret=1
-       if test -z "$check_all"; then
-           break
-       fi
-   fi
+  if ! check_single_file "$file"; then
+    ret=1
+    if test -z "$check_all"; then
+      break
+    fi
+  fi
 done
 
 if [ "$PROC_MOUNTED" -eq "1" ]; then
@@ -1255,7 +1246,7 @@
 fi
 
 if test "$ret" = 0; then
-     echo "Package content is identical"
+  echo "Package content is identical"
 fi
 exit $ret
 # vim: tw=666 ts=2 shiftwidth=2 et

++++++ same-build-result.sh ++++++
--- /var/tmp/diff_new_pack.xIzmpA/_old  2022-03-11 11:40:45.266573182 +0100
+++ /var/tmp/diff_new_pack.xIzmpA/_new  2022-03-11 11:40:45.266573182 +0100
@@ -14,6 +14,11 @@
 CMPSCRIPT=${0%/*}/pkg-diff.sh
 SCMPSCRIPT=${0%/*}/srpm-check.sh
 
+declare -a exit_code
+# exit_code[0]='' # binaries_differ
+# exit_code[1]='' # rpmlint_differs
+# exit_code[2]='' # appdata_differs
+# exit_code[3]='' # srcrpm_differs
 file1=`mktemp`
 file2=`mktemp`
 _x() {
@@ -21,6 +26,31 @@
 }
 trap _x EXIT
 #
+remove_check_time_report() {
+  local f=$1
+  awk '
+    BEGIN {
+      ctr_seen=0;
+    }
+    /Check time report .*:$/ {
+      ctr_seen=1;
+      next;
+    }
+    /TOTAL[[:blank:]]+[0-9]/ {
+      if (ctr_seen == 1) {
+        ctr_seen=0;
+        next;
+      }
+    }
+    {
+      if (ctr_seen == 1) {
+        next;
+      }
+      print $0;
+    }
+  ' < "${f}"
+}
+#
 check_all=
 if test "$1" = "-a"
 then
@@ -65,7 +95,13 @@
 fi
 
 echo "compare $osrpm $nsrpm"
-bash $SCMPSCRIPT "$osrpm" "$nsrpm" || exit 1
+if bash $SCMPSCRIPT "$osrpm" "$nsrpm"
+then
+  : src.rpm identical
+else
+  test -z "${check_all}" && exit 1
+  exit_code[3]='srcrpm_differs'
+fi
 
 # technically we should not all exclude all -32bit but filter for different 
archs,
 # like done with -x86
@@ -96,7 +132,6 @@
 ver_rel1=$(rpm -qp --nodigest --nosignature --qf "%{VERSION}-%{RELEASE}" 
"${OLDRPMS[0]}"|sed -e 's/\./\\./g')
 ver_rel2=$(rpm -qp --nodigest --nosignature --qf "%{VERSION}-%{RELEASE}" 
"${NEWRPMS[0]}"|sed -e 's/\./\\./g')
 
-SUCCESS=1
 rpmqp='rpm -qp --qf %{NAME} --nodigest --nosignature '
 for opac in ${OLDRPMS[*]}; do
   npac=${NEWRPMS[0]}
@@ -113,7 +148,7 @@
       echo "skipping -debuginfo package"
     ;;
     *)
-      bash $CMPSCRIPT $check_all "$opac" "$npac" || SUCCESS=0
+      bash $CMPSCRIPT $check_all "$opac" "$npac" || 
exit_code[0]='binaries_differ'
     ;;
   esac
 done
@@ -123,28 +158,38 @@
   exit 1
 fi
 
+OTHERDIR=
 # Compare rpmlint.log files
 if test -d /home/abuild/rpmbuild/OTHER; then
   OTHERDIR=/home/abuild/rpmbuild/OTHER
 elif test -d /usr/src/packages/OTHER; then
   OTHERDIR=/usr/src/packages/OTHER
 else
-  echo "no OTHERDIR"
-  OTHERDIR=
+  for newdir in $NEWDIRS
+  do
+    test -f "${newdir}/rpmlint.log" || continue
+    OTHERDIR="${newdir}"
+    break
+  done
+  test -n "$OTHERDIR" || echo "no OTHERDIR"
 fi
 
 if test -n "$OTHERDIR"; then
-  if test -e $OLDDIR/rpmlint.log -a -e $OTHERDIR/rpmlint.log; then
-    echo "comparing $OLDDIR/rpmlint.log and $OTHERDIR/rpmlint.log"
+  old_log=$OLDDIR/rpmlint.log
+  new_log=$OTHERDIR/rpmlint.log
+  if test -e ${old_log} && test -e ${new_log} ; then
+    echo "comparing ${old_log} and ${new_log}"
+    # Remove --time-report from rpmlint
     # Sort the files first since the order of messages is not deterministic
     # Remove release from files
-    sort -u $OLDDIR/rpmlint.log|sed -e "s,$ver_rel1,@VERSION@-@RELEASE@,g" -e 
"s|/tmp/rpmlint\..*spec|.spec|g" > $file1
-    sort -u $OTHERDIR/rpmlint.log|sed -e "s,$ver_rel2,@VERSION@-@RELEASE@,g" 
-e "s|/tmp/rpmlint\..*spec|.spec|g"  > $file2
+    remove_check_time_report ${old_log}|sort -u|sed -e 
"s,$ver_rel1,@VERSION@-@RELEASE@,g" -e "s|/tmp/rpmlint\..*spec|.spec|g" > $file1
+    remove_check_time_report ${new_log}|sort -u|sed -e 
"s,$ver_rel2,@VERSION@-@RELEASE@,g" -e "s|/tmp/rpmlint\..*spec|.spec|g" > $file2
     # Remove odd warning about not-hardlinked files
     # Remove odd warning about data and time, it comes and goes
     # Remove warning about python mtime mismatch, a republish will not help
     # Remove odd warning about filenames, they contain VERSION-RELEASE
     # Remove durations from progress reports
+    # Remove odd output about number of checks and packages
     sed -i -e "
     /: W: files-duplicate /d
     /: W: file-contains-date-and-time /d
@@ -152,37 +197,46 @@
     /: W: filename-too-long-for-joliet /d
     /: I: \(filelist-initialization\|check-completed\) /s| [0-9]\+\.[0-9] s| 
x.x s|
     s/; has taken [0-9]\+\.[0-9] s/; has taken x.x s/
+    /^checks: [0-9]\+, packages: [0-9]\+/d
     " $file1 $file2
     if ! cmp -s $file1 $file2; then
       echo "rpmlint.log files differ:"
       diff -u $file1 $file2 |head -n 20
-      SUCCESS=0
+      exit_code[1]='rpmlint_differs'
     fi
     rm $file1 $file2
-  elif test -e $OTHERDIR/rpmlint.log; then
-    echo "rpmlint.log is new"
-    SUCCESS=0
+  else
+    if test -e "${new_log}"
+    then
+      exit_code[1]='rpmlint_new'
+      echo "rpmlint.log is new"
+    elif test -e "${old_log}"
+    then
+      exit_code[1]='rpmlint_old'
+      echo "rpmlint.log disappeared"
+    else
+      echo "No rpmlint.log available"
+    fi
   fi
 
   appdatas=$(cd $OTHERDIR && find . -name "*-appdata.xml")
   for xml in $appdatas; do
     # compare appstream data
-    if test -e $OLDDIR/$xml -a -e $OTHERDIR/$xml; then
+    if test -e $OLDDIR/$xml && test -e $OTHERDIR/$xml; then
       file1=$OLDDIR/$xml
       file2=$OTHERDIR/$xml
       if ! cmp -s $file1 $file2; then
         echo "$xml files differ:"
         diff -u0 $file1 $file2 |head -n 20
-        SUCCESS=0
+        exit_code[2]='appdata_differs'
       fi
     elif test -e $OTHERDIR/$xml; then
       echo "$xml is new"
-      SUCCESS=0
+      exit_code[2]='appdata_new'
     fi
   done
 fi
-
-if test $SUCCESS -eq 0; then
+if test -n "${exit_code[*]}"; then
   exit 1
 fi
 echo 'compare validated build as identical !'

++++++ srpm-check.sh ++++++
--- /var/tmp/diff_new_pack.xIzmpA/_old  2022-03-11 11:40:45.286573205 +0100
+++ /var/tmp/diff_new_pack.xIzmpA/_new  2022-03-11 11:40:45.290573209 +0100
@@ -1,10 +1,11 @@
 #!/bin/bash
 #
 # Copyright (c) 2009, 2010 SUSE Linux Product GmbH, Germany.
+# Copyright (c) 2022 SUSE LLC
 # Licensed under GPL v2, see COPYING file for details.
 #
-# Written by Michael Matz and Stephan Coolo
-# Enhanced by Andreas Jaeger
+# Written by Michael Matz and Stephan Kulow
+# Enhanced by Andreas Jaeger and Dirk M??ller
 
 # Compare two source RPMs
 
@@ -18,21 +19,16 @@
 esac
 
 if test "$#" != 2; then
-   echo "usage: $0 [-a|--check-all] old.rpm new.rpm"
-   exit 1
+  echo "usage: $0 [-a|--check-all] old.rpm new.rpm"
+  exit 1
 fi
 
 source $FUNCTIONS
 
-oldrpm=`readlink -f $1`
-newrpm=`readlink -f $2`
+oldrpm=$(readlink -f $1)
+newrpm=$(readlink -f $2)
 rename_script=
 
-# Get version-release from first RPM and keep for rpmlint check
-# Remember to quote the "." for future regexes
-ver_rel_old=$(rpm -qp --nodigest --nosignature --qf "%{RELEASE}" 
"${oldrpm}"|sed -e 's/\./\\./g')
-ver_rel_new=$(rpm -qp --nodigest --nosignature --qf "%{RELEASE}" 
"${newrpm}"|sed -e 's/\./\\./g')
-
 # For source RPMs, we can just check the metadata in the spec file
 # if those are not the same, the source RPM has changed and therefore 
 # the resulting files are needed.
@@ -59,41 +55,38 @@
 # Now check that only the spec file has a changed release number and
 # nothing else
 
-dir=`mktemp -d`
-unpackage $oldrpm $dir/old
-unpackage $newrpm $dir/new
+dir=$(mktemp -d)
+unpackage $oldrpm $dir/old &
+unpackage $newrpm $dir/new &
 cd $dir
+wait
 
 check_single_file()
 { 
   local file=$1
   case $file in
     *.spec)
-       sed -i -e 's,^Release:.*$,Release: @RELEASE@,' old/$file
-       sed -i -e 's,^Release:.*$,Release: @RELEASE@,' new/$file
-       if ! cmp -s old/$file new/$file; then
-         echo "$file differs (spec file)"
-         diff -u old/$file new/$file | head -n 20
-         return 1
-       fi
-       return 0
-       ;;
+      sed -i -e 's,^Release:.*$,Release: @RELEASE@,' old/$file
+      sed -i -e 's,^Release:.*$,Release: @RELEASE@,' new/$file
+      diff --speed-large-files -su0 old/$file new/$file | head -n 20
+      return "${PIPESTATUS[0]}"
+      ;;
     *)
-       echo "$file differs"
-       # Nothing else should be changed
-       ;;
-   esac
-   return 1
+      echo "$file differs"
+      # Nothing else should be changed
+      ;;
+  esac
+  return 1
 }
 
 ret=0
 for file in "${files[@]}"; do
-   if ! check_single_file $file; then
-       ret=1
-       if test -z "$check_all"; then
-           break
-       fi
-   fi
+  if ! check_single_file $file; then
+    ret=1
+    if test -z "$check_all"; then
+      break
+    fi
+  fi
 done
 
 rm -rf $dir

Reply via email to