1
0
mirror of https://github.com/openSUSE/snapper.git synced 2026-02-05 15:46:00 +01:00
Files
snapper/scripts/completion/snbk-completion.bash
James Lai 4b56ae55a0 Add snbk visualize command to produce tree diagrams of snapshots (#1085)
* Add snbk visualize command

* Add bash completion for snbk visualize

* Add documentation for snbk visualize command

* Remove access by reference for Rankdir enumeration

* Prevent graph text from being translated
2026-01-16 14:21:31 +00:00

112 lines
2.9 KiB
Bash

# snbk(8) autocompletion
_snbk()
{
local configdir="/etc/snapper/backup-configs"
local cur prev words cword
_init_completion || return
local GLOBAL_SNBK_OPTIONS='
-q --quiet
-v --verbose
--utc
--iso
-t --table-style
--machine-readable
--csvout
--jsonout
--separator
--no-headers
-b --backup-config
--no-dbus
--target-mode
--automatic
--version
--help
'
# see if the user selected a command already
local COMMANDS=(
"list-configs"
"list" "ls"
"transfer"
"restore"
"delete"
"transfer-and-delete"
"visualize")
local command i
for (( i=0; i < ${#words[@]}-1; i++ )); do
# Match word only either from start of string or after space to prevent options
# like -c from matching commands that have -c in them, like list-configs
if [[ ${COMMANDS[@]} =~ (^| )"${words[i]}" ]]; then
command=${words[i]}
break
fi
done
# Global options autocomplete
case $prev in
--version|--help)
return 0
;;
--backup-config|-b)
local configs=()
# Get basenames of config files in "$configdir"
for configfile in "$configdir"/*.json; do
configfile="${configfile##*/}"
configfile="${configfile%.*}"
configs+=("${configfile}")
done
COMPREPLY=( $( compgen -W "${configs[*]}" -- "$cur" ) )
return 0
;;
--machine-readable)
COMPREPLY=( $( compgen -W 'csv json' -- "$cur" ) )
return 0
;;
esac
# supported options per command
if [[ "$cur" == -* ]]; then
case $command in
visualize)
COMPREPLY=( $( compgen -W '--rankdir -r' -- "$cur" ) )
return 0
;;
*)
COMPREPLY=( $( compgen -W "$GLOBAL_SNBK_OPTIONS" -- "$cur" ) )
return 0
;;
esac
fi
# specific command arguments
if [[ -n $command ]]; then
case $command in
visualize)
case "$prev" in
--rankdir|-r)
COMPREPLY=( $( compgen -W 'TB LR BT RL' -- "$cur" ) )
;;
source-tree|target-tree)
;;
*)
COMPREPLY=( $( compgen -W 'source-tree target-tree' -- "$cur" ) )
;;
esac
return 0
;;
esac
fi
# no command yet, show what commands we have
if [ "$command" = "" ]; then
#COMPREPLY=( $( compgen -W '${COMMANDS[@]} ${GLOBAL_SNBK_OPTIONS[@]}' -- "$cur" ) )
COMPREPLY=( $( compgen -W "${COMMANDS[*]}" -- "$cur" ) )
fi
return 0
} &&
complete -F _snbk snbk