mirror of
https://git.yoctoproject.org/poky
synced 2026-04-03 02:02:21 +02:00
build-compare: 2015.02.10 -> 2019.08.14
* Removed the following patches which are already merged by upstream: 0001-Add-support-for-deb-and-ipk-packaging.patch Rename-rpm-check.sh-to-pkg-diff.sh.patch functions.sh-improve-deb-and-ipk-checking.patch functions.sh-remove-space-at-head.patch functions.sh-run-rpm-once-to-make-it-faster.patch pkg-diff.sh-check-for-fifo-named-pipe.patch pkg-diff.sh-check_single_file-return-at-once-when-sa.patch pkg-diff.sh-remove-space-in-the-end-for-ftype.patch * Rebased Ignore-DWARF-sections.patch This version is very outstanding when compare binary packages, e.g.: PRSERV_HOST = "localhost:0" INHERIT += "packagefeed-stability" PACKAGE_CLASSES = "package_ipk $ bitbake opkg $ find tmp/deploy/ipk >/tmp/ipk_1 Add a "bbnote 'hello'" to autotools.bbclass' autotools_do_configure. * BEFORE the upgrading, the result is: $ diff /tmp/ipk_1 /tmp/ipk_2 -Nur | diffstat ipk_2 | 1570 +++++++++++++++++++++++++++++++++--------------------------------- 1 file changed, 785 insertions(+), 785 deletions(-) * AFTER the upgrading, the result is: $ bitbake opkg $ find tmp/deploy/ipk >/tmp/ipk_2 $ diff /tmp/ipk_1 /tmp/ipk_2 -Nur No output And if we really modifed a recipe such as opkg, then it would show that it is changed. For a full world build AFTER the upgrading: $ diff /tmp/ipk_6 /tmp/ipk_7 -Nur | diffstat ipk_7 | 2090 +++++++++++++++++++++++++++++++++--------------------------------- 1 file changed, 1045 insertions(+), 1045 deletions(-) There are 10968 packages in totall, 1045 ones have been changed, so we can still improve it in the future. (From OE-Core rev: 4c77fdfc0b3b31105a4dfd1a4634f8464b52d933) Signed-off-by: Robert Yang <liezhi.yang@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
2cd5daffe0
commit
35c8b87b1c
@@ -6,22 +6,14 @@ LICENSE = "GPLv2"
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
|
||||
|
||||
SRC_URI = "git://github.com/openSUSE/build-compare.git \
|
||||
file://Rename-rpm-check.sh-to-pkg-diff.sh.patch;striplevel=1 \
|
||||
file://Ignore-DWARF-sections.patch;striplevel=1 \
|
||||
file://0001-Add-support-for-deb-and-ipk-packaging.patch \
|
||||
file://functions.sh-remove-space-at-head.patch \
|
||||
file://functions.sh-run-rpm-once-to-make-it-faster.patch \
|
||||
file://pkg-diff.sh-check-for-fifo-named-pipe.patch \
|
||||
file://pkg-diff.sh-check_single_file-return-at-once-when-sa.patch \
|
||||
file://pkg-diff.sh-remove-space-in-the-end-for-ftype.patch \
|
||||
file://functions.sh-improve-deb-and-ipk-checking.patch \
|
||||
"
|
||||
|
||||
# Date matches entry in build-compare.changes and date of SRCREV.
|
||||
#
|
||||
SRCREV = "c5352c054c6ef15735da31b76d6d88620f4aff0a"
|
||||
SRCREV = "4dfa207660776cae120afa4353aec7f1f2a998d2"
|
||||
PE = "1"
|
||||
PV = "2015.02.10+git${SRCPV}"
|
||||
PV = "2019.08.14+git${SRCPV}"
|
||||
UPSTREAM_CHECK_COMMITS = "1"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
From 02dbc7e3478e409d6f5e3e1c53daddf8838be999 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Eggleton <paul.eggleton@linux.intel.com>
|
||||
Date: Tue, 1 Sep 2015 12:04:33 +0100
|
||||
Subject: [PATCH] Add support for deb and ipk packaging
|
||||
|
||||
Upstream-Status: Submitted [https://github.com/openSUSE/build-compare/pull/10]
|
||||
|
||||
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
|
||||
---
|
||||
functions.sh | 15 +++++++++++++++
|
||||
pkg-diff.sh | 6 ++++++
|
||||
2 files changed, 21 insertions(+)
|
||||
|
||||
diff --git a/functions.sh b/functions.sh
|
||||
index 06079df..85c9003 100644
|
||||
--- a/functions.sh
|
||||
+++ b/functions.sh
|
||||
@@ -85,6 +85,13 @@ function unpackage()
|
||||
CPIO_OPTS="--extract --unconditional --preserve-modification-time --make-directories --quiet"
|
||||
rpm2cpio $file | cpio ${CPIO_OPTS}
|
||||
;;
|
||||
+ *.ipk|*.deb)
|
||||
+ ar x $file
|
||||
+ tar xf control.tar.gz
|
||||
+ rm control.tar.gz
|
||||
+ tar xf data.tar.gz
|
||||
+ rm data.tar.gz
|
||||
+ ;;
|
||||
esac
|
||||
popd 1>/dev/null
|
||||
}
|
||||
@@ -255,4 +262,12 @@ function cmp_spec ()
|
||||
rm $file1 $file2
|
||||
return $RES
|
||||
}
|
||||
+
|
||||
+function adjust_controlfile() {
|
||||
+ cat $1/control | sed '/^Version: /d' > $1/control.fixed
|
||||
+ mv $1/control.fixed $1/control
|
||||
+ cat $2/control | sed '/^Version: /d' > $2/control.fixed
|
||||
+ mv $2/control.fixed $2/control
|
||||
+}
|
||||
+
|
||||
# vim: tw=666 ts=2 et
|
||||
diff --git a/pkg-diff.sh b/pkg-diff.sh
|
||||
index 0f1fa76..3cf10aa 100644
|
||||
--- a/pkg-diff.sh
|
||||
+++ b/pkg-diff.sh
|
||||
@@ -138,6 +138,12 @@ echo "Extracting packages"
|
||||
unpackage $oldpkg $dir/old
|
||||
unpackage $newpkg $dir/new
|
||||
|
||||
+case $oldpkg in
|
||||
+ *.deb|*.ipk)
|
||||
+ adjust_controlfile $dir/old $dir/new
|
||||
+ ;;
|
||||
+esac
|
||||
+
|
||||
# files is set in cmp_spec 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
|
||||
--
|
||||
2.1.0
|
||||
|
||||
@@ -23,18 +23,15 @@ Signed-off-by: Randy Witt <randy.e.witt@linux.intel.com>
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/pkg-diff.sh b/pkg-diff.sh
|
||||
index 56035c1..0f1fa76 100755
|
||||
index 9c2125e..b0d77c8 100755
|
||||
--- a/pkg-diff.sh
|
||||
+++ b/pkg-diff.sh
|
||||
@@ -658,7 +658,7 @@ check_single_file()
|
||||
@@ -851,7 +851,7 @@ check_single_file()
|
||||
echo "" >$file1
|
||||
echo "" >$file2
|
||||
# Don't compare .build-id and .gnu_debuglink sections
|
||||
- sections="$(objdump -s new/$file | grep "Contents of section .*:" | sed -r "s,.* (.*):,\1,g" | grep -v -e "\.build-id" -e "\.gnu_debuglink" | tr "\n" " ")"
|
||||
+ sections="$(objdump -s new/$file | grep "Contents of section .*:" | sed -r "s,.* (.*):,\1,g" | grep -v -e "\.build-id" -e "\.gnu_debuglink" -e "\.debug_abbrev" -e "\.debug_aranges" -e "\.debug_frame" -e "\.debug_info" -e "\.debug_line" -e "\.debug_loc" -e "\.debug_macinfo" -e "\.debug_pubnames" -e "\.debug_pubtypes" -e "\.debug_ranges" -e "\.debug_str" | tr "\n" " ")"
|
||||
# Don't compare .build-id, .gnu_debuglink and .gnu_debugdata sections
|
||||
- sections="$($OBJDUMP -s new/$file | grep "Contents of section .*:" | sed -r "s,.* (.*):,\1,g" | grep -v -e "\.build-id" -e "\.gnu_debuglink" -e "\.gnu_debugdata" | tr "\n" " ")"
|
||||
+ sections="$($OBJDUMP -s new/$file | grep "Contents of section .*:" | sed -r "s,.* (.*):,\1,g" | grep -v -e "\.build-id" -e "\.gnu_debuglink" -e "\.gnu_debugdata" -e "\.debug_abbrev" -e "\.debug_aranges" -e "\.debug_frame" -e "\.debug_info" -e "\.debug_line" -e "\.debug_loc" -e "\.debug_macinfo" -e "\.debug_pubnames" -e "\.debug_pubtypes" -e "\.debug_ranges" -e "\.debug_str" | tr "\n" " ")"
|
||||
for section in $sections; do
|
||||
objdump -s -j $section old/$file | sed "s,^old/,," > $file1
|
||||
objdump -s -j $section new/$file | sed "s,^new/,," > $file2
|
||||
--
|
||||
1.9.3
|
||||
|
||||
$OBJDUMP -s -j $section old/$file | sed "s,^old/,," > $file1
|
||||
$OBJDUMP -s -j $section new/$file | sed "s,^new/,," > $file2
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,117 +0,0 @@
|
||||
From b4eb7fde10318162bd2d02b9017ef51746752a91 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Yang <liezhi.yang@windriver.com>
|
||||
Date: Thu, 14 Jul 2016 23:14:21 -0700
|
||||
Subject: [PATCH 4/4] functions.sh: improve deb and ipk checking
|
||||
|
||||
* The deb and ipk's depends version string is like:
|
||||
Depends: libc6 (>= 2.24)
|
||||
Update trim_release_old and trim_release_new to match the bracket in
|
||||
the end ")".
|
||||
|
||||
* The deb's data tarball now is .tar.xz, and ipk's is .tar.gz.
|
||||
|
||||
* Update adjust_controlfile() to make ituse trim_release_old and
|
||||
trim_release_new.
|
||||
|
||||
Upstream-Status: Submitted [https://github.com/openSUSE/build-compare/pull/10]
|
||||
|
||||
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
|
||||
---
|
||||
functions.sh | 45 ++++++++++++++++++++++++++++-----------------
|
||||
1 file changed, 28 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/functions.sh b/functions.sh
|
||||
index aa572f9..fe493ba 100755
|
||||
--- a/functions.sh
|
||||
+++ b/functions.sh
|
||||
@@ -78,7 +78,7 @@ check_header()
|
||||
function trim_release_old()
|
||||
{
|
||||
sed -e "
|
||||
- /\(\/boot\|\/lib\/modules\|\/lib\/firmware\|\/usr\/src\|$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}
|
||||
+ /\(\/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/^ *//g
|
||||
"
|
||||
@@ -86,7 +86,7 @@ function trim_release_old()
|
||||
function trim_release_new()
|
||||
{
|
||||
sed -e "
|
||||
- /\(\/boot\|\/lib\/modules\|\/lib\/firmware\|\/usr\/src\|$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}
|
||||
+ /\(\/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/^ *//g
|
||||
"
|
||||
@@ -133,8 +133,8 @@ function unpackage()
|
||||
ar x $file
|
||||
tar xf control.tar.gz
|
||||
rm control.tar.gz
|
||||
- tar xf data.tar.gz
|
||||
- rm data.tar.gz
|
||||
+ tar xf data.tar.[xg]z
|
||||
+ rm data.tar.[xg]z
|
||||
;;
|
||||
esac
|
||||
popd 1>/dev/null
|
||||
@@ -164,6 +164,22 @@ function get_value()
|
||||
sed -n -e "/^___${1}___/,/^___${1}___/p" $2 | sed -e "/^___${1}___/d"
|
||||
}
|
||||
|
||||
+# Set version_release_old_regex_s, version_release_old_regex_l and
|
||||
+# name_ver_rel_old_regex_l, also the new ones.
|
||||
+function set_regex() {
|
||||
+ # Remember to quote the . which is in release
|
||||
+ # Short version without B_CN
|
||||
+ version_release_old_regex_s=${version_release_old%.*}
|
||||
+ version_release_old_regex_s=${version_release_old_regex_s//./\\.}
|
||||
+ version_release_new_regex_s=${version_release_new%.*}
|
||||
+ version_release_new_regex_s=${version_release_new_regex_s//./\\.}
|
||||
+ # Long version with B_CNT
|
||||
+ version_release_old_regex_l=${version_release_old//./\\.}
|
||||
+ version_release_new_regex_l=${version_release_new//./\\.}
|
||||
+ name_ver_rel_old_regex_l=${name_ver_rel_old//./\\.}
|
||||
+ name_ver_rel_new_regex_l=${name_ver_rel_new//./\\.}
|
||||
+}
|
||||
+
|
||||
# Compare just the rpm meta data of two rpms
|
||||
# Returns:
|
||||
# 0 in case of same content
|
||||
@@ -194,17 +210,7 @@ function cmp_spec ()
|
||||
version_release_old="$(get_value QF_VER_REL $spec_old)"
|
||||
name_ver_rel_old="$(get_value QF_NAME_VER_REL $spec_old)"
|
||||
|
||||
- # Remember to quote the . which is in release
|
||||
- # Short version without B_CN
|
||||
- version_release_old_regex_s=${version_release_old%.*}
|
||||
- version_release_old_regex_s=${version_release_old_regex_s//./\\.}
|
||||
- version_release_new_regex_s=${version_release_new%.*}
|
||||
- version_release_new_regex_s=${version_release_new_regex_s//./\\.}
|
||||
- # Long version with B_CNT
|
||||
- version_release_old_regex_l=${version_release_old//./\\.}
|
||||
- version_release_new_regex_l=${version_release_new//./\\.}
|
||||
- name_ver_rel_old_regex_l=${name_ver_rel_old//./\\.}
|
||||
- name_ver_rel_new_regex_l=${name_ver_rel_new//./\\.}
|
||||
+ set_regex
|
||||
|
||||
# Check the whole spec file at first, return 0 immediately if the
|
||||
# are the same.
|
||||
@@ -285,9 +291,14 @@ function cmp_spec ()
|
||||
}
|
||||
|
||||
function adjust_controlfile() {
|
||||
- cat $1/control | sed '/^Version: /d' > $1/control.fixed
|
||||
+ version_release_old="`sed -ne 's/^Version: \(.*\)/\1/p' $1/control`"
|
||||
+ name_ver_rel_old="`sed -n -e 's/^Package: \(.*\)/\1/p' $1/control`-`sed -n -e 's/^Version: \(.*\)/\1/p' $1/control`"
|
||||
+ 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
|
||||
mv $1/control.fixed $1/control
|
||||
- cat $2/control | sed '/^Version: /d' > $2/control.fixed
|
||||
+ cat $2/control | trim_release_new > $2/control.fixed
|
||||
mv $2/control.fixed $2/control
|
||||
}
|
||||
|
||||
--
|
||||
2.9.0
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
From 402a821e604f280e62c34bf4d40c6d1b4c6c892d Mon Sep 17 00:00:00 2001
|
||||
From: Robert Yang <liezhi.yang@windriver.com>
|
||||
Date: Mon, 4 Jul 2016 20:11:33 -0700
|
||||
Subject: [PATCH] functions.sh: remove space at head
|
||||
|
||||
The command like:
|
||||
rpm -qp --nodigest --nosignature --qf '<foo> [%{REQUIRENAME}\n]\n'
|
||||
^^space
|
||||
|
||||
The space will be printed, and will impact the check result, so remove it.
|
||||
|
||||
Upstream-Status: Submitted [https://github.com/openSUSE/build-compare/pull/9]
|
||||
|
||||
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
|
||||
---
|
||||
functions.sh | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/functions.sh b/functions.sh
|
||||
index 85c9003..b1069d2 100644
|
||||
--- a/functions.sh
|
||||
+++ b/functions.sh
|
||||
@@ -26,6 +26,7 @@ function trim_release_old()
|
||||
sed -e "
|
||||
/\(\/boot\|\/lib\/modules\|\/lib\/firmware\|\/usr\/src\|$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/^ *//g
|
||||
"
|
||||
}
|
||||
function trim_release_new()
|
||||
@@ -33,6 +34,7 @@ function trim_release_new()
|
||||
sed -e "
|
||||
/\(\/boot\|\/lib\/modules\|\/lib\/firmware\|\/usr\/src\|$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/^ *//g
|
||||
"
|
||||
}
|
||||
# Get single directory or filename with long or short release string
|
||||
--
|
||||
2.9.0
|
||||
|
||||
@@ -1,361 +0,0 @@
|
||||
From f34d632c427b1e1570ef9136454fc01d8c9f10a6 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Yang <liezhi.yang@windriver.com>
|
||||
Date: Thu, 7 Jul 2016 19:34:09 -0700
|
||||
Subject: [PATCH] functions.sh: run rpm once to make it faster
|
||||
|
||||
The rpm tool is a heavy process, it ran 16 (or 17 for kernel)
|
||||
"rpm -qp" times when the pkgs are identical, now we only run
|
||||
"rpm -qp --qf <all we need>" twice (one is for old pkg, and one is for
|
||||
new), save the results to spec_old and spec_new, then use sed command to
|
||||
get what we need later, this can make it 75% faster when the pkgs are
|
||||
identical. Here is the rough data on my host Ubuntu 14.04.4, 32 cores
|
||||
CPU and 128G mem:
|
||||
* When the pkgs are identical:
|
||||
- Before the patch: 1s
|
||||
- After the patch: 0.26s
|
||||
I compare the whole spec firstly, and return 0 if they are the same,
|
||||
or go on checking one by one if not, without this, it would be 0.46s,
|
||||
the gain is great when there are lot of packages, usually, we have
|
||||
more than 10,000 rpms to compare.
|
||||
|
||||
* When the pkgs are different:
|
||||
That depends on where is the different, if the different is at the
|
||||
comparing rpmtags stage:
|
||||
- Before the patch: 0.26s
|
||||
- After the patch: 0.29s
|
||||
Increased 0.03s, but if the different is happend later than comparing
|
||||
rpmtags, it will save time.
|
||||
|
||||
Upstream-Status: Submitted [https://github.com/openSUSE/build-compare/pull/9]
|
||||
|
||||
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
|
||||
---
|
||||
functions.sh | 245 ++++++++++++++++++++++++++++++++---------------------------
|
||||
1 file changed, 132 insertions(+), 113 deletions(-)
|
||||
mode change 100644 => 100755 functions.sh
|
||||
|
||||
diff --git a/functions.sh b/functions.sh
|
||||
old mode 100644
|
||||
new mode 100755
|
||||
index b1069d2..aa572f9
|
||||
--- a/functions.sh
|
||||
+++ b/functions.sh
|
||||
@@ -10,9 +10,63 @@
|
||||
|
||||
RPM="rpm -qp --nodigest --nosignature"
|
||||
|
||||
-check_header()
|
||||
+# 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"
|
||||
+
|
||||
+# don't look at RELEASE, it contains our build number
|
||||
+QF_TAGS="%{NAME} %{VERSION} %{EPOCH}\\n"
|
||||
+QF_TAGS="$QF_TAGS %{SUMMARY}\\n%{DESCRIPTION}\\n"
|
||||
+# the DISTURL tag can be used as checkin ID
|
||||
+QF_TAGS="$QF_TAGS %{VENDOR} %{DISTRIBUTION} %{DISTURL}"
|
||||
+QF_TAGS="$QF_TAGS %{LICENSE} %{LICENSE}\\n"
|
||||
+QF_TAGS="$QF_TAGS %{GROUP} %{URL} %{EXCLUDEARCH} %{EXCLUDEOS} %{EXCLUSIVEARCH}\\n"
|
||||
+QF_TAGS="$QF_TAGS %{EXCLUSIVEOS} %{RPMVERSION} %{PLATFORM}\\n"
|
||||
+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
|
||||
+QF_SCRIPT="[%{PREINPROG} %{PREIN}\\n]\\n[%{POSTINPROG} %{POSTIN}\\n]\\n[%{PREUNPROG} %{PREUN}\\n]\\n[%{POSTUNPROG} %{POSTUN}\\n]\\n"
|
||||
+
|
||||
+# Now the files. We leave out mtime and size. For normal files
|
||||
+# the size will influence the MD5 anyway. For directories the sizes can
|
||||
+# differ, depending on which file system the package was built. To not
|
||||
+# have to filter out directories we simply ignore all sizes.
|
||||
+# Also leave out FILEDEVICES, FILEINODES (depends on the build host),
|
||||
+# FILECOLORS, FILECLASS (normally useful but file output contains mtimes),
|
||||
+# FILEDEPENDSX and FILEDEPENDSN.
|
||||
+# Also FILELANGS (or?)
|
||||
+QF_FILELIST="[%{FILENAMES} %{FILEFLAGS} %{FILESTATES} %{FILEMODES:octal} %{FILEUSERNAME} %{FILEGROUPNAME} %{FILERDEVS} %{FILEVERIFYFLAGS} %{FILELINKTOS}\n]\\n"
|
||||
+# ??? what to do with FILEPROVIDE and FILEREQUIRE?
|
||||
+
|
||||
+QF_CHECKSUM="[%{FILENAMES} %{FILEMD5S} %{FILEFLAGS}\n]\\n"
|
||||
+
|
||||
+QF_ALL="\n___QF_NAME___\n${QF_NAME}\n___QF_NAME___\n"
|
||||
+QF_ALL="$QF_ALL\n___QF_TAGS___\n${QF_TAGS}\n___QF_TAGS___\n"
|
||||
+QF_ALL="$QF_ALL\n___QF_VER_REL___\n${QF_VER_REL}\n___QF_VER_REL___\n"
|
||||
+QF_ALL="$QF_ALL\n___QF_NAME_VER_REL___\n${QF_NAME_VER_REL}\n___QF_NAME_VER_REL___\n"
|
||||
+QF_ALL="$QF_ALL\n___QF_PROVIDES___\n${QF_PROVIDES}\n___QF_PROVIDES___\n"
|
||||
+QF_ALL="$QF_ALL\n___QF_SCRIPT___\n${QF_SCRIPT}\n___QF_SCRIPT___\n"
|
||||
+QF_ALL="$QF_ALL\n___QF_FILELIST___\n${QF_FILELIST}\n___QF_FILELIST___\n"
|
||||
+QF_ALL="$QF_ALL\n___QF_CHECKSUM___\n${QF_CHECKSUM}\n___QF_CHECKSUM___\n"
|
||||
+
|
||||
+check_header()
|
||||
{
|
||||
- $RPM --qf "$QF" "$1"
|
||||
+ $RPM --qf "$1" "$2"
|
||||
}
|
||||
|
||||
# Trim version-release string:
|
||||
@@ -47,18 +101,6 @@ function grep_release_new()
|
||||
grep -E "(/boot|/lib/modules|/lib/firmware|/usr/src)/[^/]+(${version_release_new_regex_l}(\$|[^/]+\$)|${version_release_new_regex_s}(\$|[^/]+\$))"
|
||||
}
|
||||
|
||||
-function check_provides()
|
||||
-{
|
||||
- local pkg=$1
|
||||
- # provides destroy this because at least the self-provide includes the
|
||||
- # -buildnumber :-(
|
||||
- QF="[%{PROVIDENAME} %{PROVIDEFLAGS} %{PROVIDEVERSION}\\n]\\n"
|
||||
- QF="$QF [%{REQUIRENAME} %{REQUIREFLAGS} %{REQUIREVERSION}\\n]\\n"
|
||||
- QF="$QF [%{CONFLICTNAME} %{CONFLICTFLAGS} %{CONFLICTVERSION}\\n]\\n"
|
||||
- QF="$QF [%{OBSOLETENAME} %{OBSOLETEFLAGS} %{OBSOLETEVERSION}\\n]\\n"
|
||||
- check_header "$pkg"
|
||||
-}
|
||||
-
|
||||
#usage unpackage <file> $dir
|
||||
# Unpack files in directory $dir
|
||||
# like /usr/bin/unpackage - just for one file and with no options
|
||||
@@ -98,6 +140,30 @@ function unpackage()
|
||||
popd 1>/dev/null
|
||||
}
|
||||
|
||||
+# Run diff command on the files
|
||||
+# $1: printed info
|
||||
+# $2: file1
|
||||
+# $3: file2
|
||||
+function comp_file()
|
||||
+{
|
||||
+ echo "comparing $1"
|
||||
+ if ! diff -au $2 $3; then
|
||||
+ if test -z "$check_all"; then
|
||||
+ rm $2 $3 $spec_old $spec_new
|
||||
+ return 1
|
||||
+ fi
|
||||
+ fi
|
||||
+ return 0
|
||||
+}
|
||||
+
|
||||
+# Get var's value from specfile.
|
||||
+# $1: var name
|
||||
+# $2: specfile
|
||||
+function get_value()
|
||||
+{
|
||||
+ sed -n -e "/^___${1}___/,/^___${1}___/p" $2 | sed -e "/^___${1}___/d"
|
||||
+}
|
||||
+
|
||||
# Compare just the rpm meta data of two rpms
|
||||
# Returns:
|
||||
# 0 in case of same content
|
||||
@@ -107,56 +173,29 @@ function unpackage()
|
||||
function cmp_spec ()
|
||||
{
|
||||
local RES
|
||||
- local file1 file2
|
||||
+ local file_old file_new
|
||||
local f
|
||||
local sh=$1
|
||||
local oldrpm=$2
|
||||
local newrpm=$3
|
||||
|
||||
- QF="%{NAME}"
|
||||
-
|
||||
- # don't look at RELEASE, it contains our build number
|
||||
- QF="$QF %{VERSION} %{EPOCH}\\n"
|
||||
- QF="$QF %{SUMMARY}\\n%{DESCRIPTION}\\n"
|
||||
- QF="$QF %{VENDOR} %{DISTRIBUTION} %{DISTURL}"
|
||||
- QF="$QF %{LICENSE} %{LICENSE}\\n"
|
||||
- QF="$QF %{GROUP} %{URL} %{EXCLUDEARCH} %{EXCLUDEOS} %{EXCLUSIVEARCH}\\n"
|
||||
- QF="$QF %{EXCLUSIVEOS} %{RPMVERSION} %{PLATFORM}\\n"
|
||||
- QF="$QF %{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="$QF [%{VERIFYSCRIPTPROG} %{VERIFYSCRIPT}]\\n"
|
||||
-
|
||||
- # Only the first ChangeLog entry; should be enough
|
||||
- QF="$QF %{CHANGELOGTIME} %{CHANGELOGNAME} %{CHANGELOGTEXT}\\n"
|
||||
-
|
||||
- file1=`mktemp`
|
||||
- file2=`mktemp`
|
||||
-
|
||||
- check_header $oldrpm > $file1
|
||||
- check_header $newrpm > $file2
|
||||
-
|
||||
- # the DISTURL tag can be used as checkin ID
|
||||
- #echo "$QF"
|
||||
- echo "comparing rpmtags"
|
||||
- if ! diff -au $file1 $file2; then
|
||||
- if test -z "$check_all"; then
|
||||
- rm $file1 $file2
|
||||
- return 1
|
||||
- fi
|
||||
- fi
|
||||
-
|
||||
+ file_old=`mktemp`
|
||||
+ file_new=`mktemp`
|
||||
+ spec_old=`mktemp`
|
||||
+ spec_new=`mktemp`
|
||||
+
|
||||
+ check_header "$QF_ALL" $oldrpm > $spec_old
|
||||
+ check_header "$QF_ALL" $newrpm > $spec_new
|
||||
+
|
||||
+ name_new="$(get_value QF_NAME $spec_new)"
|
||||
+ version_release_new="$(get_value QF_VER_REL $spec_new)"
|
||||
+ name_ver_rel_new="$(get_value QF_NAME_VER_REL $spec_new)"
|
||||
+
|
||||
+ version_release_old="$(get_value QF_VER_REL $spec_old)"
|
||||
+ name_ver_rel_old="$(get_value QF_NAME_VER_REL $spec_old)"
|
||||
+
|
||||
# Remember to quote the . which is in release
|
||||
- version_release_old=$($RPM --qf "%{VERSION}-%{RELEASE}" "$oldrpm")
|
||||
- version_release_new=$($RPM --qf "%{VERSION}-%{RELEASE}" "$newrpm")
|
||||
- name_ver_rel_old=$($RPM --qf "%{NAME}-%{VERSION}-%{RELEASE}" "$oldrpm")
|
||||
- name_ver_rel_new=$($RPM --qf "%{NAME}-%{VERSION}-%{RELEASE}" "$newrpm")
|
||||
- # Short version without B_CNT
|
||||
+ # Short version without B_CN
|
||||
version_release_old_regex_s=${version_release_old%.*}
|
||||
version_release_old_regex_s=${version_release_old_regex_s//./\\.}
|
||||
version_release_new_regex_s=${version_release_new%.*}
|
||||
@@ -166,10 +205,27 @@ function cmp_spec ()
|
||||
version_release_new_regex_l=${version_release_new//./\\.}
|
||||
name_ver_rel_old_regex_l=${name_ver_rel_old//./\\.}
|
||||
name_ver_rel_new_regex_l=${name_ver_rel_new//./\\.}
|
||||
+
|
||||
+ # Check the whole spec file at first, return 0 immediately if the
|
||||
+ # are the same.
|
||||
+ cat $spec_old | trim_release_old > $file_old
|
||||
+ cat $spec_new | trim_release_new > $file_new
|
||||
+ echo "comparing the whole specfile"
|
||||
+ if diff -au $spec_old $spec_new; then
|
||||
+ if test -z "$check_all"; then
|
||||
+ rm $file_old $file_new $spec_old $spec_new
|
||||
+ return 0
|
||||
+ fi
|
||||
+ fi
|
||||
+
|
||||
+ get_value QF_TAGS $spec_old > $file_old
|
||||
+ get_value QF_TAGS $spec_new > $file_new
|
||||
+ comp_file rpmtags $file_old $file_new || return 1
|
||||
+
|
||||
# This might happen when?!
|
||||
echo "comparing RELEASE"
|
||||
if [ "${version_release_old%.*}" != "${version_release_new%.*}" ] ; then
|
||||
- case $($RPM --qf '%{NAME}' "$newrpm") in
|
||||
+ case $name_new in
|
||||
kernel-*)
|
||||
# Make sure all kernel packages have the same %RELEASE
|
||||
echo "release prefix mismatch"
|
||||
@@ -181,71 +237,34 @@ function cmp_spec ()
|
||||
*) ;;
|
||||
esac
|
||||
fi
|
||||
-
|
||||
- check_provides $oldrpm | trim_release_old | sort > $file1
|
||||
- check_provides $newrpm | trim_release_new | sort > $file2
|
||||
-
|
||||
- echo "comparing PROVIDES"
|
||||
- if ! diff -au $file1 $file2; then
|
||||
- if test -z "$check_all"; then
|
||||
- rm $file1 $file2
|
||||
- return 1
|
||||
- fi
|
||||
- fi
|
||||
|
||||
- # scripts, might contain release number
|
||||
- QF="[%{PREINPROG} %{PREIN}\\n]\\n[%{POSTINPROG} %{POSTIN}\\n]\\n[%{PREUNPROG} %{PREUN}\\n]\\n[%{POSTUNPROG} %{POSTUN}\\n]\\n"
|
||||
- check_header $oldrpm | trim_release_old > $file1
|
||||
- check_header $newrpm | trim_release_new > $file2
|
||||
+ get_value QF_PROVIDES $spec_old | trim_release_old | sort > $file_old
|
||||
+ get_value QF_PROVIDES $spec_new | trim_release_new | sort > $file_new
|
||||
+ comp_file PROVIDES $file_old $file_new || return 1
|
||||
+
|
||||
+ get_value QF_SCRIPT $spec_old | trim_release_old > $file_old
|
||||
+ get_value QF_SCRIPT $spec_new | trim_release_new > $file_new
|
||||
+ comp_file scripts $file_old $file_new || return 1
|
||||
|
||||
- echo "comparing scripts"
|
||||
- if ! diff -au $file1 $file2; then
|
||||
- if test -z "$check_all"; then
|
||||
- rm $file1 $file2
|
||||
- return 1
|
||||
- fi
|
||||
- fi
|
||||
-
|
||||
# First check the file attributes and later the md5s
|
||||
-
|
||||
- # Now the files. We leave out mtime and size. For normal files
|
||||
- # the size will influence the MD5 anyway. For directories the sizes can
|
||||
- # differ, depending on which file system the package was built. To not
|
||||
- # have to filter out directories we simply ignore all sizes.
|
||||
- # Also leave out FILEDEVICES, FILEINODES (depends on the build host),
|
||||
- # FILECOLORS, FILECLASS (normally useful but file output contains mtimes),
|
||||
- # FILEDEPENDSX and FILEDEPENDSN.
|
||||
- # Also FILELANGS (or?)
|
||||
- QF="[%{FILENAMES} %{FILEFLAGS} %{FILESTATES} %{FILEMODES:octal} %{FILEUSERNAME} %{FILEGROUPNAME} %{FILERDEVS} %{FILEVERIFYFLAGS} %{FILELINKTOS}\n]\\n"
|
||||
- # ??? what to do with FILEPROVIDE and FILEREQUIRE?
|
||||
-
|
||||
- check_header $oldrpm | trim_release_old > $file1
|
||||
- check_header $newrpm | trim_release_new > $file2
|
||||
-
|
||||
- echo "comparing filelist"
|
||||
- if ! diff -au $file1 $file2; then
|
||||
- if test -z "$check_all"; then
|
||||
- rm $file1 $file2
|
||||
- return 1
|
||||
- fi
|
||||
- fi
|
||||
-
|
||||
+ get_value QF_FILELIST $spec_old | trim_release_old > $file_old
|
||||
+ get_value QF_FILELIST $spec_new | trim_release_new > $file_new
|
||||
+ comp_file filelist $file_old $file_new || return 1
|
||||
+
|
||||
# now the md5sums. if they are different, we check more detailed
|
||||
# if there are different filenames, we will already have aborted before
|
||||
# file flag 64 means "ghost", filter those out.
|
||||
- QF="[%{FILENAMES} %{FILEMD5S} %{FILEFLAGS}\n]\\n"
|
||||
- check_header $oldrpm |grep -v " 64$"| trim_release_old > $file1
|
||||
- check_header $newrpm |grep -v " 64$"| trim_release_new > $file2
|
||||
-
|
||||
+ get_value QF_CHECKSUM $spec_old | grep -v " 64$" | trim_release_old > $file_old
|
||||
+ get_value QF_CHECKSUM $spec_new | grep -v " 64$" | trim_release_new > $file_new
|
||||
RES=2
|
||||
# done if the same
|
||||
echo "comparing file checksum"
|
||||
- if cmp -s $file1 $file2; then
|
||||
+ if cmp -s $file_old $file_new; then
|
||||
RES=0
|
||||
fi
|
||||
-
|
||||
+
|
||||
# Get only files with different MD5sums
|
||||
- files=`diff -U0 $file1 $file2 | fgrep -v +++ | grep ^+ | cut -b2- | awk '{print $1}'`
|
||||
+ files=`diff -U0 $file_old $file_new | fgrep -v +++ | grep ^+ | cut -b2- | awk '{print $1}'`
|
||||
|
||||
if test -f "$sh"; then
|
||||
echo "creating rename script"
|
||||
@@ -261,7 +280,7 @@ function cmp_spec ()
|
||||
done >> "${sh}"
|
||||
fi
|
||||
#
|
||||
- rm $file1 $file2
|
||||
+ rm $file_old $file_new
|
||||
return $RES
|
||||
}
|
||||
|
||||
--
|
||||
2.9.0
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
From a78fe4f792a9ac9f4d364e836c8855f48561d6f2 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Yang <liezhi.yang@windriver.com>
|
||||
Date: Thu, 14 Jul 2016 19:52:18 -0700
|
||||
Subject: [PATCH 3/4] pkg-diff.sh: check for fifo(named pipe)
|
||||
|
||||
Otherwise "cmp -s fifo1 fifo2" will wait for inputing forever.
|
||||
|
||||
Upstream-Status: Submitted [https://github.com/openSUSE/build-compare/pull/10]
|
||||
|
||||
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
|
||||
---
|
||||
pkg-diff.sh | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/pkg-diff.sh b/pkg-diff.sh
|
||||
index 5dd3a38..1f353aa 100644
|
||||
--- a/pkg-diff.sh
|
||||
+++ b/pkg-diff.sh
|
||||
@@ -735,6 +735,13 @@ check_single_file()
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
+ fifo*pipe*)
|
||||
+ ftype_new="`/usr/bin/file new/$file | sed -e 's@^[^:]\+:[[:blank:]]*@@' -e 's@[[:blank:]]*$@@'`"
|
||||
+ if [ "$ftype_new" = "$ftype" ]; then
|
||||
+ return 0
|
||||
+ fi
|
||||
+ return 1
|
||||
+ ;;
|
||||
*)
|
||||
if ! diff_two_files; then
|
||||
return 1
|
||||
--
|
||||
2.9.0
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
From 657983ef9ca8f8354172682e17408c4f6b5bc667 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Yang <liezhi.yang@windriver.com>
|
||||
Date: Thu, 14 Jul 2016 19:46:08 -0700
|
||||
Subject: [PATCH 1/4] pkg-diff.sh: check_single_file(): return at once when
|
||||
same
|
||||
|
||||
If the two files are the same, return at once, this can save a lot of
|
||||
time when there are archives inside archives.
|
||||
|
||||
Upstream-Status: Submitted [https://github.com/openSUSE/build-compare/pull/10]
|
||||
|
||||
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
|
||||
---
|
||||
pkg-diff.sh | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/pkg-diff.sh b/pkg-diff.sh
|
||||
index 3cf10aa..402d4a4 100644
|
||||
--- a/pkg-diff.sh
|
||||
+++ b/pkg-diff.sh
|
||||
@@ -293,6 +293,13 @@ check_compressed_file()
|
||||
check_single_file()
|
||||
{
|
||||
local file="$1"
|
||||
+
|
||||
+ # If the two files are the same, return at once.
|
||||
+ if [ -f old/$file -a -f new/$file ]; then
|
||||
+ if cmp -s old/$file new/$file; then
|
||||
+ return 0
|
||||
+ fi
|
||||
+ fi
|
||||
case $file in
|
||||
*.spec)
|
||||
sed -i -e "s,Release:.*$release1,Release: @RELEASE@," old/$file
|
||||
--
|
||||
2.9.0
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
From 836a6783df9c582a834fca239f227063a5687715 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Yang <liezhi.yang@windriver.com>
|
||||
Date: Thu, 14 Jul 2016 19:49:12 -0700
|
||||
Subject: [PATCH 2/4] pkg-diff.sh: remove space in the end for ftype
|
||||
|
||||
Versions of file like 5.14 returns a " " in the end, for example:
|
||||
ftype="directory ", but we need ftype="directory", remove the space to
|
||||
fix the problem.
|
||||
|
||||
Upstream-Status: Submitted [https://github.com/openSUSE/build-compare/pull/10]
|
||||
|
||||
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
|
||||
---
|
||||
pkg-diff.sh | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/pkg-diff.sh b/pkg-diff.sh
|
||||
index 402d4a4..5dd3a38 100644
|
||||
--- a/pkg-diff.sh
|
||||
+++ b/pkg-diff.sh
|
||||
@@ -633,7 +633,7 @@ check_single_file()
|
||||
;;
|
||||
esac
|
||||
|
||||
- ftype=`/usr/bin/file old/$file | sed 's@^[^:]\+:[[:blank:]]*@@'`
|
||||
+ ftype=`/usr/bin/file old/$file | sed -e 's@^[^:]\+:[[:blank:]]*@@' -e 's@[[:blank:]]*$@@'`
|
||||
case $ftype in
|
||||
PE32\ executable*Mono\/\.Net\ assembly*)
|
||||
echo "PE32 Mono/.Net assembly: $file"
|
||||
--
|
||||
2.9.0
|
||||
|
||||
Reference in New Issue
Block a user