apkg-clean (1703B)
1 #!/bin/sh 2 # 3 # this script is for cleanup old packages and sources 4 # 5 # usage: 6 # apkg-clean | xargs rm 7 # 8 9 [ -f /etc/apkg.conf ] && . /etc/apkg.conf 10 11 scan_pkgs() { 12 [ "$APKG_PACKAGE_DIR" ] && allpkg=$(echo $APKG_PACKAGE_DIR/*.spm 2>/dev/null) 13 for i in $(apkg -s); do 14 . $(apkg -p $i)/abuild 2>/dev/null 15 if [ ! "$APKG_PACKAGE_DIR" ]; then 16 for p in $(apkg -p $i)/*.spm; do 17 [ -f $p ] || continue 18 [ "${p##*/}" = "$name#$version-$release.spm" ] && continue 19 echo $p 20 done 21 else 22 allpkg=$(echo $allpkg | sed "s|$APKG_PACKAGE_DIR/$name#$version-$release.spm||") 23 fi 24 done 25 [ "$APKG_PACKAGE_DIR" ] && echo $allpkg | tr ' ' '\n' 26 } 27 28 scan_srcs() { 29 [ "$APKG_SOURCE_DIR" ] && allsrc=$(echo $APKG_SOURCE_DIR/* 2>/dev/null) 30 for i in $(apkg -s); do 31 . $(apkg -p $i)/abuild 2>/dev/null 32 unset keep 33 for s in $source; do 34 s=${s%::noextract} 35 case $s in 36 *::*) keep="$keep ${s%::*}";; 37 */*) keep="$keep ${s##*/}";; 38 *) [ "$APKG_SOURCE_DIR" ] || keep="$keep $s";; 39 esac 40 done 41 if [ ! "$APKG_SOURCE_DIR" ]; then 42 (cd $(apkg -p $i) 43 for f in *; do 44 case $f in 45 abuild|depends|preinstall|postinstall|*.spm) continue;; 46 esac 47 echo $keep | tr ' ' '\n' | grep -qx $f || echo $PWD/$f 48 done 49 ) 50 else 51 for f in $keep; do 52 allsrc=$(echo $allsrc | sed "s|$APKG_SOURCE_DIR/$f||") 53 done 54 fi 55 done 56 [ "$APKG_SOURCE_DIR" ] && echo $allsrc | tr ' ' '\n' 57 } 58 59 print_help() { 60 cat <<EOF 61 usage: 62 $0 [-p] [-s] | xargs rm -v 63 64 options: 65 -s print sources only 66 -p print packages only 67 68 EOF 69 } 70 71 if [ "$1" ]; then 72 while [ "$1" ]; do 73 case $1 in 74 -p) scan_pkgs;; 75 -s) scan_srcs;; 76 -h) print_help;; 77 esac 78 shift 79 done 80 else 81 scan_pkgs 82 scan_srcs 83 fi 84 85 exit 0