aboutsummaryrefslogtreecommitdiff
path: root/apkg-clean
diff options
context:
space:
mode:
Diffstat (limited to 'apkg-clean')
-rwxr-xr-xapkg-clean85
1 files changed, 85 insertions, 0 deletions
diff --git a/apkg-clean b/apkg-clean
new file mode 100755
index 0000000..06ff1c6
--- /dev/null
+++ b/apkg-clean
@@ -0,0 +1,85 @@
+#!/bin/sh
+#
+# this script is for cleanup old packages and sources
+#
+# usage:
+# apkg-clean | xargs rm
+#
+
+[ -f /etc/apkg.conf ] && . /etc/apkg.conf
+
+scan_pkgs() {
+ [ "$APKG_PACKAGE_DIR" ] && allpkg=$(echo $APKG_PACKAGE_DIR/*.spm 2>/dev/null)
+ for i in $(apkg -s); do
+ . $(apkg -p $i)/info
+ if [ ! "$APKG_PACKAGE_DIR" ]; then
+ for p in $(apkg -p $i)/*.spm; do
+ [ -f $p ] || continue
+ [ "${p##*/}" = "$name#$version-$release.spm" ] && continue
+ echo $p
+ done
+ else
+ allpkg=$(echo $allpkg | sed "s|$APKG_PACKAGE_DIR/$name#$version-$release.spm||")
+ fi
+ done
+ [ "$APKG_PACKAGE_DIR" ] && echo $allpkg | tr ' ' '\n'
+}
+
+scan_srcs() {
+ [ "$APKG_SOURCE_DIR" ] && allsrc=$(echo $APKG_SOURCE_DIR/* 2>/dev/null)
+ for i in $(apkg -s); do
+ . $(apkg -p $i)/info
+ unset keep
+ for s in $source; do
+ s=${s%::noextract}
+ case $s in
+ *::*) keep="$keep ${s%::*}";;
+ */*) keep="$keep ${s##*/}";;
+ *) [ "$APKG_SOURCE_DIR" ] || keep="$keep $s";;
+ esac
+ done
+ if [ ! "$APKG_SOURCE_DIR" ]; then
+ (cd $(apkg -p $i)
+ for f in *; do
+ case $f in
+ info|depends|prebuild|build|postbuild|preinstall|postinstall|*.spm) continue;;
+ esac
+ echo $keep | tr ' ' '\n' | grep -qx $f || echo $PWD/$f
+ done
+ )
+ else
+ for f in $keep; do
+ allsrc=$(echo $allsrc | sed "s|$APKG_SOURCE_DIR/$f||")
+ done
+ fi
+ done
+ [ "$APKG_SOURCE_DIR" ] && echo $allsrc | tr ' ' '\n'
+}
+
+print_help() {
+ cat <<EOF
+usage:
+ $0 [-p] [-s] | xargs rm -v
+
+options:
+ -s print sources only
+ -p print packages only
+
+EOF
+}
+
+if [ "$1" ]; then
+ while [ "$1" ]; do
+ case $1 in
+ -p) scan_pkgs;;
+ -s) scan_srcs;;
+ -h) print_help;;
+ esac
+ shift
+ done
+else
+ scan_pkgs
+ scan_srcs
+fi
+
+exit 0