]> git.ipfire.org Git - thirdparty/snapper.git/commitdiff
- added simple bash completion for snbk 1025/head
authorArvin Schnell <aschnell@suse.de>
Fri, 4 Jul 2025 07:33:00 +0000 (09:33 +0200)
committerArvin Schnell <aschnell@suse.de>
Fri, 4 Jul 2025 07:33:00 +0000 (09:33 +0200)
configure.ac
scripts/Makefile.am
scripts/completion/Makefile.am [new file with mode: 0644]
scripts/completion/snapper-completion.bash [moved from scripts/bash-completion.bash with 100% similarity]
scripts/completion/snapper-completion.zsh [moved from scripts/zsh-completion.zsh with 100% similarity]
scripts/completion/snbk-completion.bash [new file with mode: 0644]
snapper.spec.in

index a13b03b3cbd8ef4763f36adf3786fa44a395c198..0d78d0f80ec1e2d8ec8c4527105d6b3c8069c70e 100644 (file)
@@ -234,6 +234,7 @@ AC_CONFIG_FILES([
        client/systemd-helper/Makefile
        client/snbk/Makefile
        scripts/Makefile
+       scripts/completion/Makefile
        pam/Makefile
        data/Makefile
        doc/Makefile
index 1f8176c2cba211853ffee4330a1c369e6f6ea06a..48a379658b0f107b9ab6ca1b79722d2b98ec3fd7 100644 (file)
@@ -2,6 +2,8 @@
 # Makefile.am for snapper/scripts
 #
 
+SUBDIRS = completion
+
 if HAVE_PAM
 
 pam_snapperdir = /usr/lib/pam_snapper
@@ -14,9 +16,7 @@ pam_snapper_SCRIPTS =                 \
 
 endif
 
-EXTRA_DIST = snapper-hourly bash-completion.bash zsh-completion.zsh $(pam_snapper_SCRIPTS)
+EXTRA_DIST = snapper-hourly $(pam_snapper_SCRIPTS)
 
 install-data-local:
        install -D snapper-hourly $(DESTDIR)/etc/cron.hourly/suse.de-snapper
-       install -D --mode a+r,u+w bash-completion.bash $(DESTDIR)/usr/share/bash-completion/completions/snapper
-       install -D --mode a+r,u+w zsh-completion.zsh $(DESTDIR)/usr/share/zsh/site-functions/_snapper
diff --git a/scripts/completion/Makefile.am b/scripts/completion/Makefile.am
new file mode 100644 (file)
index 0000000..3ab2c92
--- /dev/null
@@ -0,0 +1,10 @@
+#
+# Makefile.am for snapper/completion/scripts
+#
+
+EXTRA_DIST = snapper-completion.bash snapper-completion.zsh snbk-completion.bash
+
+install-data-local:
+       install -D --mode a+r,u+w snapper-completion.bash $(DESTDIR)/usr/share/bash-completion/completions/snapper
+       install -D --mode a+r,u+w snapper-completion.zsh $(DESTDIR)/usr/share/zsh/site-functions/_snapper
+       install -D --mode a+r,u+w snbk-completion.bash $(DESTDIR)/usr/share/bash-completion/completions/snbk
diff --git a/scripts/completion/snbk-completion.bash b/scripts/completion/snbk-completion.bash
new file mode 100644 (file)
index 0000000..cc8d674
--- /dev/null
@@ -0,0 +1,86 @@
+# 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"
+       "delete"
+       "transfer-and-delete")
+
+    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
+            *)
+                COMPREPLY=( $( compgen -W "$GLOBAL_SNBK_OPTIONS" -- "$cur" ) )
+                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
index 8daa3754340269280ea7bf39c67c8ef292191ad7..c21649ed997594f4dbc11ed96c047a99ee3528a3 100644 (file)
@@ -1,7 +1,7 @@
 #
 # spec file for package snapper
 #
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2025 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -230,8 +230,12 @@ test -f /etc/logrotate.d/snapper.rpmsave && mv -v /etc/logrotate.d/snapper.rpmsa
 %endif
 %{_datadir}/dbus-1/system.d/org.opensuse.Snapper.conf
 %{_datadir}/dbus-1/system-services/org.opensuse.Snapper.service
-%{_datadir}/bash-completion
-%{_datadir}/zsh
+%dir %{_datadir}/bash-completion
+%dir %{_datadir}/bash-completion/completions/
+%{_datadir}/bash-completion/completions/snapper
+%dir %{_datadir}/zsh
+%dir %{_datadir}/zsh/site-functions
+%{_datadir}/zsh/site-functions/_snapper
 
 %package -n libsnapper@LIBVERSION_MAJOR@
 Summary:        Library for filesystem snapshot management
@@ -356,6 +360,9 @@ A backup program for snapshots created by snapper.
 %{_unitdir}/snapper-{backup}.*
 %{_mandir}/*/snbk.8*
 %{_mandir}/*/snapper-backup-configs.5*
+%dir %{_datadir}/bash-completion
+%dir %{_datadir}/bash-completion/completions
+%{_datadir}/bash-completion/completions/snbk
 
 %package -n pam_snapper
 Requires:       pam