| #!/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 |