Accepting request 811920 from openSUSE:Tools

Automatic submission by obs-autosubmit

OBS-URL: https://build.opensuse.org/request/show/811920
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/build-compare?expand=0&rev=116
This commit is contained in:
Dominique Leuenberger 2020-06-11 12:41:50 +00:00 committed by Git OBS Bridge
commit 2568a356aa
5 changed files with 108 additions and 50 deletions

View File

@ -1,3 +1,15 @@
-------------------------------------------------------------------
Fri May 29 19:20:21 UTC 2020 - olaf@aepfle.de
- Remove usage of readarray to remain compatible with bash3
-------------------------------------------------------------------
Fri May 29 07:30:51 UTC 2020 - olaf@aepfle.de
- Colltect a list of known rpm tags and use it to build the
queryformat string for the tags listed below (bsc#1172232)
conflict obsolete oldsuggests provide recommend require suggest supplement
------------------------------------------------------------------- -------------------------------------------------------------------
Thu May 14 07:07:07 UTC 2020 - olaf@aepfle.de Thu May 14 07:07:07 UTC 2020 - olaf@aepfle.de

View File

@ -21,7 +21,7 @@ Summary: Build Result Compare Script
License: GPL-2.0+ License: GPL-2.0+
Group: Development/Tools/Building Group: Development/Tools/Building
Url: https://github.com/openSUSE/build-compare Url: https://github.com/openSUSE/build-compare
Version: 20200514T095116.be3487c Version: 20200529T212652.102d844
Release: 0 Release: 0
Source1: COPYING Source1: COPYING
Source2: same-build-result.sh Source2: same-build-result.sh

View File

@ -10,36 +10,59 @@
RPM="rpm -qp --nodigest --nosignature" RPM="rpm -qp --nodigest --nosignature"
declare -a rpm_querytags
collect_rpm_querytags() {
rpm_querytags=( $(rpm --querytags) )
}
# returns 0 if tag is known, returns 1 if unknown
rpmtag_known() {
local needle="\<${1}\>"
local haystack="${rpm_querytags[@]}"
[[ "${haystack}" =~ ${needle} ]]
return $?
}
set_rpm_meta_global_variables() { set_rpm_meta_global_variables() {
local pkg=$1 local pkg=$1
local rpm_tags= local rpm_tags=
local out=`mktemp` local out=`mktemp`
local t v qt
local -a type variant list
# Name, Version, Release # Name, Version, Release
QF_NAME="%{NAME}" QF_NAME="%{NAME}"
QF_VER_REL="%{VERSION}-%{RELEASE}" QF_VER_REL="%{VERSION}-%{RELEASE}"
QF_NAME_VER_REL="%{NAME}-%{VERSION}-%{RELEASE}" QF_NAME_VER_REL="%{NAME}-%{VERSION}-%{RELEASE}"
# provides destroy this because at least the self-provide includes the QF_PROVIDES=
# -buildnumber :-( type=(
QF_PROVIDES="[%{PROVIDENAME} %{PROVIDEFLAGS} %{PROVIDEVERSION}\\n]\\n" CONFLICT
QF_PROVIDES="${QF_PROVIDES}[%{REQUIRENAME} %{REQUIREFLAGS} %{REQUIREVERSION}\\n]\\n" OBSOLETE
QF_PROVIDES="${QF_PROVIDES}[%{CONFLICTNAME} %{CONFLICTFLAGS} %{CONFLICTVERSION}\\n]\\n" OLDSUGGESTS
QF_PROVIDES="${QF_PROVIDES}[%{OBSOLETENAME} %{OBSOLETEFLAGS} %{OBSOLETEVERSION}\\n]\\n" PROVIDE
RECOMMEND
rpm_tags="%{RECOMMENDNAME} %{RECOMMENDFLAGS} %{RECOMMENDVERSION}" REQUIRE
check_header "%{NAME} ${rpm_tags}" > "${out}" SUGGEST
if test -s "${out}" SUPPLEMENT
then )
QF_PROVIDES="${QF_PROVIDES}[${rpm_tags}\\n]\\n" variant=(
fi NAME
rpm_tags="%{SUPPLEMENTNAME} %{SUPPLEMENTFLAGS} %{SUPPLEMENTVERSION}" FLAGS
check_header "%{NAME} ${rpm_tags}" > "${out}" VERSION
if test -s "${out}" )
then for t in "${type[@]}"
QF_PROVIDES="${QF_PROVIDES}[${rpm_tags}\\n]\\n" do
fi unset list
list=()
for v in "${variant[@]}"
do
qt="${t}${v}"
rpmtag_known "${qt}" || continue
list+=("%{${qt}}")
done
QF_PROVIDES+="${t}\\n[${list[@]}\\n]\\n"
done
# don't look at RELEASE, it contains our build number # don't look at RELEASE, it contains our build number
QF_TAGS="%{NAME} %{VERSION} %{EPOCH}\\n" QF_TAGS="%{NAME} %{VERSION} %{EPOCH}\\n"
@ -54,24 +77,36 @@ QF_TAGS="${QF_TAGS}%{PAYLOADFORMAT} %{PAYLOADCOMPRESSOR} %{PAYLOADFLAGS}\\n"
# XXX We also need to check the existence (but not the content (!)) # XXX We also need to check the existence (but not the content (!))
# of SIGGPG (and perhaps the other SIG*) # of SIGGPG (and perhaps the other SIG*)
# XXX We don't look at triggers # XXX We don't look at triggers
QF_TAGS="${QF_TAGS}[%{VERIFYSCRIPTPROG} %{VERIFYSCRIPT}]\\n"
# Only the first ChangeLog entry; should be enough # Only the first ChangeLog entry; should be enough
QF_TAGS="${QF_TAGS}%{CHANGELOGTIME} %{CHANGELOGNAME} %{CHANGELOGTEXT}\\n" QF_TAGS="${QF_TAGS}%{CHANGELOGTIME} %{CHANGELOGNAME} %{CHANGELOGTEXT}\\n"
# scripts, might contain release number # scripts, might contain release number
script_types='
PRETRANS
PREIN
POSTIN
PREUN
POSTUN
POSTTRANS
VERIFYSCRIPT
'
QF_SCRIPT= QF_SCRIPT=
for script_type in ${script_types} type=(
PRETRANS
PREIN
POSTIN
PREUN
POSTUN
POSTTRANS
VERIFYSCRIPT
)
variant=(
PROG
FLAGS
''
)
for t in "${type[@]}"
do do
QF_SCRIPT="${QF_SCRIPT}[%{${script_type}PROG} %{${script_type}FLAGS} %{${script_type}}\\n]\\n" unset list
list=()
for v in "${variant[@]}"
do
qt="${t}${v}"
rpmtag_known "${qt}" || continue
list+=("%{${qt}}")
done
QF_SCRIPT+="${t}\\n[${list[@]}\\n]\\n"
done done
# Now the files. We leave out mtime and size. For normal files # Now the files. We leave out mtime and size. For normal files
@ -241,7 +276,7 @@ function set_regex() {
# 0 in case of same content # 0 in case of same content
# 1 in case of errors or difference # 1 in case of errors or difference
# 2 in case of differences that need further investigation # 2 in case of differences that need further investigation
# Sets $files with list of files that need further investigation # Sets ${files[@]} array with list of files that need further investigation
function cmp_rpm_meta () function cmp_rpm_meta ()
{ {
local RES local RES
@ -256,6 +291,7 @@ function cmp_rpm_meta ()
rpm_meta_old=`mktemp` rpm_meta_old=`mktemp`
rpm_meta_new=`mktemp` rpm_meta_new=`mktemp`
collect_rpm_querytags
set_rpm_meta_global_variables $oldrpm set_rpm_meta_global_variables $oldrpm
check_header "$QF_ALL" $oldrpm > $rpm_meta_old check_header "$QF_ALL" $oldrpm > $rpm_meta_old
@ -330,14 +366,19 @@ function cmp_rpm_meta ()
get_value QF_CHECKSUM $rpm_meta_new | grep -v " 64$" | trim_release_new > $file2 get_value QF_CHECKSUM $rpm_meta_new | grep -v " 64$" | trim_release_new > $file2
RES=2 RES=2
# done if the same # done if the same
files=()
echo "comparing file checksum" echo "comparing file checksum"
if cmp -s $file1 $file2; then if cmp -s $file1 $file2; then
RES=0 RES=0
else
# Get only files with different MD5sums
while read
do
: "${REPLY}"
files+=( "${REPLY}" )
done < <(diff -U0 $file1 $file2 | sed -E -n -e '/^-\//{s/^-//;s/ [0-9a-f]+ [0-9]+$//;p}')
fi fi
# Get only files with different MD5sums
files=`diff -U0 $file1 $file2 | fgrep -v +++ | grep ^+ | cut -b2- | sed -E -e 's/ [0-9a-f]+ [0-9]+$//'`
if test -n "$sh"; then if test -n "$sh"; then
echo "creating rename script" echo "creating rename script"
# Create a temporary helper script to rename files/dirs with release in it # Create a temporary helper script to rename files/dirs with release in it

View File

@ -761,6 +761,7 @@ compare_archive()
local f local f
local -a content local -a content
local -i ret=1 local -i ret=1
local -a filelist
"${handler}" 'f' "${file}" || return 1 "${handler}" 'f' "${file}" || return 1
@ -783,8 +784,12 @@ compare_archive()
"${handler}" 'x' "${new}" || return 1 "${handler}" 'x' "${new}" || return 1
popd > /dev/null popd > /dev/null
fi fi
readarray -t content < 'cn' while read
for f in "${content[@]}" do
: "${REPLY}"
filelist+=( "${REPLY}" )
done < 'cn'
for f in "${filelist[@]}"
do do
if ! check_single_file "${file}/${f}" if ! check_single_file "${file}/${f}"
then then
@ -1157,6 +1162,10 @@ fi
echo "Comparing `basename $oldpkg` to `basename $newpkg`" echo "Comparing `basename $oldpkg` to `basename $newpkg`"
case $oldpkg in case $oldpkg in
*.deb|*.ipk)
: cmp_deb_meta missing
RES=0
;;
*.rpm) *.rpm)
cmp_rpm_meta "$rename_script" "$oldpkg" "$newpkg" cmp_rpm_meta "$rename_script" "$oldpkg" "$newpkg"
RES=$? RES=$?
@ -1192,18 +1201,15 @@ unpackage $newpkg $dir/new
case $oldpkg in case $oldpkg in
*.deb|*.ipk) *.deb|*.ipk)
adjust_controlfile $dir/old $dir/new adjust_controlfile $dir/old $dir/new
files=()
while read
do
: "${REPLY}"
files+=( "${REPLY}" )
done < <(cd ${dir} ; find old new -type f | sed -e 's/^...//' | sort -u)
;; ;;
esac esac
# files is set in cmp_rpm_meta for rpms, so if RES is empty we should assume
# it wasn't an rpm and pick all files for comparison.
if [ -z $RES ]; then
oldfiles=`cd $dir/old; find . -type f`
newfiles=`cd $dir/new; find . -type f`
files=`echo -e "$oldfiles\n$newfiles" | sort -u`
fi
cd $dir cd $dir
bash $rename_script bash $rename_script
@ -1218,8 +1224,7 @@ fi
# preserve cmp_rpm_meta result for check_all runs # preserve cmp_rpm_meta result for check_all runs
ret=$RES ret=$RES
readarray -t filesarray <<<"$files" for file in "${files[@]}"; do
for file in "${filesarray[@]}"; do
if ! check_single_file "$file"; then if ! check_single_file "$file"; then
ret=1 ret=1
if test -z "$check_all"; then if test -z "$check_all"; then

View File

@ -87,7 +87,7 @@ check_single_file()
} }
ret=0 ret=0
for file in $files; do for file in "${files[@]}"; do
if ! check_single_file $file; then if ! check_single_file $file; then
ret=1 ret=1
if test -z "$check_all"; then if test -z "$check_all"; then