6c933bbf3c
Our complicated heuristics for handling multiple packages of the same name comes back to bite us. In the multilib case, we can have packages of the same NEVR, but different arch, sitting in the same tree. Previously, even if the arch was different, we would still mark it as an upgrade or downgrade. But that complicates things in the case of multiple packages of the same name in the same tree. We greatly simplify things here by making the diff algorithm dumber. We now only consider a package as "modified" (i.e. upgraded/downgraded) if it has the same NA (but different EVR). This makes handling multilib cases natural and seems worth it overall vs trying to handle the odd e.g. noarch <--> archful pkg transitions that could happen. Closes: #1230 Approved by: cgwalters
116 lines
3.6 KiB
Bash
Executable File
116 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Copyright (C) 2017 Jonathan Lebon <jlebon@redhat.com>
|
|
#
|
|
# This library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Lesser General Public
|
|
# License as published by the Free Software Foundation; either
|
|
# version 2 of the License, or (at your option) any later version.
|
|
#
|
|
# This library is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# Lesser General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
# License along with this library; if not, write to the
|
|
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
# Boston, MA 02111-1307, USA.
|
|
|
|
set -euo pipefail
|
|
|
|
. ${commondir}/libtest.sh
|
|
. ${commondir}/libvm.sh
|
|
|
|
set -x
|
|
|
|
# SUMMARY: check that `db` commands work correctly. Right now, we're only
|
|
# testing `db diff`.
|
|
|
|
YUMREPO=/tmp/vmcheck/yumrepo/packages/x86_64
|
|
|
|
check_diff() {
|
|
from=$1; shift
|
|
to=$1; shift
|
|
vm_rpmostree db diff --format=diff $from $to > diff.txt
|
|
assert_file_has_content diff.txt "$@"
|
|
}
|
|
|
|
check_not_diff() {
|
|
from=$1; shift
|
|
to=$1; shift
|
|
vm_rpmostree db diff --format=diff $from $to > diff.txt
|
|
assert_not_file_has_content diff.txt "$@"
|
|
}
|
|
|
|
vm_build_rpm pkg-to-remove
|
|
vm_build_rpm pkg-to-replace
|
|
vm_rpmostree install pkg-to-remove pkg-to-replace
|
|
|
|
booted_csum=$(vm_get_booted_csum)
|
|
pending_csum=$(vm_get_pending_csum)
|
|
check_diff $booted_csum $pending_csum \
|
|
+pkg-to-remove \
|
|
+pkg-to-replace
|
|
|
|
# now let's make the pending csum become an update
|
|
vm_cmd ostree commit -b vmcheck --tree=ref=$pending_csum
|
|
vm_rpmostree cleanup -p
|
|
vm_rpmostree upgrade
|
|
pending_csum=$(vm_get_pending_csum)
|
|
check_diff $booted_csum $pending_csum \
|
|
+pkg-to-remove \
|
|
+pkg-to-replace
|
|
echo "ok setup"
|
|
|
|
vm_rpmostree override remove pkg-to-remove
|
|
vm_build_rpm pkg-to-replace version 2.0
|
|
vm_rpmostree override replace $YUMREPO/pkg-to-replace-2.0-1.x86_64.rpm
|
|
vm_build_rpm pkg-to-overlay build 'echo same > pkg-to-overlay'
|
|
# some multilib handling tests (override default /bin script to skip conflicts)
|
|
vm_build_rpm pkg-to-overlay build 'echo same > pkg-to-overlay' arch i686
|
|
vm_build_rpm glibc arch i686
|
|
vm_rpmostree install pkg-to-overlay.{x86_64,i686} glibc.i686
|
|
pending_layered_csum=$(vm_get_pending_csum)
|
|
check_diff $booted_csum $pending_layered_csum \
|
|
+pkg-to-overlay-1.0-1.x86_64 \
|
|
+pkg-to-overlay-1.0-1.i686 \
|
|
+glibc-1.0-1.i686 \
|
|
+pkg-to-replace-2.0
|
|
# check that regular glibc is *not* in the list of modified/dropped packages
|
|
check_not_diff $booted_csum $pending_layered_csum \
|
|
=glibc \
|
|
!glibc \
|
|
-glibc \
|
|
=pkg-to-overlay \
|
|
!pkg-to-overlay \
|
|
-pkg-to-overlay
|
|
check_diff $pending_csum $pending_layered_csum \
|
|
+pkg-to-overlay-1.0-1.x86_64 \
|
|
+pkg-to-overlay-1.0-1.i686 \
|
|
+glibc-1.0-1.i686 \
|
|
-pkg-to-remove \
|
|
!pkg-to-replace-1.0 \
|
|
=pkg-to-replace-2.0
|
|
echo "ok db diff"
|
|
|
|
# this is a bit convoluted; basically, we prune the commit and only keep its
|
|
# metadata to check that `db diff` is indeed using the rpmdb.pkglist metadata
|
|
commit_path=$(get_obj_path /ostree/repo $pending_layered_csum commit)
|
|
vm_cmd test -f $commit_path
|
|
vm_cmd cp $commit_path $commit_path.bak
|
|
vm_rpmostree cleanup -p
|
|
vm_cmd test ! -f $commit_path
|
|
vm_cmd mv $commit_path.bak $commit_path
|
|
if vm_cmd ostree checkout --subpath /usr/share/rpm $pending_layered_csum; then
|
|
assert_not_reached "Was able to checkout /usr/share/rpm?"
|
|
fi
|
|
check_diff $pending_csum $pending_layered_csum \
|
|
+pkg-to-overlay-1.0-1.x86_64 \
|
|
+pkg-to-overlay-1.0-1.i686 \
|
|
+glibc-1.0-1.i686 \
|
|
-pkg-to-remove \
|
|
!pkg-to-replace-1.0 \
|
|
=pkg-to-replace-2.0
|
|
echo "ok db from pkglist.metadata"
|