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:
commit
2568a356aa
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
111
functions.sh
111
functions.sh
@ -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,13 +366,18 @@ 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
|
||||||
fi
|
else
|
||||||
|
|
||||||
# Get only files with different MD5sums
|
# 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]+$//'`
|
while read
|
||||||
|
do
|
||||||
|
: "${REPLY}"
|
||||||
|
files+=( "${REPLY}" )
|
||||||
|
done < <(diff -U0 $file1 $file2 | sed -E -n -e '/^-\//{s/^-//;s/ [0-9a-f]+ [0-9]+$//;p}')
|
||||||
|
fi
|
||||||
|
|
||||||
if test -n "$sh"; then
|
if test -n "$sh"; then
|
||||||
echo "creating rename script"
|
echo "creating rename script"
|
||||||
|
31
pkg-diff.sh
31
pkg-diff.sh
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user