2009-02-04 04:29:06 +01:00
|
|
|
#!/bin/bash
|
|
|
|
#
|
2012-01-10 14:19:57 +01:00
|
|
|
# Copyright (c) 2009, 2010, 2012 SUSE Linux Product GmbH, Germany.
|
2009-02-04 04:29:06 +01:00
|
|
|
# Licensed under GPL v2, see COPYING file for details.
|
|
|
|
#
|
|
|
|
# Written by Adrian Schroeter <adrian@suse.de>
|
2010-10-28 11:50:21 +02:00
|
|
|
# Enhanced by Andreas Jaeger <aj@suse.de>
|
2009-02-04 04:29:06 +01:00
|
|
|
#
|
|
|
|
# The script decides if the new build differes from the former one,
|
2015-02-12 12:10:09 +01:00
|
|
|
# using pkg-diff.sh.
|
2009-10-08 04:01:40 +02:00
|
|
|
# The script is called as part of the build process as:
|
|
|
|
# /usr/lib/build/same-build-result.sh /.build.oldpackages /usr/src/packages/RPMS /usr/src/packages/SRPMS
|
2009-02-04 04:29:06 +01:00
|
|
|
|
2015-02-12 12:10:09 +01:00
|
|
|
CMPSCRIPT=${0%/*}/pkg-diff.sh
|
2010-09-21 13:12:14 +02:00
|
|
|
SCMPSCRIPT=${0%/*}/srpm-check.sh
|
2009-02-04 04:29:06 +01:00
|
|
|
|
2010-10-28 11:50:21 +02:00
|
|
|
check_all=1
|
2009-02-04 04:29:06 +01:00
|
|
|
OLDDIR="$1"
|
|
|
|
shift
|
|
|
|
NEWDIRS="$*"
|
|
|
|
|
|
|
|
echo "$CMPSCRIPT"
|
|
|
|
|
|
|
|
if [ ! -d "$OLDDIR" ]; then
|
|
|
|
echo "No valid directory with old build result given !"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
if [ -z "$NEWDIRS" ]; then
|
|
|
|
echo "No valid directory with new build result given !"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2010-09-21 13:12:14 +02:00
|
|
|
if test `find $NEWDIRS -name '*.rpm' -and ! -name '*.delta.rpm' | wc -l` != `find $OLDDIR -name '*.rpm' -and ! -name '*.delta.rpm' | wc -l`; then
|
2009-02-06 15:22:35 +01:00
|
|
|
echo "different number of subpackages"
|
2010-09-21 13:12:14 +02:00
|
|
|
find $OLDDIR $NEWDIRS -name '*.rpm' -and ! -name '*.delta.rpm'
|
2009-02-06 15:22:35 +01:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
osrpm=$(find "$OLDDIR" -name \*src.rpm)
|
|
|
|
nsrpm=$(find $NEWDIRS -name \*src.rpm)
|
|
|
|
|
|
|
|
if test ! -f "$osrpm"; then
|
|
|
|
echo no old source rpm in $OLDDIR
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
if test ! -f "$nsrpm"; then
|
|
|
|
echo no new source rpm in $NEWDIRS
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "compare $osrpm $nsrpm"
|
2010-09-21 13:12:14 +02:00
|
|
|
bash $SCMPSCRIPT "$osrpm" "$nsrpm" || exit 1
|
2009-02-06 15:22:35 +01:00
|
|
|
|
2010-05-21 23:30:12 +02:00
|
|
|
# technically we should not all exclude all -32bit but filter for different archs,
|
|
|
|
# like done with -x86
|
|
|
|
# but it would be better if this script ran earlier in the build
|
2009-10-08 04:01:40 +02:00
|
|
|
# sort the rpms so that both lists have the same order
|
|
|
|
# problem: a package can contain both noarch and arch subpackages, so we have to
|
|
|
|
# take care of proper sorting of NEWRPMS, e.g. noarch/x.rpm and x86_64/w.rpm since OLDRPMS
|
|
|
|
# has all the packages in a single directory and would sort this as w.rpm, x.rpm.
|
2012-05-24 12:19:26 +02:00
|
|
|
OLDRPMS=($(find "$OLDDIR" -type f -name \*rpm -a ! -name \*src.rpm -a ! -name \*.delta.rpm|sort|grep -v -- -32bit-|grep -v -- -64bit-|grep -v -- '-x86-.*\.ia64\.rpm'))
|
|
|
|
NEWRPMS=($(find $NEWDIRS -type f -name \*rpm -a ! -name \*src.rpm -a ! -name \*.delta.rpm|sort --field-separator=/ --key=7|grep -v -- -32bit-|grep -v -- -64bit-|grep -v -- '-x86-.*\.ia64\.rpm'))
|
2009-02-04 04:29:06 +01:00
|
|
|
|
2015-02-02 12:33:28 +01:00
|
|
|
# Get version-release from first RPM and keep for rpmlint check
|
2012-02-22 08:49:21 +01:00
|
|
|
# Remember to quote the "." for future regexes
|
2015-02-02 12:33:28 +01:00
|
|
|
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')
|
2012-01-26 19:52:20 +01:00
|
|
|
|
2010-10-28 11:50:21 +02:00
|
|
|
SUCCESS=1
|
2009-02-07 15:39:47 +01:00
|
|
|
rpmqp='rpm -qp --qf %{NAME} --nodigest --nosignature '
|
2009-02-06 15:22:35 +01:00
|
|
|
for opac in ${OLDRPMS[*]}; do
|
2009-02-04 04:29:06 +01:00
|
|
|
npac=${NEWRPMS[0]}
|
|
|
|
NEWRPMS=(${NEWRPMS[@]:1}) # shift
|
|
|
|
echo compare "$opac" "$npac"
|
2009-02-06 15:22:35 +01:00
|
|
|
oname=`$rpmqp $opac`
|
|
|
|
nname=`$rpmqp $npac`
|
|
|
|
if test "$oname" != "$nname"; then
|
2015-04-13 10:56:50 +02:00
|
|
|
echo "names differ: $oname $nname"
|
|
|
|
exit 1
|
2009-02-06 15:22:35 +01:00
|
|
|
fi
|
2014-11-24 13:18:21 +01:00
|
|
|
case "$opac" in
|
|
|
|
*debuginfo*)
|
2015-04-13 10:56:50 +02:00
|
|
|
echo "skipping -debuginfo package"
|
2014-11-24 13:18:21 +01:00
|
|
|
;;
|
|
|
|
*)
|
2015-04-13 10:56:50 +02:00
|
|
|
bash $CMPSCRIPT "$opac" "$npac" || SUCCESS=0
|
|
|
|
if test $SUCCESS -eq 0 -a -z "$check_all"; then
|
|
|
|
echo "differences between $opac and $npac"
|
2014-07-03 12:49:49 +02:00
|
|
|
exit 1
|
2015-04-13 10:56:50 +02:00
|
|
|
fi
|
2014-11-24 13:18:21 +01:00
|
|
|
;;
|
|
|
|
esac
|
2009-02-04 04:29:06 +01:00
|
|
|
done
|
|
|
|
|
|
|
|
if [ -n "${NEWRPMS[0]}" ]; then
|
|
|
|
echo additional new package
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2012-01-10 14:19:57 +01:00
|
|
|
# Compare rpmlint.log files
|
2015-04-13 10:56:50 +02:00
|
|
|
if test -d /home/abuild/rpmbuild/OTHER; then
|
|
|
|
OTHERDIR=/home/abuild/rpmbuild/OTHER
|
2015-04-13 12:44:17 +02:00
|
|
|
elif test -d /usr/src/packages/OTHER; then
|
2015-04-13 10:56:50 +02:00
|
|
|
OTHERDIR=/usr/src/packages/OTHER
|
|
|
|
else
|
|
|
|
echo "no OTHERDIR"
|
|
|
|
OTHERDIR=
|
2012-02-16 15:18:23 +01:00
|
|
|
fi
|
|
|
|
|
2015-04-13 10:56:50 +02:00
|
|
|
if test -n "$OTHERDIR"; then
|
|
|
|
if test -e $OLDDIR/rpmlint.log -a -e $OTHERDIR/rpmlint.log; then
|
|
|
|
file1=`mktemp`
|
|
|
|
file2=`mktemp`
|
|
|
|
echo "comparing $OLDDIR/rpmlint.log and $OTHERDIR/rpmlint.log"
|
|
|
|
# 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
|
2015-08-24 18:09:07 +02:00
|
|
|
### kmp's are strange:
|
|
|
|
# the correct way would be to find the versions of -kmp- packages and ignore them, but this will do, too.
|
|
|
|
# example: this one leads to constant republishing of virtualbox for every build.
|
|
|
|
# -virtualbox-guest-kmp-default.x86_64: W: filename-too-long-for-joliet virtualbox-guest-kmp-default-5.0.2_k3.16.7_24-177.d_l_ocaml.2.x86_64.rpm
|
|
|
|
# +virtualbox-guest-kmp-default.x86_64: W: filename-too-long-for-joliet virtualbox-guest-kmp-default-5.0.2_k3.16.7_24-178.d_l_ocaml.1.x86_64.rpm
|
|
|
|
sed -i -e "/W: filename-too-long-for-joliet/s,\(^.*-kmp-.*-kmp-\).*$,\1," $file1
|
|
|
|
sed -i -e "/W: filename-too-long-for-joliet/s,\(^.*-kmp-.*-kmp-\).*$,\1," $file2
|
2012-02-22 12:12:05 +01:00
|
|
|
if ! cmp -s $file1 $file2; then
|
2015-04-13 10:56:50 +02:00
|
|
|
echo "rpmlint.log files differ:"
|
|
|
|
diff -u $file1 $file2 |head -n 20
|
2012-02-22 12:12:05 +01:00
|
|
|
SUCCESS=0
|
|
|
|
fi
|
2015-04-13 10:56:50 +02:00
|
|
|
rm $file1 $file2
|
|
|
|
elif test -e $OTHERDIR/rpmlint.log; then
|
|
|
|
echo "rpmlint.log is new"
|
2012-02-16 15:18:23 +01:00
|
|
|
SUCCESS=0
|
|
|
|
fi
|
2015-04-13 10:56:50 +02:00
|
|
|
|
|
|
|
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
|
|
|
|
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
|
|
|
|
fi
|
|
|
|
elif test -e $OTHERDIR/$xml; then
|
|
|
|
echo "$xml is new"
|
|
|
|
SUCCESS=0
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
fi
|
2012-01-10 14:19:57 +01:00
|
|
|
|
2010-10-28 11:50:21 +02:00
|
|
|
if test $SUCCESS -eq 0; then
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
echo 'compare validated built as identical !'
|
2009-02-04 04:29:06 +01:00
|
|
|
exit 0
|
2015-03-20 20:33:05 +01:00
|
|
|
# vim: tw=666 ts=2 shiftwidth=2 et
|