extract shared snapshot and archive selection logic

This commit is contained in:
2026-08-22 07:36:30 +02:00
parent d243ea1c89
commit 73202f5e3b
+48 -47
View File
@@ -180,6 +180,30 @@ function may_select() {
echo "$value" echo "$value"
} }
function select_group() {
local groups
readarray -t groups < <(get_group_names)
(( ${#groups[@]} == 0 )) && return 2
PS3="Snapshot group [1-${#groups[@]}]: "
GROUP=$(may_select "$1" "${groups[@]}") || { echo "Error: invalid group" >&2; return 1; }
}
function select_snapshot_and_archive() {
local snapshots archives
readarray -t snapshots < <(get_snapshot_names)
(( ${#snapshots[@]} == 0 )) && return 2
PS3="Snapshot [1-${#snapshots[@]}]: "
SNAPSHOT=$(may_select "$1" "${snapshots[@]}") || { echo "Error: invalid snapshot" >&2; return 1; }
readarray -t archives < <(get_snapshot_files "$SNAPSHOT")
(( ${#archives[@]} == 0 )) && return 3
PS3="Archive [1-${#archives[@]}]: "
ARCHIVE=$(may_select "$2" "${archives[@]}") || { echo "Error: invalid archive" >&2; return 1; }
}
SCRIPT_PATH=$(realpath -s "$0") SCRIPT_PATH=$(realpath -s "$0")
SCRIPT_DIR=$(dirname "$(realpath "$0")") SCRIPT_DIR=$(dirname "$(realpath "$0")")
@@ -297,61 +321,38 @@ case "$action" in
pbc-list "${args[@]}" || exit $? pbc-list "${args[@]}" || exit $?
;; ;;
snapshot-list) snapshot-list)
readarray -t groups < <(get_group_names) select_group "${args[0]}"
(( ${#groups[@]} == 0 )) && echo "no snapshot groups found" && exit 0 case $? in
0) ;;
group=${args[0]} 2) echo "no snapshot groups found"; exit 0 ;;
args=("${args[@]:1}") *) exit 1 ;;
esac
PS3="Snapshot group [1-${#groups[@]}]: "
group=$(may_select "$group" "${groups[@]}") || { echo "Error: invalid group" >&2; exit 1; }
echo echo
pbc-snapshot-list "$group" "${args[@]}" || exit $? pbc-snapshot-list "$GROUP" "${args[@]:1}" || exit $?
;; ;;
catalog-shell) catalog-shell)
readarray -t snapshots < <(get_snapshot_names) select_snapshot_and_archive "${args[0]}" "${args[1]}"
(( ${#snapshots[@]} == 0 )) && echo "no snapshots found" && exit 0 case $? in
0) ;;
snapshot=${args[0]} 2) echo "no snapshots found"; exit 0 ;;
args=("${args[@]:1}") 3) echo "no archives found"; exit 0 ;;
*) exit 1 ;;
PS3="Snapshot [1-${#snapshots[@]}]: " esac
snapshot=$(may_select "$snapshot" "${snapshots[@]}") || { echo "Error: invalid snapshot" >&2; exit 1; }
readarray -t archives < <(get_snapshot_files "$snapshot")
(( ${#archives[@]} == 0 )) && echo "no archives found" && exit 0
archive=${args[0]}
args=("${args[@]:1}")
PS3="Archive [1-${#archives[@]}]: "
archive=$(may_select "$archive" "${archives[@]}") || { echo "Error: invalid archive" >&2; exit 1; }
echo echo
pbc-catalog-shell "$snapshot" "$archive" || exit $? pbc-catalog-shell "$SNAPSHOT" "$ARCHIVE" || exit $?
;; ;;
mount) mount)
readarray -t snapshots < <(get_snapshot_names) select_snapshot_and_archive "${args[0]}" "${args[1]}"
(( ${#snapshots[@]} == 0 )) && echo "no snapshots found" && exit 0 case $? in
0) ;;
2) echo "no snapshots found"; exit 0 ;;
3) echo "no archives found"; exit 0 ;;
*) exit 1 ;;
esac
snapshot=${args[0]} target=${args[2]}
args=("${args[@]:1}")
PS3="Snapshot [1-${#snapshots[@]}]: "
snapshot=$(may_select "$snapshot" "${snapshots[@]}") || { echo "Error: invalid snapshot" >&2; exit 1; }
readarray -t archives < <(get_snapshot_files "$snapshot")
(( ${#archives[@]} == 0 )) && echo "no archives found" && exit 0
archive=${args[0]}
args=("${args[@]:1}")
PS3="Archive [1-${#archives[@]}]: "
archive=$(may_select "$archive" "${archives[@]}") || { echo "Error: invalid archive" >&2; exit 1; }
target=${args[0]}
args=("${args[@]:1}")
if [ -z "$target" ]; then if [ -z "$target" ]; then
while [ -z "$target" ]; do while [ -z "$target" ]; do
@@ -367,7 +368,7 @@ case "$action" in
fi fi
echo echo
pbc-mount "$snapshot" "$archive" "$target" || exit $? pbc-mount "$SNAPSHOT" "$ARCHIVE" "$target" || exit $?
;; ;;
install) install)
(( EUID != 0 )) && echo "Error: installation only works as root!" >&2 && exit 1 (( EUID != 0 )) && echo "Error: installation only works as root!" >&2 && exit 1