Date: Sun, 14 Jul 2024 13:18:03 +0000 From: bugzilla-noreply@freebsd.org To: ports-bugs@FreeBSD.org Subject: [Bug 280275] ports-mgmt/pkg: Wrong exit code in periodic script 490.status-pkg-changes Message-ID: <bug-280275-7788@https.bugs.freebsd.org/bugzilla/>
next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D280275 Bug ID: 280275 Summary: ports-mgmt/pkg: Wrong exit code in periodic script 490.status-pkg-changes Product: Ports & Packages Version: Latest Hardware: Any OS: Any Status: New Severity: Affects Only Me Priority: --- Component: Individual Port(s) Assignee: pkg@FreeBSD.org Reporter: andrestoebe@gmail.com Assignee: pkg@FreeBSD.org Flags: maintainer-feedback?(pkg@FreeBSD.org) Created attachment 252043 --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=3D252043&action= =3Dedit Patch for 490.status-pkg-changes I'm using the following periodic configuration, which should notify me when packages have changed: daily_show_success=3D"NO" daily_status_pkg_changes_enable=3D"YES" The script /usr/local/etc/periodic/daily/490.status-pkg-changes is run, but= due to a bug in the list_pkgs function, the return code is not set correctly. Here's the function: 11 list_pkgs() { 12 local pkgargs=3D"$1" 13 local bak_file=3D"$2" 14 local rc 15 16 bak=3D/var/backups 17 18 [ -r $bak/$bak_file ] && mv -f $bak/$bak_file $bak/${bak_file}2 19 ${pkgcmd} ${pkgargs} info > $bak/$bak_file 20 rc=3D$? 21 22 cmp -sz $bak/$bak_file $bak/${bak_file}2 23 if [ $? -eq 1 ]; then 24 diff -U 0 $bak/${bak_file}2 $bak/${bak_file} | \ 25 grep '^[-+][^-+]' | sort -k 1.2 26 fi 27 28 return $rc 29 } On line 19, the return code, $rc, is set to the exit code of "pkg info", wh= ich is usually 0 (success), whether packages have changed or not. The comparison on line 22 however doesn't change $rc, even though it should= , to signal that packages have changed. Otherwise, the overall exit code of the periodic script is 0 and won't get picked up when $daily_show_success is disabled. Additionally, although not responsible for the specific problem: In list_pkgs_all() on line 51 and in each following loop, $rc is explicitly se= t to 1 after invocation of list_pkgs(). $rc being overwritten there multiple tim= es is certainly not correct. Of course, all of this builds on the assumption that 1) no package changes = =3D success 2) package changes =3D info. So, to fix both of these issues, what about this diff? I also attached it w= ith hopefully correct formatting. Kind regards, Andre --- /usr/local/etc/periodic/daily/490.status-pkg-changes 2024-05-23 03:05:49.000000000 +0200 +++ 490.status-pkg-changes 2024-07-14 14:50:22.429206000 +0200 @@ -20,7 +20,8 @@ rc=3D$? cmp -sz $bak/$bak_file $bak/${bak_file}2 - if [ $? -eq 1 ]; then + rc=3D$? + if [ $rc -eq 1 ]; then diff -U 0 $bak/${bak_file}2 $bak/${bak_file} | \ grep '^[-+][^-+]' | sort -k 1.2 fi @@ -32,6 +33,7 @@ local rc local jails local bak_file + local list_rc local rc=3D0 : ${daily_status_pkg_changes_chroots=3D$pkg_chroots} @@ -48,7 +50,8 @@ fi list_pkgs '' pkg.bak - [ $? -ne 0 ] && rc=3D1 + list_rc=3D$? + [ $list_rc -gt $rc ] && rc=3D$list_rc for c in $daily_status_pkg_changes_chroots ; do echo @@ -56,7 +59,8 @@ bak_file=3D"pkg.chroot-$(echo $c | tr -C a-zA-Z0-9.- _).bak" list_pkgs "-c $c" $bak_file - [ $? -ne 0 ] && rc=3D1 + list_rc=3D$? + [ $list_rc -gt $rc ] && rc=3D$list_rc done case $daily_status_pkg_changes_jails in @@ -77,7 +81,8 @@ bak_file=3D"pkg.jail-$(echo $j | tr -C a-zA-Z0-9.- _).bak" list_pkgs "-j $j" $bak_file - [ $? -ne 0 ] && rc=3D1 + list_rc=3D$? + [ $list_rc -gt $rc ] && rc=3D$list_rc done return $rc --=20 You are receiving this mail because: You are the assignee for the bug.=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-280275-7788>