#!/hint/bash # # SPDX-License-Identifier: GPL-3.0-or-later [[ -z ${DEVTOOLS_INCLUDE_DB_REMOVE_SH:-} ]] || return 0 DEVTOOLS_INCLUDE_DB_REMOVE_SH=1 _DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@} # shellcheck source=src/lib/common.sh source "${_DEVTOOLS_LIBRARY_DIR}"/lib/common.sh set -e pkgctl_db_remove_usage() { local -r COMMAND=${_DEVTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} cat <<- _EOF_ Usage: ${COMMAND} [OPTIONS] [REPO] [PKGBASE]... 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 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 $ ${COMMAND} core-testing libfoo libbar $ ${COMMAND} --arch x86_64 core libyay _EOF_ } pkgctl_db_remove() { local REPO="" local PKGBASES=() local partial=0 local dbscripts_options=() # option checking while (( $# )); do case $1 in -h|--help) pkgctl_db_remove_usage exit 0 ;; --partial) partial=1 dbscripts_options+=(--partial) shift ;; -a|--arch) (( $# <= 1 )) && die "missing argument for %s" "$1" dbscripts_options+=(--arch "$2") shift 2 ;; -*) die "invalid argument: %s" "$1" ;; *) break ;; esac done if (( $# < 2 )); then pkgctl_db_remove_usage exit 1 fi REPO=$1 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 echo ssh "${PACKAGING_REPO_RELEASE_HOST}" db-remove "${dbscripts_options[@]}" "${REPO}" "${PKGBASES[@]}" }