diff options
Diffstat (limited to 'contrib/cpt-reset')
-rwxr-xr-x | contrib/cpt-reset | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/contrib/cpt-reset b/contrib/cpt-reset index 1226fe6..4dfe52d 100755 --- a/contrib/cpt-reset +++ b/contrib/cpt-reset @@ -1,24 +1,39 @@ -#!/bin/sh -ef +#!/bin/sh -e # Remove all packages except for the base # # Disable word-splittng warnings as they're safe here. # shellcheck disable=SC2046 -set -- +[ "$1" ] && { + printf 'usage: %s\n\nRemove all packages not defined in the base.\n' \ + "${0##*/}" + exit 0 +} -while read -r pkg _; do - case $pkg in - baselayout|binutils|bison|busybox|bzip2|curl|flex|gcc|rsync|\ - gzip|cpt|libressl|linux-headers|m4|make|musl|pkgconf|xz|zlib) ;; +sys_db="$CPT_ROOT/var/db/cpt/installed" + +# Get base packages and their dependencies. +[ -f "$CPT_ROOT/etc/cpt-base" ] && while read -r basepkg _; do + case "$basepkg" in \#*) continue; esac + base=" $basepkg $base" + [ -f "$sys_db/$basepkg/depends" ] || continue + while read -r dep make; do + [ "$make" ] && continue + base=" $dep $base" + done < "$sys_db/$basepkg/depends" +done < "$CPT_ROOT/etc/cpt-base" + +set -- +cd "$sys_db" - *) set -- "$@" "$pkg" ;; - esac -done <<EOF -$(cpt-list) -EOF +for pkg in *; do + case "$base" in *" $pkg "*) continue; esac + set -- "$pkg" "$@" +done [ "$1" ] && { printf 'WARNING: This will remove \033[1m%s\033[m package(s).\n' "$#" + printf 'Base packages can be redefined in %s\n' "$CPT_ROOT/etc/cpt-base" printf 'Continue? [Enter/Ctrl+C]\n' read -r _ && CPT_FORCE=1 cpt-remove "$@" } |