From 4099e8f1e892b661a92d7ffb8284b00f57c1052d6bbf899b91d5568c9762cd24 Mon Sep 17 00:00:00 2001 From: Olaf Hering Date: Fri, 29 May 2020 07:56:29 +0000 Subject: [PATCH] - 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 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Tools/build-compare?expand=0&rev=274 --- build-compare.changes | 7 ++++ build-compare.spec | 2 +- functions.sh | 95 +++++++++++++++++++++++++++++-------------- 3 files changed, 72 insertions(+), 32 deletions(-) diff --git a/build-compare.changes b/build-compare.changes index fcc8443..ed96dee 100644 --- a/build-compare.changes +++ b/build-compare.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +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 diff --git a/build-compare.spec b/build-compare.spec index af4c85a..06b8ba2 100644 --- a/build-compare.spec +++ b/build-compare.spec @@ -21,7 +21,7 @@ Summary: Build Result Compare Script License: GPL-2.0+ Group: Development/Tools/Building Url: https://github.com/openSUSE/build-compare -Version: 20200514T095116.be3487c +Version: 20200529T095124.68a99b1 Release: 0 Source1: COPYING Source2: same-build-result.sh diff --git a/functions.sh b/functions.sh index 34f3cb1..2d39b88 100644 --- a/functions.sh +++ b/functions.sh @@ -10,36 +10,56 @@ RPM="rpm -qp --nodigest --nosignature" +declare -A rpm_querytags +collect_rpm_querytags() { + while read + do + : ${REPLY} + rpm_querytags[${REPLY}]=Y + done < <(rpm --querytags) +} + set_rpm_meta_global_variables() { local pkg=$1 local rpm_tags= local out=`mktemp` + local t v qt + local -a type variant list # Name, Version, Release QF_NAME="%{NAME}" QF_VER_REL="%{VERSION}-%{RELEASE}" QF_NAME_VER_REL="%{NAME}-%{VERSION}-%{RELEASE}" -# provides destroy this because at least the self-provide includes the -# -buildnumber :-( -QF_PROVIDES="[%{PROVIDENAME} %{PROVIDEFLAGS} %{PROVIDEVERSION}\\n]\\n" -QF_PROVIDES="${QF_PROVIDES}[%{REQUIRENAME} %{REQUIREFLAGS} %{REQUIREVERSION}\\n]\\n" -QF_PROVIDES="${QF_PROVIDES}[%{CONFLICTNAME} %{CONFLICTFLAGS} %{CONFLICTVERSION}\\n]\\n" -QF_PROVIDES="${QF_PROVIDES}[%{OBSOLETENAME} %{OBSOLETEFLAGS} %{OBSOLETEVERSION}\\n]\\n" - -rpm_tags="%{RECOMMENDNAME} %{RECOMMENDFLAGS} %{RECOMMENDVERSION}" -check_header "%{NAME} ${rpm_tags}" > "${out}" -if test -s "${out}" -then - QF_PROVIDES="${QF_PROVIDES}[${rpm_tags}\\n]\\n" -fi -rpm_tags="%{SUPPLEMENTNAME} %{SUPPLEMENTFLAGS} %{SUPPLEMENTVERSION}" -check_header "%{NAME} ${rpm_tags}" > "${out}" -if test -s "${out}" -then - QF_PROVIDES="${QF_PROVIDES}[${rpm_tags}\\n]\\n" -fi +QF_PROVIDES= +type=( +CONFLICT +OBSOLETE +OLDSUGGESTS +PROVIDE +RECOMMEND +REQUIRE +SUGGEST +SUPPLEMENT +) +variant=( + NAME + FLAGS + VERSION +) +for t in "${type[@]}" +do + unset list + list=() + for v in "${variant[@]}" + do + qt=${t}${v} + test -n "${rpm_querytags[${qt}]}" || continue + list+=("%{${qt}}") + done + QF_PROVIDES+="${t}\\n[${list[@]}\\n]\\n" +done # don't look at RELEASE, it contains our build number QF_TAGS="%{NAME} %{VERSION} %{EPOCH}\\n" @@ -54,24 +74,36 @@ QF_TAGS="${QF_TAGS}%{PAYLOADFORMAT} %{PAYLOADCOMPRESSOR} %{PAYLOADFLAGS}\\n" # XXX We also need to check the existence (but not the content (!)) # of SIGGPG (and perhaps the other SIG*) # XXX We don't look at triggers -QF_TAGS="${QF_TAGS}[%{VERIFYSCRIPTPROG} %{VERIFYSCRIPT}]\\n" # Only the first ChangeLog entry; should be enough QF_TAGS="${QF_TAGS}%{CHANGELOGTIME} %{CHANGELOGNAME} %{CHANGELOGTEXT}\\n" # scripts, might contain release number -script_types=' -PRETRANS -PREIN -POSTIN -PREUN -POSTUN -POSTTRANS -VERIFYSCRIPT -' QF_SCRIPT= -for script_type in ${script_types} +type=( + PRETRANS + PREIN + POSTIN + PREUN + POSTUN + POSTTRANS + VERIFYSCRIPT +) +variant=( + PROG + FLAGS + '' +) +for t in "${type[@]}" 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} + test -n "${rpm_querytags[${qt}]}" || continue + list+=("%{${qt}}") + done + QF_SCRIPT+="${t}\\n[${list[@]}\\n]\\n" done # Now the files. We leave out mtime and size. For normal files @@ -256,6 +288,7 @@ function cmp_rpm_meta () rpm_meta_old=`mktemp` rpm_meta_new=`mktemp` + collect_rpm_querytags set_rpm_meta_global_variables $oldrpm check_header "$QF_ALL" $oldrpm > $rpm_meta_old