pkgfoster: save the list of adopted packages in a tidy format

This commit is contained in:
John McQuah 2022-05-29 12:37:33 -04:00
parent 150c874481
commit 0485af9be2
2 changed files with 26 additions and 27 deletions

View File

@ -10,24 +10,25 @@
.fam T
.fi
.SH DESCRIPTION
\fBpkgfoster\fP is a simple interactive script you can use to clean up orphaned packages (i.e.,
packages not listed in the "Depends on: " line of any other installed package). It uses
prt-cache by default, so remember to build the cache with "prt-get cache". You can also
use normal prt-get by modifying the PRT_GET variable. The bash array FOSTERED
is read from and written to ~/.config/pkgfoster.conf, as a means of preserving your choices
regarding which packages to keep. If you run \fBpkgfoster\fP as a non-root user, make sure the user
is able to elevate permissions using sudo, doas, or 'su -c'.
\fBpkgfoster\fP is a simple interactive script you can use to clean up orphaned
packages (i.e., packages not listed in the "Depends on: " line of any other installed
package). It uses prt-cache by default, so remember to build the cache with "prt-get
cache". You can also use normal prt-get by modifying the PRT_GET variable. The file
~/.config/pkgfoster.keep is used to preserve your decisions regarding which packages
to keep. If you run \fBpkgfoster\fP as a non-root user, make sure the user is able to
elevate permissions using sudo, doas, or 'su -c'.
.PP
Packages from the core collection are never considered for deletion, since some of them
might provide runtime dependencies yet not be listed in the "Depends on: " line. See
\fBPkgfile\fP(5) for an explanation of this practice.
.PP
Some packages flagged by \fBpkgfoster\fP might actually be optional (soft) dependencies of other
packages on your system. Use \fBrevdep\fP(1) to identify any breakage that you introduce by
removing these misidentified orphans, and rebuild the affected ports using
Some packages flagged by \fBpkgfoster\fP might actually be optional (soft)
dependencies of other packages on your system. Use \fBrevdep\fP(1) to identify any
breakage that you introduce by removing these misidentified orphans, and rebuild the
affected ports using
.B prt\-get update \-fr
(see \fBprt\-get\fP(8) for more detailed examples).
.SH AUTHORS
Jukka Heino <jukka@karsikkopuu.net>
.SH SEE ALSO
\fBprt\-cache\fP(8), \fBprt\-get\fP(8), \fBrevdep\fP(1)
\fBprt\-cache\fP(8), \fBprt\-get\fP(8), \fBPkgfile\fP(5), \fBrevdep\fP(1)

View File

@ -4,11 +4,11 @@
# Jukka Heino <jukka@karsikkopuu.net>
#
# pkgfoster is a simple script you can use to clean up orphaned packages (i.e.
# packages which no other package depends on). It uses prt-cache by default, so
# remember to build the cache with "prt-get cache". You can also use normal
# prt-get by modifying the PRT_GET variable. An array of packages to keep
# is stored in the FOSTERED variable. Packages from core are never considered
# for deletion.
# packages which do not appear in the "Depends on: " line of any other installed
# package). It uses prt-cache by default, so remember to build the cache with
# "prt-get cache". You can also use normal prt-get by modifying the PRT_GET
# variable. The file ~/.config/pkgfoster.keep contains a list of all packages
# you've decided to keep. Packages from core are never considered for deletion.
#
PRT_GET=prt-cache
@ -26,17 +26,20 @@ else
fi
BASE=$(awk '/^[[:space:]]*prtdir.*\/core/ {print $2}' /etc/prt-get.conf)
CONF=${XDG_CONFIG_HOME:="$HOME/.config"}/pkgfoster.conf
[ -f $CONF ] && . $CONF || mkdir -p ${XDG_CONFIG_HOME}
CONF="${XDG_CONFIG_HOME:="$HOME/.config"}/pkgfoster.keep"
if [ ! -f "$CONF" ]; then
mkdir -p "${XDG_CONFIG_HOME}"
touch "$CONF"
fi
echo "Checking packages for orphans..."
while true ; do
RECHECK=0
orphans=$(comm -13 <(cat <(find "$BASE" -maxdepth 1 -type d -printf "%f\n") \
<(for (( k=0; k<${#FOSTERED[@]}; k++ )); do echo "${FOSTERED[$k]}"; done) \
| sort -u) <($PRT_GET listorphans | sort) | tr '\n' ' ')
orphans=$(comm -23 <($PRT_GET listorphans | sort) \
<(cat <(find "$BASE" -maxdepth 1 -type d -printf "%f\n") "$CONF" \
| sort -u) | tr '\n' ' ')
for PACKAGE in ${orphans[@]}; do
echo
@ -50,16 +53,11 @@ while true ; do
$PKGRM $PACKAGE
RECHECK=1
else
FOSTERED=( $PACKAGE ${FOSTERED[@]} )
echo $PACKAGE >> "$CONF"
fi
done
if [ "$RECHECK" = "0" ] ; then
echo -n "FOSTERED=(" > $CONF
for (( k=0; k<${#FOSTERED[@]}; k++ )); do
echo -n "${FOSTERED[$k]} " >> $CONF
done
echo ")" >> $CONF
exit 0
fi