aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcontrib/cpt-reset37
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 "$@"
}