Compare commits

...

3 Commits

Author SHA1 Message Date
Josephine Pfeiffer
1c00adc474 Merge branch 'gl-261-confirm-move' into 'master'
[GL#261] add db move confirmation prompt

Closes #261

See merge request archlinux/devtools!304
2025-08-11 00:12:29 +00:00
Josephine Pfeiffer
f5c8258784 Merge branch 'master' of gitlab.archlinux.org:pfeifferj/devtools into gl-261-confirm-move 2025-03-18 22:26:52 +01:00
Josephine Pfeiffer
c169f5c7ab feat(pgkctl_db): require confirmation for package repository moves
The pkgctl db move command previously executed without confirmation,
which could lead to accidental package moves between repositories.
This change adds a confirmation prompt similar to deletion operations,
while preserving the ability to bypass confirmation with a new --noconfirm flag.

This approach prevents unintended package moves while maintaining efficiency:
- Confirmation prompt provides a safety check before executing moves
- The --noconfirm flag allows for scripting and automation when needed
- Implementation follows consistent patterns used in other pkgctl commands

Package move operations can have significant impact on repository management,
and this small usability improvement helps prevent mistakes that could
affect multiple users or require additional corrective actions.

Fixes #261

Component: pkgctl db move
Signed-off-by: Josephine Pfeiffer <hi@josie.lol>
2025-03-18 22:07:30 +01:00

View File

@@ -8,6 +8,8 @@ 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
# shellcheck source=src/lib/valid-repos.sh
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/valid-repos.sh
set -e
@@ -20,6 +22,7 @@ pkgctl_db_move_usage() {
Move packages between binary repositories.
OPTIONS
--noconfirm Bypass any confirmation messages, should only be used with caution
-h, --help Show this help text
EXAMPLES
@@ -29,9 +32,12 @@ _EOF_
}
pkgctl_db_move() {
local SOURCE_REPO=""
local TARGET_REPO=""
local PKGBASES=()
if (( $# < 3 )); then
pkgctl_db_move_usage
exit 1
fi
local CONFIRM=1
# option checking
while (( $# )); do
@@ -40,6 +46,10 @@ pkgctl_db_move() {
pkgctl_db_move_usage
exit 0
;;
--noconfirm)
CONFIRM=0
shift
;;
-*)
die "invalid argument: %s" "$1"
;;
@@ -49,16 +59,35 @@ pkgctl_db_move() {
esac
done
if (( $# < 3 )); then
pkgctl_db_move_usage
exit 1
local source_repo=$1
local target_repo=$2
shift 2
if ! in_array "${source_repo}" "${DEVTOOLS_VALID_REPOS[@]}"; then
die "Invalid source repository: %s" "${source_repo}"
fi
if ! in_array "${target_repo}" "${DEVTOOLS_VALID_REPOS[@]}"; then
die "Invalid target repository: %s" "${target_repo}"
fi
SOURCE_REPO=$1
TARGET_REPO=$2
shift 2
PKGBASES+=("$@")
if (( CONFIRM )); then
local pkglist
pkglist=$(printf '%s\n' "$@" | paste -sd ' ')
read -r -p "Move packages from [${source_repo}] to [${target_repo}]: ${pkglist}? [Y/n] " response
case ${response} in
[Yy][Ee][Ss]|[Yy]|'')
: # continue
;;
*)
exit 0
;;
esac
fi
# shellcheck disable=SC2029
ssh "${PACKAGING_REPO_RELEASE_HOST}" db-move "${SOURCE_REPO}" "${TARGET_REPO}" "${PKGBASES[@]}"
local pkgbase
for pkgbase in "$@"; do
msg "Moving [%s] from [%s] to [%s]" "${pkgbase}" "${source_repo}" "${target_repo}"
# shellcheck disable=SC2046
db-move "${source_repo}" "${target_repo}" $(pacman -Sql "${source_repo}" | grep "^${pkgbase}" || echo "${pkgbase}")
done
}