From cb76c36a6acf71e0a0808a7ed2558c144a243dba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20W=C3=B3jcik?= Date: Sat, 16 Jul 2022 18:48:47 +0200 Subject: [PATCH] xbps-src: add purge-binpkgs target Removes from local repository binary packages which do not match template version. Keeps in place packages for which template is missing. --- common/xbps-src/shutils/purge_binpkgs.sh | 35 ++++++++++++++++++++++++ xbps-src | 8 ++++++ 2 files changed, 43 insertions(+) create mode 100644 common/xbps-src/shutils/purge_binpkgs.sh diff --git a/common/xbps-src/shutils/purge_binpkgs.sh b/common/xbps-src/shutils/purge_binpkgs.sh new file mode 100644 index 000000000000..2e1c8135e28c --- /dev/null +++ b/common/xbps-src/shutils/purge_binpkgs.sh @@ -0,0 +1,35 @@ +# vim: set ts=4 sw=4 et: + +purge_binpkgs() { + purge_directory() { + export XBPS_TARGET_ARCH="${XBPS_CROSS_BUILD:-${XBPS_MACHINE}}" + for filepath in "${1}"/*."$XBPS_TARGET_ARCH".xbps; do + ( # read_pkg exits is some cases. Use subshell to continue loop. + filename=${filepath##*/} + pkgname=${filename%-*.${XBPS_TARGET_ARCH}.xbps} + if [ "${pkgname%-dbg}" != "${pkgname}" ] && ! [ -e "${XBPS_SRCPKGDIR}/${pkgname}/template" ] && [ -e "${XBPS_SRCPKGDIR}/${pkgname%-dbg}/template" ]; then + pkgname="${pkgname%-dbg}" + fi + export XBPS_TARGET_PKG="${pkgname}" + read_pkg ignore-problems + template_version="${version}_${revision}" + binpkg_version=${filename%.${XBPS_TARGET_ARCH}.xbps} + binpkg_version=${binpkg_version##*-} + if [ "${template_version}" = "_" ]; then + : + elif [ "${binpkg_version}" != "${template_version}" ]; then + rm -v "$filepath" + fi + ) + done + xbps-rindex -c "${1}" + for i in debug multilib nonfree; do + if [ -d "${1}/${i}" ]; then + purge_directory "${1}/${i}" + fi + done + } + + purge_directory "$XBPS_REPOSITORY" +} + diff --git a/xbps-src b/xbps-src index 4e8349091708..8ea7e0c5bc22 100755 --- a/xbps-src +++ b/xbps-src @@ -78,6 +78,11 @@ remove remove-autodeps Removes all package dependencies that were installed automatically. +purge-binpkgs + Removes from local repository binary packages which + do not match template version. + Keeps in place packages for which template is missing. + purge-distfiles Removes all obsolete distfiles in /sources. @@ -824,6 +829,9 @@ case "$XBPS_TARGET" in purge-distfiles) purge_distfiles ;; + purge-binpkgs) + purge_binpkgs + ;; show) read_pkg ignore-problems show_pkg $XBPS_PRINT_VARIABLES