#!/bin/sh # # Cleanup old packages and sources # # usage: # apkg-clean [-p] [-s] | xargs rm # Given a source entry from an abuild, return the filename that would be stored. source_filename() { s=${1%::noextract} case $s in *::*) printf '%s' "${s%%::*}";; *) printf '%s' "${s##*/}";; esac } # Print stale .spm package files (old versions that don't match current name#version-release.spm). stale_packages() { if [ "$APKG_PACKAGE_DIR" ]; then # Collect all current .spm names, then check the centralized dir once. keep="" for i in $(apkg -s 2>/dev/null); do dir=$(apkg -p "$i" 2>/dev/null) || continue unset name version release . "$dir/abuild" 2>/dev/null keep="$keep $name#$version-$release.spm" done for f in "$APKG_PACKAGE_DIR"/*.spm; do [ -f "$f" ] || continue case " $keep " in *" ${f##*/} "*) continue;; esac printf '%s\n' "$f" done else for i in $(apkg -s 2>/dev/null); do dir=$(apkg -p "$i" 2>/dev/null) || continue unset name version release . "$dir/abuild" 2>/dev/null current="$name#$version-$release.spm" for f in "$dir"/*.spm; do [ -f "$f" ] || continue [ "${f##*/}" != "$current" ] && printf '%s\n' "$f" done done fi } # Print stale source files (not referenced by any package's current source variable). stale_sources() { if [ "$APKG_SOURCE_DIR" ]; then # Collect all current source filenames across all recipes. keep="" for i in $(apkg -s 2>/dev/null); do dir=$(apkg -p "$i" 2>/dev/null) || continue unset source . "$dir/abuild" 2>/dev/null for s in $source; do keep="$keep $(source_filename "$s")" done done for f in "$APKG_SOURCE_DIR"/*; do [ -f "$f" ] || continue case " $keep " in *" ${f##*/} "*) continue;; esac printf '%s\n' "$f" done else # Check each recipe directory, filtering out recipe files and current sources. for i in $(apkg -s 2>/dev/null); do dir=$(apkg -p "$i" 2>/dev/null) || continue unset source . "$dir/abuild" 2>/dev/null keep="" for s in $source; do keep="$keep $(source_filename "$s")" done (cd "$dir" 2>/dev/null || continue for f in *; do [ -f "$f" ] || continue case $f in abuild|depends|preinstall|postinstall|info|\ *.spm|.shasum|.files) continue;; esac case " $keep " in *" $f "*) continue;; esac printf '%s\n' "$PWD/$f" done ) done fi } do_pkg=true do_src=true for arg; do case $arg in -p) do_src=false;; -s) do_pkg=false;; -h) cat <