blob: ab51157cc095a49fc6fb73782f3acadbf939c30d [file] [log] [blame]
#!/bin/sh -e
# This script can be called in the following ways:
#
# Before the package is removed:
# <prerm> remove
#
# Before an upgrade:
# <old-prerm> upgrade <new-version>
# if that fails:
# <new-prerm> failed-upgrade <old-version>
#
#
# Before package is deconfigured while dependency is replaced due to conflict:
# <prerm> deconfigure in-favour <new-package> <version>
# removing <old-package> <version>
#
# Before the package is replaced due to conflict:
# <prerm> remove in-favour <new-package> <version>
ensure_no_triggers_noawait()
{
admindir=${DPKG_ADMINDIR:-/var/lib/dpkg}
pkgadmindir=$admindir/info
trig_noawait=$(find "$pkgadmindir" -name "*.triggers" -type f | \
xargs -r grep -El "^(interest|activate)-(no)?await" | \
sed -e 's,^.*/\([^/.:]\+\)[^/]\+$,\1,')
# Abort if we cannot possibly downgrade
if [ -n "$trig_noawait" ]; then
cat <<- MSG
dpkg: error: You have packages using the "interest-noawait" and/or
"activate-noawait" trigger directives but the dpkg version that
you're trying to downgrade to doesn't support them. Aborting
downgrade.
List of affected packages:
$trig_noawait
MSG
exit 1
fi
bad_triggers_files=$(find "$admindir/triggers" -type f | \
xargs -r grep -l "/noawait$" || true)
if [ -n "$bad_triggers_files" ]; then
cat <<- MSG
dpkg: error: Some internal trigger files unexpectedly reference
packages tagged with "/noawait" while their corresponding
infodb files doesn't seem to contain any "interest-noawait"
directive. Aborting the downgrade as those tags are not supported
by the version you're trying to downgrade to.
List of internal trigger files that are affected:
$bad_triggers_files
MSG
exit 1
fi
}
case "$1" in
upgrade)
# Allow the downgrade only if no package is using the
# (interest|activate)-noawait trigger directives
if dpkg --compare-versions "$2" lt 1.16.1~; then
ensure_no_triggers_noawait
fi
;;
remove|failed-upgrade|deconfigure)
;;
*)
echo "$0 called with unknown argument \`$1'" 1>&2
exit 1
;;
esac
#DEBHELPER#
exit 0