mirror of
https://github.com/systemd/systemd.git
synced 2025-01-21 22:04:01 +03:00
1c0ade2e1f
We nowadays support unprivileged invocation of systemd-nspawn + systemd-vmspawn, but there was no support for discovering suitable disk images (i.e. no per-user counterpart of /var/lib/machines). Add this now, and hook it up everywhere. Instead of hardcoding machined's, importd's, portabled's, sysupdated's image discovery to RUNTIME_SCOPE_SYSTEM I introduced a field that make the scope variable, even if this field is always initialized to RUNTIME_SCOPE_SYSTEM for now. I think these four services should eventually be updated to support a per-user concept too, this is preparation for that, even though it doesn't outright add support for this. This is for the largest part not user visible, except for in nspawn, vmspawn and the dissect tool. For the latter I added a pair of --user/--system switches to select the discovery scope.
131 lines
3.9 KiB
Bash
131 lines
3.9 KiB
Bash
# shellcheck shell=bash
|
|
# systemd-dissect(1) completion -*- shell-script -*-
|
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
#
|
|
# This file is part of systemd.
|
|
#
|
|
# systemd is free software; you can redistribute it and/or modify it
|
|
# under the terms of the GNU Lesser General Public License as published by
|
|
# the Free Software Foundation; either version 2.1 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# systemd is distributed in the hope that it will be useful, but
|
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public License
|
|
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
__contains_word() {
|
|
local w word=$1; shift
|
|
for w in "$@"; do
|
|
[[ $w = "$word" ]] && return
|
|
done
|
|
}
|
|
|
|
_systemd_dissect() {
|
|
local comps
|
|
local cur=${COMP_WORDS[COMP_CWORD]} prev_1=${COMP_WORDS[COMP_CWORD-1]} prev_2=${COMP_WORDS[COMP_CWORD-2]} words cword
|
|
local -A OPTS=(
|
|
[STANDALONE]='-h --help --version
|
|
--user
|
|
--system
|
|
--discover
|
|
--no-pager
|
|
--no-legend
|
|
-r --read-only
|
|
--mkdir
|
|
--rmdir
|
|
--in-memory'
|
|
[ARG]='-m --mount -M
|
|
-u --umount -U
|
|
--attach
|
|
--detach
|
|
-l --list
|
|
--mtree
|
|
--with
|
|
-x --copy-from
|
|
-a --copy-to
|
|
--validate
|
|
--fsck
|
|
--growfs
|
|
--discard
|
|
--root-hash
|
|
--root-hash-sig
|
|
--verity-data
|
|
--image-policy
|
|
--json
|
|
--loop-ref
|
|
--mtree-hash'
|
|
)
|
|
|
|
_init_completion || return
|
|
|
|
if __contains_word "$prev_1" ${OPTS[STANDALONE]}; then
|
|
case $prev_1 in
|
|
-h|--help|--version|--discover)
|
|
return 0
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
if [[ "$cur" = -* ]]; then
|
|
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
|
|
return 0
|
|
fi
|
|
|
|
if __contains_word "$prev_1" ${OPTS[ARG]}; then
|
|
case $prev_1 in
|
|
-l|--list|--mtree|-m|--mount|-M|--attach|--detach|-x|--copy-from|-a|--copy-to|--verity-data|--validate|--with)
|
|
comps=$(compgen -A file -- "$cur")
|
|
compopt -o filenames
|
|
;;
|
|
-u|--umount|-U)
|
|
comps=$(compgen -A directory -- "$cur")
|
|
compopt -o dirnames
|
|
;;
|
|
--fsck|--growfs|--mtree-hash)
|
|
comps='yes no'
|
|
;;
|
|
--discard)
|
|
comps='disabled loop all crypto'
|
|
;;
|
|
--root-hash-sig)
|
|
comps="base64: $(compgen -A file -- "$cur")"
|
|
compopt -o filenames
|
|
;;
|
|
--json)
|
|
comps='pretty short off'
|
|
;;
|
|
esac
|
|
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
|
|
return 0
|
|
fi
|
|
|
|
if __contains_word "$prev_2" ${OPTS[ARG]}; then
|
|
case $prev_2 in
|
|
-m|--mount|-M)
|
|
comps=$(compgen -A directory -- "$cur")
|
|
compopt -o dirnames
|
|
;;
|
|
--with)
|
|
comps=$(compgen -A command -- "$cur")
|
|
compopt -o filenames
|
|
;;
|
|
*)
|
|
comps=$(compgen -A file -- "$cur")
|
|
compopt -o filenames
|
|
;;
|
|
esac
|
|
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
|
|
return 0
|
|
fi
|
|
|
|
COMPREPLY=( $(compgen -A file -- "$cur") )
|
|
compopt -o filenames
|
|
return 0
|
|
}
|
|
|
|
complete -F _systemd_dissect systemd-dissect
|