From 7b553afcb25286d04dcb4cbf12e18745e8b0139a Mon Sep 17 00:00:00 2001 From: Levente Polyak Date: Sat, 27 Apr 2024 00:40:57 +0200 Subject: feat(db): add partial split package option to db remove By default passing a pkgbase removes all split packages, debug packages as well as entries from the state repo for all existing architectures. When using the `--partial` option it may most likely lead to undesired effects by leaving debug packages behind as well as dangling entries in the state repository. However, for specific use cases its required to get rid of old split package parts. Fixes #218 Component: pkgctl db remove Signed-off-by: Levente Polyak --- src/lib/db/remove.sh | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) (limited to 'src/lib/db') diff --git a/src/lib/db/remove.sh b/src/lib/db/remove.sh index ba21c83..018b793 100644 --- a/src/lib/db/remove.sh +++ b/src/lib/db/remove.sh @@ -17,10 +17,18 @@ pkgctl_db_remove_usage() { cat <<- _EOF_ Usage: ${COMMAND} [OPTIONS] [REPO] [PKGBASE]... - Remove packages from binary repositories. + Remove packages from pacman repositories. By default passing a pkgbase removes + all split packages, debug packages as well as entries from the state repo for + all existing architectures. + + Beware when using the --partial option, as it may most likely lead to + undesired effects by leaving debug packages behind as well as dangling entries + in the state repository. OPTIONS - -a, --arch Override the architecture (disables auto-detection) + -a, --arch Remove only one specific architecture (disables auto-detection) + --partial Remove only partial pkgnames from a split package. This leaves + debug packages behind and pkgbase entries in the state repo. -h, --help Show this help text EXAMPLES @@ -31,8 +39,9 @@ _EOF_ pkgctl_db_remove() { local REPO="" - local ARCH=any local PKGBASES=() + local partial=0 + local dbscripts_options=() # option checking while (( $# )); do @@ -41,9 +50,14 @@ pkgctl_db_remove() { pkgctl_db_remove_usage exit 0 ;; + --partial) + partial=1 + dbscripts_options+=(--partial) + shift + ;; -a|--arch) (( $# <= 1 )) && die "missing argument for %s" "$1" - ARCH=$2 + dbscripts_options+=(--arch "$2") shift 2 ;; -*) @@ -64,6 +78,14 @@ pkgctl_db_remove() { shift PKGBASES+=("$@") + # print explenation about partial removal + if (( partial )); then + echo + msg_warn "${YELLOW}Removing only partial pkgnames from a split package.${ALL_OFF}" + msg_warn "${YELLOW}This leaves debug packages and pkgbase entries in the state repo!${ALL_OFF}" + fi + # shellcheck disable=SC2029 - ssh "${PACKAGING_REPO_RELEASE_HOST}" db-remove "${REPO}" "${ARCH}" "${PKGBASES[@]}" + echo + ssh "${PACKAGING_REPO_RELEASE_HOST}" db-remove "${dbscripts_options[@]}" "${REPO}" "${PKGBASES[@]}" } -- cgit v1.2.3-70-g09d2