mirror of
https://github.com/openSUSE/snapper.git
synced 2026-02-05 15:46:00 +01:00
change read-only state (gh#openSUSE/snapper#804) - support read-only options for LVM - allow to set a snapshot as default (gh#openSUSE/snapper#803)
273 lines
8.3 KiB
Bash
273 lines
8.3 KiB
Bash
# snapper(8) autocompletion
|
|
|
|
_snapper()
|
|
{
|
|
local configdir="/etc/snapper/configs"
|
|
local cur prev words cword
|
|
_init_completion || return
|
|
|
|
local GLOBAL_SNAPPER_OPTIONS='
|
|
-q --quiet
|
|
-v --verbose
|
|
--utc
|
|
--iso
|
|
-t --table-style
|
|
--abbreviate
|
|
--machine-readable
|
|
--csvout
|
|
--jsonout
|
|
--separator
|
|
-c --config
|
|
--no-dbus
|
|
-r --root
|
|
-a --ambit
|
|
--version
|
|
--help
|
|
'
|
|
|
|
# see if the user selected a command already
|
|
local COMMANDS=(
|
|
"list-configs" "create-config" "delete-config" "get-config" "set-config"
|
|
"list" "ls"
|
|
"create" "modify" "delete" "remove" "rm"
|
|
"mount" "umount"
|
|
"status" "diff" "xadiff"
|
|
"undochange" "rollback"
|
|
"setup-quota"
|
|
"cleanup")
|
|
|
|
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
|
|
;;
|
|
--config|-c)
|
|
local configs=()
|
|
# Get basenames of config files in "$configdir"
|
|
for configfile in "$configdir"/*; do
|
|
configs+=("${configfile##*/}")
|
|
done
|
|
COMPREPLY=( $( compgen -W "${configs[*]}" -- "$cur" ) )
|
|
return 0
|
|
;;
|
|
--machine-readable)
|
|
COMPREPLY=( $( compgen -W 'csv json' -- "$cur" ) )
|
|
return 0
|
|
;;
|
|
--root|-r)
|
|
COMPREPLY=( $( compgen -f -- "$cur" ) )
|
|
return 0
|
|
;;
|
|
esac
|
|
|
|
# supported options per command
|
|
if [[ "$cur" == -* ]]; then
|
|
case $command in
|
|
list-configs)
|
|
# --columns completion not implemented
|
|
COMPREPLY=( $( compgen -W '--columns
|
|
' -- "$cur" ))
|
|
return 0
|
|
;;
|
|
create-config)
|
|
COMPREPLY=( $( compgen -W '--fstype -f
|
|
--template -t' -- "$cur" ) )
|
|
return 0
|
|
;;
|
|
list|ls)
|
|
COMPREPLY=( $( compgen -W '--type -t
|
|
--disable-used-space
|
|
--all-configs -a
|
|
--columns' -- "$cur" ) )
|
|
return 0
|
|
;;
|
|
create)
|
|
COMPREPLY=( $( compgen -W '--type -t
|
|
--pre-number
|
|
--print-number -p
|
|
--description -d
|
|
--cleanup-algorithm -c
|
|
--userdata -u
|
|
--command
|
|
--read-only
|
|
--read-write
|
|
--from' -- "$cur" ) )
|
|
return 0
|
|
;;
|
|
modify)
|
|
COMPREPLY=( $( compgen -W '--description -d
|
|
--cleanup-algorithm -c
|
|
--userdata -u
|
|
--read-only
|
|
--read-write
|
|
--default' -- "$cur" ) )
|
|
return 0
|
|
;;
|
|
delete|remove|rm)
|
|
COMPREPLY=( $( compgen -W '--sync -s
|
|
' -- "$cur" ) )
|
|
return 0
|
|
;;
|
|
status)
|
|
COMPREPLY=( $( compgen -W '--output -o
|
|
' -- "$cur" ) )
|
|
return 0
|
|
;;
|
|
diff)
|
|
COMPREPLY=( $( compgen -W '--input -i
|
|
--diff-cmd
|
|
--extensions -x' -- "$cur" ) )
|
|
return 0
|
|
;;
|
|
undochange)
|
|
COMPREPLY=( $( compgen -W '--input -i
|
|
' -- "$cur" ) )
|
|
return 0
|
|
;;
|
|
rollback)
|
|
COMPREPLY=( $( compgen -W '--print-number -p
|
|
--description -d
|
|
--cleanup-algorithm -c
|
|
--userdata -u' -- "$cur" ) )
|
|
return 0
|
|
;;
|
|
cleanup)
|
|
COMPREPLY=( $( compgen -W '--path --free-space
|
|
' -- "$cur" ) )
|
|
return 0
|
|
;;
|
|
*)
|
|
COMPREPLY=( $( compgen -W "$GLOBAL_SNAPPER_OPTIONS" -- "$cur" ) )
|
|
return 0
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
# specific command arguments
|
|
if [[ -n $command ]]; then
|
|
case $command in
|
|
list-configs)
|
|
case "$prev" in
|
|
--columns)
|
|
COMPREPLY=( $( compgen -W 'config subvolume
|
|
' -- "$cur" ) )
|
|
;;
|
|
esac
|
|
return 0
|
|
;;
|
|
create-config)
|
|
case "$prev" in
|
|
--fstype|-f)
|
|
COMPREPLY=( $( compgen -W 'btrfs ext4 lvm(xfs) lvm(ext4)
|
|
' -- "$cur" ) )
|
|
;;
|
|
--template|-t)
|
|
;;
|
|
*)
|
|
COMPREPLY=( $( compgen -f -- "$cur" ) )
|
|
;;
|
|
esac
|
|
return 0
|
|
;;
|
|
list)
|
|
case "$prev" in
|
|
--type|-t)
|
|
COMPREPLY=( $( compgen -W 'all single pre-post
|
|
' -- "$cur" ) )
|
|
;;
|
|
--columns)
|
|
COMPREPLY=( $( compgen -W 'config subvolume number
|
|
default active type date user used-space cleanup
|
|
description userdata pre-number post-number
|
|
post-date read-only
|
|
' -- "$cur" ) )
|
|
;;
|
|
esac
|
|
return 0
|
|
;;
|
|
create)
|
|
case "$prev" in
|
|
--type|-t)
|
|
COMPREPLY=( $( compgen -W 'single pre post
|
|
' -- "$cur" ) )
|
|
;;
|
|
--pre-number)
|
|
COMPREPLY=( $( compgen -W '
|
|
' -- "$cur" ) )
|
|
;;
|
|
--cleanup-algorithm|-c)
|
|
COMPREPLY=( $( compgen -W 'empty-pre-post timeline number
|
|
' -- "$cur" ) )
|
|
;;
|
|
esac
|
|
return 0
|
|
;;
|
|
modify)
|
|
case "$prev" in
|
|
--cleanup-algorithm|-c)
|
|
COMPREPLY=( $( compgen -W 'empty-pre-post timeline number
|
|
' -- "$cur" ) )
|
|
;;
|
|
esac
|
|
return 0
|
|
;;
|
|
status)
|
|
case "$prev" in
|
|
--output|-o)
|
|
COMPREPLY=( $( compgen -f -- "$cur" ) )
|
|
;;
|
|
esac
|
|
return 0
|
|
;;
|
|
cleanup)
|
|
case "$prev" in
|
|
empty-pre-post|timeline|number)
|
|
;;
|
|
--path)
|
|
COMPREPLY=( $( compgen -f -- "$cur" ) )
|
|
;;
|
|
*)
|
|
COMPREPLY=( $( compgen -W 'empty-pre-post timeline number
|
|
' -- "$cur" ) )
|
|
;;
|
|
esac
|
|
return 0
|
|
;;
|
|
diff)
|
|
return 0
|
|
;;
|
|
undochange)
|
|
return 0
|
|
;;
|
|
rollback)
|
|
case "$prev" in
|
|
--cleanup-algorithm|-c)
|
|
COMPREPLY=( $( compgen -W 'empty-pre-post timeline number
|
|
' -- "$cur" ) )
|
|
;;
|
|
esac
|
|
return 0
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
# no command yet, show what commands we have
|
|
if [ "$command" = "" ]; then
|
|
#COMPREPLY=( $( compgen -W '${COMMANDS[@]} ${GLOBAL_SNAPPER_OPTIONS[@]}' -- "$cur" ) )
|
|
COMPREPLY=( $( compgen -W "${COMMANDS[*]}" -- "$cur" ) )
|
|
fi
|
|
|
|
return 0
|
|
} &&
|
|
complete -F _snapper snapper
|