From f834fc4700053cb9a83956c98835b0a158cc054c Mon Sep 17 00:00:00 2001 From: Levente Polyak Date: Sun, 11 Dec 2022 16:16:16 +0100 Subject: db: command for Pacman database modification like update, move etc --- contrib/completion/zsh/_devtools.in | 26 ++++++++++++ doc/man/pkgctl-db-move.1.asciidoc | 24 +++++++++++ doc/man/pkgctl-db-remove.1.asciidoc | 26 ++++++++++++ doc/man/pkgctl-db-update.1.asciidoc | 23 +++++++++++ doc/man/pkgctl.1.asciidoc | 4 ++ src/lib/db.sh | 80 +++++++++++++++++++++++++++++++++++++ src/lib/db/move.sh | 64 +++++++++++++++++++++++++++++ src/lib/db/remove.sh | 69 ++++++++++++++++++++++++++++++++ src/lib/db/update.sh | 46 +++++++++++++++++++++ src/pkgctl.in | 9 +++++ 10 files changed, 371 insertions(+) create mode 100644 doc/man/pkgctl-db-move.1.asciidoc create mode 100644 doc/man/pkgctl-db-remove.1.asciidoc create mode 100644 doc/man/pkgctl-db-update.1.asciidoc create mode 100644 src/lib/db.sh create mode 100644 src/lib/db/move.sh create mode 100644 src/lib/db/remove.sh create mode 100644 src/lib/db/update.sh diff --git a/contrib/completion/zsh/_devtools.in b/contrib/completion/zsh/_devtools.in index 3395338..62d9fea 100644 --- a/contrib/completion/zsh/_devtools.in +++ b/contrib/completion/zsh/_devtools.in @@ -34,6 +34,31 @@ _pkgctl_auth_status_args=( '(-h --help)'{-h,--help}'[Display usage]' ) +_pkgctl_db_cmds=( + "pkgctl db command" + "move[Move packages between pacman repositories]" + "remove[Remove packages from pacman repositories]" + "update[Update the pacman database as final release step]" +) + +_pkgctl_db_move_args=( + '(-h --help)'{-h,--help}'[Display usage]' + "1:src-repo:($_repos[*])" + "2:target-repo:($_repos[*])" + '*:pkgbase:_devtools_completions_all_packages' +) + +_pkgctl_db_remove_args=( + '(-a --arch=)'{-a,--arch=}"[Override the architecture (disables auto-detection)]:arch:($_arch[*])" + '(-h --help)'{-h,--help}'[Display usage]' + "1:repo:($_repos[*])" + '*:pkgbase:_devtools_completions_all_packages' +) + +_pkgctl_db_update_args=( + '(-h --help)'{-h,--help}'[Display usage]' +) + _pkgctl_repo_cmds=( "pkgctl repo command" "clone[Clone a package repository]" @@ -178,6 +203,7 @@ _devtools_completions_all_packages() { _pkgctl_cmds=( "pkgctl command" "auth[Authenticate with services like GitLab]" + "db[Pacman database modification for packge update, move etc]" "diff[Compare package files using different modes]" "repo[Manage Git packaging repositories and their configuration]" ) diff --git a/doc/man/pkgctl-db-move.1.asciidoc b/doc/man/pkgctl-db-move.1.asciidoc new file mode 100644 index 0000000..1ee02f8 --- /dev/null +++ b/doc/man/pkgctl-db-move.1.asciidoc @@ -0,0 +1,24 @@ +pkgctl-db-move(1) +================= + +Name +---- +pkgctl-db-update - Update the binary repository as final release step + +Synopsis +-------- +pkgctl db update [OPTIONS] + +Description +----------- + +Update the pacman database as final release step for packages that +have been transfered and staged on 'repos.archlinux.org'. + +Options +------- + +*-h, --help*:: + Show a help text + +include::include/footer.asciidoc[] diff --git a/doc/man/pkgctl-db-remove.1.asciidoc b/doc/man/pkgctl-db-remove.1.asciidoc new file mode 100644 index 0000000..a95766d --- /dev/null +++ b/doc/man/pkgctl-db-remove.1.asciidoc @@ -0,0 +1,26 @@ +pkgctl-db-remove(1) +=================== + +Name +---- +pkgctl-db-remove - Remove packages from binary repositories + +Synopsis +-------- +pkgctl db remove [OPTIONS] [REPO] [PKGBASE]... + +Description +----------- + +Remove packages from pacman repositories. + +Options +------- + +*-a, --arch* 'ARCH':: + Override the architecture (disables auto-detection) + +*-h, --help*:: + Show a help text + +include::include/footer.asciidoc[] diff --git a/doc/man/pkgctl-db-update.1.asciidoc b/doc/man/pkgctl-db-update.1.asciidoc new file mode 100644 index 0000000..fa7205e --- /dev/null +++ b/doc/man/pkgctl-db-update.1.asciidoc @@ -0,0 +1,23 @@ +pkgctl-db-move(1) +================= + +Name +---- +pkgctl-db-move - Move packages between binary repositories + +Synopsis +-------- +pkgctl db move [OPTIONS] [SOURCE_REPO] [TARGET_REPO] [PKGBASE]... + +Description +----------- + +Move packages between pacman repositories. + +Options +------- + +*-h, --help*:: + Show a help text + +include::include/footer.asciidoc[] diff --git a/doc/man/pkgctl.1.asciidoc b/doc/man/pkgctl.1.asciidoc index 45d5187..93fed5b 100644 --- a/doc/man/pkgctl.1.asciidoc +++ b/doc/man/pkgctl.1.asciidoc @@ -20,6 +20,9 @@ Subcommands pkgctl auth:: Authenticate with services like GitLab +pkgctl db:: + Pacman database modification for packge update, move etc + pkgctl diff:: Compare package files using different modes @@ -30,6 +33,7 @@ See Also -------- linkman:pkgctl-auth[1] +linkman:pkgctl-db[1] linkman:pkgctl-diff[1] linkman:pkgctl-repo[1] diff --git a/src/lib/db.sh b/src/lib/db.sh new file mode 100644 index 0000000..397ff0d --- /dev/null +++ b/src/lib/db.sh @@ -0,0 +1,80 @@ +#!/hint/bash +# +# SPDX-License-Identifier: GPL-3.0-or-later + +[[ -z ${DEVTOOLS_INCLUDE_DB_SH:-} ]] || return 0 +DEVTOOLS_INCLUDE_DB_SH=1 + +_DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@} + +set -e + + +pkgctl_db_usage() { + local -r COMMAND=${_DEVTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} + cat <<- _EOF_ + Usage: ${COMMAND} [COMMAND] [OPTIONS] + + Pacman database modification for packge update, move etc + + COMMANDS + move Move packages between pacman repositories + remove Remove packages from pacman repositories + update Update the pacman database as final release step + + OPTIONS + -h, --help Show this help text + + EXAMPLES + $ ${COMMAND} move extra-staging extra-testing libfoo libbar + $ ${COMMAND} remove core-testing libfoo libbar + $ ${COMMAND} update +_EOF_ +} + +pkgctl_db() { + if (( $# < 1 )); then + pkgctl_db_usage + exit 0 + fi + + # option checking + while (( $# )); do + case $1 in + -h|--help) + pkgctl_db_usage + exit 0 + ;; + move) + _DEVTOOLS_COMMAND+=" $1" + shift + # shellcheck source=src/lib/db/move.sh + source "${_DEVTOOLS_LIBRARY_DIR}"/lib/db/move.sh + pkgctl_db_move "$@" + exit 0 + ;; + remove) + _DEVTOOLS_COMMAND+=" $1" + shift + # shellcheck source=src/lib/db/remove.sh + source "${_DEVTOOLS_LIBRARY_DIR}"/lib/db/remove.sh + pkgctl_db_remove "$@" + exit 0 + ;; + update) + _DEVTOOLS_COMMAND+=" $1" + shift + # shellcheck source=src/lib/db/update.sh + source "${_DEVTOOLS_LIBRARY_DIR}"/lib/db/update.sh + pkgctl_db_update "$@" + exit 0 + ;; + -*) + die "invalid argument: %s" "$1" + ;; + *) + die "invalid command: %s" "$1" + ;; + esac + done +} diff --git a/src/lib/db/move.sh b/src/lib/db/move.sh new file mode 100644 index 0000000..825b350 --- /dev/null +++ b/src/lib/db/move.sh @@ -0,0 +1,64 @@ +#!/hint/bash +# +# SPDX-License-Identifier: GPL-3.0-or-later + +[[ -z ${DEVTOOLS_INCLUDE_DB_MOVE_SH:-} ]] || return 0 +DEVTOOLS_INCLUDE_DB_MOVE_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_move_usage() { + local -r COMMAND=${_DEVTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} + cat <<- _EOF_ + Usage: ${COMMAND} [OPTIONS] [SOURCE_REPO] [TARGET_REPO] [PKGBASE]... + + Move packages between binary repositories. + + OPTIONS + -h, --help Show this help text + + EXAMPLES + $ ${COMMAND} extra-staging extra-testing libfoo libbar + $ ${COMMAND} extra core libfoo libbar +_EOF_ +} + +pkgctl_db_move() { + local SOURCE_REPO="" + local TARGET_REPO="" + local PKGBASES=() + + # option checking + while (( $# )); do + case $1 in + -h|--help) + pkgctl_db_move_usage + exit 0 + ;; + -*) + die "invalid argument: %s" "$1" + ;; + *) + break + ;; + esac + done + + if (( $# < 3 )); then + pkgctl_db_move_usage + exit 1 + fi + + SOURCE_REPO=$1 + TARGET_REPO=$2 + shift 2 + PKGBASES+=("$@") + + # shellcheck disable=SC2029 + ssh "${PACKAGING_REPO_RELEASE_HOST}" db-move "${SOURCE_REPO}" "${TARGET_REPO}" "${PKGBASES[@]}" +} diff --git a/src/lib/db/remove.sh b/src/lib/db/remove.sh new file mode 100644 index 0000000..ba21c83 --- /dev/null +++ b/src/lib/db/remove.sh @@ -0,0 +1,69 @@ +#!/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 binary repositories. + + OPTIONS + -a, --arch Override the architecture (disables auto-detection) + -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 ARCH=any + local PKGBASES=() + + # option checking + while (( $# )); do + case $1 in + -h|--help) + pkgctl_db_remove_usage + exit 0 + ;; + -a|--arch) + (( $# <= 1 )) && die "missing argument for %s" "$1" + 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+=("$@") + + # shellcheck disable=SC2029 + ssh "${PACKAGING_REPO_RELEASE_HOST}" db-remove "${REPO}" "${ARCH}" "${PKGBASES[@]}" +} diff --git a/src/lib/db/update.sh b/src/lib/db/update.sh new file mode 100644 index 0000000..269720d --- /dev/null +++ b/src/lib/db/update.sh @@ -0,0 +1,46 @@ +#!/hint/bash +# +# SPDX-License-Identifier: GPL-3.0-or-later + +[[ -z ${DEVTOOLS_INCLUDE_DB_UPDATE_SH:-} ]] || return 0 +DEVTOOLS_INCLUDE_DB_UPDATE_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_update_usage() { + local -r COMMAND=${_DEVTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} + cat <<- _EOF_ + Usage: ${COMMAND} [OPTIONS] + + Update the binary repository as final release step for packages that + have been transfered and staged on ${PACKAGING_REPO_RELEASE_HOST}. + + OPTIONS + -h, --help Show this help text + + EXAMPLES + $ ${COMMAND} +_EOF_ +} + +pkgctl_db_update() { + # option checking + while (( $# )); do + case $1 in + -h|--help) + pkgctl_db_update_usage + exit 0 + ;; + *) + die "invalid argument: %s" "$1" + ;; + esac + done + + ssh "${PACKAGING_REPO_RELEASE_HOST}" db-update +} diff --git a/src/pkgctl.in b/src/pkgctl.in index e024d1f..d9e1b4c 100644 --- a/src/pkgctl.in +++ b/src/pkgctl.in @@ -20,6 +20,7 @@ usage() { COMMANDS auth Authenticate with services like GitLab + db Pacman database modification for packge update, move etc diff Compare package files using different modes repo Manage Git packaging repositories and their configuration @@ -60,6 +61,14 @@ while (( $# )); do pkgctl_auth "$@" exit 0 ;; + db) + _DEVTOOLS_COMMAND+=" $1" + shift + # shellcheck source=src/lib/auth.sh + source "${_DEVTOOLS_LIBRARY_DIR}"/lib/db.sh + pkgctl_db "$@" + exit 0 + ;; diff) _DEVTOOLS_COMMAND+=" $1" shift -- cgit v1.2.3-70-g09d2