mirror of
https://github.com/openSUSE/snapper.git
synced 2026-02-05 15:46:00 +01:00
152 lines
5.6 KiB
Bash
152 lines
5.6 KiB
Bash
#compdef snapper
|
|
|
|
local options=(
|
|
{--quiet,-q}'[Suppress normal output]'
|
|
{--verbose,-v}'[Increase verbosity]'
|
|
--utc'[Display dates and times in UTC]'
|
|
--iso'[Display dates and times in ISO format]'
|
|
{--table-style,-t}'[Table style (integer)]:style:({0..11})'
|
|
--abbreviate'[Allow to abbreviate table columns]'
|
|
--machine-readable'[Set a machine-readable output format]:format:(csv json)'
|
|
--csvout --no-headers'[Set CSV output format]'
|
|
--jsonout'[Set JSON output format]'
|
|
--separator'[Character separator for CSV output format]:separator'
|
|
{--config,-c}'[Set name of config to use]:config:('${(f)$(command snapper --csvout --no-headers list-configs --columns config)}')'
|
|
--no-dbus'[Operate without DBus]'
|
|
{--root,-r}'[Operate on target root (works only without DBus)]: :_dirs'
|
|
{--ambit,-a}'[Operate in the specified ambit]:ambit:(auto classic transactional)'
|
|
"(- : *)"{--help,-h}'[Prints help information]'
|
|
"(- : *)"--version'[Print version and exit]'
|
|
)
|
|
|
|
local subcommands=(
|
|
'list-configs:List\ configs'
|
|
'create-config:Create\ config'
|
|
'delete-config:Delete\ config'
|
|
'get-config:Get\ config'
|
|
'set-config:Set\ config'
|
|
'list:List\ snapshots'
|
|
'create:Create\ snapshot'
|
|
'modify:Modify\ snapshot'
|
|
{delete,remove,rm}':Delete\ snapshot'
|
|
'mount:Mount\ snapshot'
|
|
'umount:Umount\ snapshot'
|
|
'status:Comparing\ snapshots'
|
|
'diff:Comparing\ snapshots'
|
|
'xadiff:Comparing\ snapshots\ extended\ attributes'
|
|
'undochange:Undo\ changes'
|
|
'rollback:Rollback'
|
|
'setup-quota:Setup\ quota'
|
|
'cleanup:Cleanup\ snapshots'
|
|
)
|
|
|
|
_arguments -s -S $options \
|
|
": :(($subcommands))" \
|
|
"*:: :->option-or-argument"
|
|
|
|
if [[ $state != option-or-argument ]]; then
|
|
return
|
|
fi
|
|
local curcontext=${curcontext%:*:*}:snapper-$words[1]:
|
|
local algorithms=(
|
|
'number:Deletes\ old\ snapshots\ when\ a\ certain\ number\ of\ snapshots\ is\ reached'
|
|
'timeline:Deletes\ old\ snapshots\ but\ keeps\ a\ number\ of\ hourly,\ daily,\ weekly,\ monthly,\ quarterly\ and\ yearly\ snapshots'
|
|
'empty-pre-post:Deletes\ pre/post\ snapshot\ pairs\ with\ empty\ diffs'
|
|
)
|
|
local type=(single pre post)
|
|
local _number=$(command snapper --csvout --no-headers --separator : list --columns number,description)
|
|
local number=${(f)_number}
|
|
local number_without_current=${${(f)_number}[2,-1]}
|
|
case $words[1] in
|
|
list-configs)
|
|
_arguments -s -S \
|
|
'--columns[Columns to show separated by comma]:columns:(config subvolume)'
|
|
;;
|
|
create-config)
|
|
# nixOS doesn't have /usr/share while it has /run/current-system/sw
|
|
# other distributions (except Android) have /usr/share or /usr/local/share
|
|
_arguments -s -S \
|
|
{--fstype,-f}'[Manually set filesystem type]:filesystem:(btrfs ext4 lvm)' \
|
|
{--template,-t}"[Name of config template to use]:template:(${$(echo /{usr{/local,},run/current-system/sw}/share/snapper/config-templates/*(N))##*/})" \
|
|
":subvolume"
|
|
;;
|
|
get-config)
|
|
_arguments -s -S \
|
|
--columns'[Columns to show separated by comma]:columns:(key value)'
|
|
;;
|
|
set-config)
|
|
_arguments -s -S \
|
|
":configdata"
|
|
;;
|
|
list)
|
|
_arguments -s -S \
|
|
{--type,-t}'[Type of snapshots to list]:type:(($type))' \
|
|
--disable-used-space'[Disable showing used space]' \
|
|
{--all,-a-configs}'[List snapshots from all accessible configs]' \
|
|
--columns'[Columns to show separated by comma]:columns:(config subvolume number default active type date user used-space cleanup description userdata pre-number post-number post-date read-only)'
|
|
;;
|
|
create)
|
|
_arguments -s -S \
|
|
{--type,-t}'[Type for snapshot]:type:(($type))' \
|
|
--pre-number'[Number of corresponding pre snapshot]:' \
|
|
{--print-number,-p}'[Print number of created snapshot]' \
|
|
{--description,-d}'[Description for snapshot]:description' \
|
|
{--cleanup-algorithm,-c}'[Cleanup algorithm for snapshot]:algorithms:(($algorithms))' \
|
|
{--userdata,-u}'[Userdata for snapshot]:userdata' \
|
|
--command'[Run command and create pre and post snapshots]: :{_command_names -e}' \
|
|
--read-only'[Create read-only snapshot]' \
|
|
--read-write'[Create read-write snapshot]' \
|
|
--from"[Create a snapshot from the specified snapshot]:number:(($number))"
|
|
;;
|
|
modify)
|
|
_arguments -s -S \
|
|
{--description,-d}'[Description for snapshot]:description' \
|
|
{--cleanup-algorithm,-c}'[Cleanup algorithm for snapshot]:algorithms:(($algorithms))' \
|
|
{--userdata,-u}'[Userdata for snapshot]:userdata' \
|
|
": :_files"
|
|
;;
|
|
(delete|remove|rm))
|
|
_arguments -s -S \
|
|
{--sync,-s}'[Sync after deletion]' \
|
|
"*::number without current:(($number_without_current))"
|
|
;;
|
|
(u|)mount|xadiff)
|
|
_arguments -s -S \
|
|
":number:(($number))" \
|
|
"*:: :_files"
|
|
;;
|
|
status)
|
|
_arguments -s -S \
|
|
{--output,-o}'[Save status to file]: :_files' \
|
|
":number:(($number))"
|
|
;;
|
|
diff)
|
|
_arguments -s -S \
|
|
{--input,-i}'[Read files to diff from file]: :_files' \
|
|
--diff-cmd'[Command used for comparing files]: :{_command_names -e}' \
|
|
{--extensions,-x}'[Extra options passed to the diff command]:diff options:_diff'
|
|
":number:(($number))" \
|
|
"*:: :_files"
|
|
;;
|
|
undochange)
|
|
_arguments -s -S \
|
|
{--input,-i}'[Read files for which to undo changes from file]: :_files'
|
|
":number:(($number))" \
|
|
"*:: :_files"
|
|
;;
|
|
rollback)
|
|
_arguments -s -S \
|
|
{--print-number,-p}'[Print number of second created snapshot]' \
|
|
{--description,-d}'[Description for snapshot]:description' \
|
|
{--cleanup-algorithm,-c}'[Cleanup algorithm for snapshot]:algorithms:(($algorithms))' \
|
|
{--userdata,-u}'[Userdata for snapshot]:userdata' \
|
|
":number:(($number))"
|
|
;;
|
|
cleanup)
|
|
_arguments -s -S \
|
|
--path'[Cleanup all configs affecting path.]: :_files' \
|
|
--free-space'[Try to make space available.]:space' \
|
|
":algorithms:(($algorithms))"
|
|
;;
|
|
esac
|