diff --git a/man1/pkgfoster.1 b/man1/pkgfoster.1 index 523a10a..0ee3e5e 100644 --- a/man1/pkgfoster.1 +++ b/man1/pkgfoster.1 @@ -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 .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) diff --git a/scripts/pkgfoster b/scripts/pkgfoster index 64f05b3..69e4777 100755 --- a/scripts/pkgfoster +++ b/scripts/pkgfoster @@ -4,11 +4,11 @@ # Jukka Heino # # 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