#985795 apticron: When NOTIFY_HOLDS=0, ignore new packages depended on by held ones

#985795#5
Date:
2021-03-23 20:40:42 UTC
From:
To:
Package: apticron
Version: 1.2.3+nmu1
Severity: normal

From 5a522f855b1bb79d237b44b4757b2878e60ebe70 Mon Sep 17 00:00:00 2001
From: Jonathan Kamens <jik@kamens.us>
Date: Tue, 23 Mar 2021 16:25:09 -0400
Subject: [PATCH 2/2] When NOTIFY_HOLDS=0, ignore new packages depended on by
 held ones

When NOTIFY_HOLDS=0, apticron shouldn't notify about a new package
that is an install candidate only because it is a dependency of the
new version of a package currently being held.

For example, if linux-headers-generic is held and NOTIFY_HOLDS=0,
then apticron shouldn't notify about a kernel-specific headers
package, i.e., linux-headers-#-generic, that the new version of
linux-headers-generic depends on.

To implement this, I've changed the script so that when
NOTIFY_HOLDS=0 it invokes `apt-get dist-upgrade` without the
`--ignore-hold` and `--allow-change-held-packages` flags.

With this change, I'm not sure if the logic which queries hold lists
from `aptitude` and `dpkg` is necessary any longer. I don't think it
is, but I'm not 100% certain, so I've left it in since it doesn't hurt
anything.

Note that this patch won't apply cleanly unless my other fix
(https://bugs.launchpad.net/bugs/1921000,
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=985794) is applied
first.
---
 apticron | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/apticron b/apticron
index aba64e7..1d16332 100755
--- a/apticron
+++ b/apticron
@@ -132,6 +132,8 @@ APTITUDE_HOLDS=`grep "^State: 2" -B 3 /var/lib/aptitude/pkgstates 2>/dev/null |g
 DSELECT_HOLDS=`dpkg --get-selections |grep "hold$" |cut -f1 |sed -e "s/:$(dpkg --print-architecture)$//"`

 if [ "$NOTIFY_HOLDS" = "0" ]; then
+	PKGNAMES=`/usr/bin/apt-get -q -y --allow-unauthenticated -s dist-upgrade | \
+                  /bin/grep ^Inst | /usr/bin/cut -d\  -f2 | /usr/bin/sort`
 	# packages hold by aptitude don't go to the upgrading candidates list
 	for p in $APTITUDE_HOLDS; do
 		PKGNAMES=`echo $PKGNAMES |sed "s/\(^\| \)$p\( \|$\)/ /g;s/^ //g"`