mirror of
https://github.com/systemd/systemd.git
synced 2026-11-06 13:27:45 +00:00
systemd-sysupdate copies the "user.uapi.match_…" extended attributes of files in UAPI.16 manifests onto the files it installs, which restrict the files to specific systems (hostname, machine ID, machine tags, os-release image/OS ID and version). Let's honour them when picking entries from .v/ directories too: entries whose extended attributes don't match the local system are skipped, as if they didn't exist. The system properties are only loaded once an entry actually carries one of the attributes. Entries referenced literally, i.e. without making use of .v/ logic, are not filtered. This may be turned off with the new PICK_IGNORE_XATTR_MATCH flag, which systemd-vpick exposes as --match-xattr=no.
67 lines
2.1 KiB
Bash
67 lines
2.1 KiB
Bash
# shellcheck shell=bash
|
|
# systemd-vpick(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-vpick() {
|
|
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} words cword
|
|
local comps
|
|
|
|
local -A OPTS=(
|
|
[STANDALONE]='--help -h --version'
|
|
[ARG]='-B --basename -V -A -S --suffix -t --type -p --print --resolve --match-xattr'
|
|
)
|
|
|
|
_init_completion || return
|
|
|
|
if __contains_word "$prev" ${OPTS[ARG]}; then
|
|
case $prev in
|
|
-A)
|
|
comps="native secondary uname auto $(systemd-analyze --no-legend --no-pager architectures 2>/dev/null | { while read -r a _; do echo " $a"; done; })"
|
|
;;
|
|
-t|--type)
|
|
comps='reg dir lnk chr blk fifo sock'
|
|
;;
|
|
-p|--print)
|
|
comps='filename version type arch tries all'
|
|
;;
|
|
--resolve|--match-xattr)
|
|
comps='yes no'
|
|
;;
|
|
esac
|
|
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
|
|
return 0
|
|
fi
|
|
|
|
if [[ "$cur" = -* ]] || [[ -z ${comps-} ]]; then
|
|
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
|
|
return 0
|
|
fi
|
|
|
|
COMPREPLY=( $(compgen -W '${comps-}' -- "$cur") )
|
|
return 0
|
|
}
|
|
|
|
complete -F _systemd-vpick systemd-vpick
|