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@} _DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@}
# shellcheck source=src/lib/common.sh # shellcheck source=src/lib/common.sh
source "${_DEVTOOLS_LIBRARY_DIR}"/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 set -e
@@ -20,6 +22,7 @@ pkgctl_db_move_usage() {
Move packages between binary repositories. Move packages between binary repositories.
OPTIONS OPTIONS
--noconfirm Bypass any confirmation messages, should only be used with caution
-h, --help Show this help text -h, --help Show this help text
EXAMPLES EXAMPLES
@@ -29,9 +32,12 @@ _EOF_
} }
pkgctl_db_move() { pkgctl_db_move() {
local SOURCE_REPO="" if (( $# < 3 )); then
local TARGET_REPO="" pkgctl_db_move_usage
local PKGBASES=() exit 1
fi
local CONFIRM=1
# option checking # option checking
while (( $# )); do while (( $# )); do
@@ -40,6 +46,10 @@ pkgctl_db_move() {
pkgctl_db_move_usage pkgctl_db_move_usage
exit 0 exit 0
;; ;;
--noconfirm)
CONFIRM=0
shift
;;
-*) -*)
die "invalid argument: %s" "$1" die "invalid argument: %s" "$1"
;; ;;
@@ -49,16 +59,35 @@ pkgctl_db_move() {
esac esac
done done
if (( $# < 3 )); then local source_repo=$1
pkgctl_db_move_usage local target_repo=$2
exit 1 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 fi
SOURCE_REPO=$1 if (( CONFIRM )); then
TARGET_REPO=$2 local pkglist
shift 2 pkglist=$(printf '%s\n' "$@" | paste -sd ' ')
PKGBASES+=("$@") 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 local pkgbase
ssh "${PACKAGING_REPO_RELEASE_HOST}" db-move "${SOURCE_REPO}" "${TARGET_REPO}" "${PKGBASES[@]}" 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
} }