diff --git a/1019-make-completion-smart-to-be-able-to-redirect.patch b/1019-make-completion-smart-to-be-able-to-redirect.patch new file mode 100644 index 0000000..d1425d8 --- /dev/null +++ b/1019-make-completion-smart-to-be-able-to-redirect.patch @@ -0,0 +1,236 @@ +--- systemd-208/shell-completion/bash/hostnamectl ++++ systemd-208/shell-completion/bash/hostnamectl 2014-01-17 14:27:16.183272019 +0000 +@@ -30,6 +30,10 @@ _hostnamectl() { + local OPTS='-h --help --version --transient --static --pretty + --no-ask-password -H --host' + ++ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then ++ return 0 ++ fi ++ + if [[ $cur = -* ]]; then + COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) + return 0 +@@ -58,4 +62,4 @@ _hostnamectl() { + return 0 + } + +-complete -F _hostnamectl hostnamectl ++complete -o default -o bashdefault -F _hostnamectl hostnamectl +--- systemd-208/shell-completion/bash/journalctl ++++ systemd-208/shell-completion/bash/journalctl 2014-01-17 14:34:30.338737694 +0000 +@@ -49,6 +49,10 @@ _journalctl() { + --verify-key' + ) + ++ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then ++ return 0 ++ fi ++ + if __contains_word "$prev" ${OPTS[ARG]} ${OPTS[ARGUNKNOWN]}; then + case $prev in + --boot|--this-boot|-b) +@@ -107,4 +111,4 @@ _journalctl() { + fi + } + +-complete -F _journalctl journalctl ++complete -o default -o bashdefault -F _journalctl journalctl +--- systemd-208/shell-completion/bash/kernel-install ++++ systemd-208/shell-completion/bash/kernel-install 2014-01-17 14:34:41.982255874 +0000 +@@ -18,11 +18,22 @@ + # You should have received a copy of the GNU Lesser General Public License + # along with systemd; If not, see . + ++__contains_word () { ++ local w word=$1; shift ++ for w in "$@"; do ++ [[ $w = "$word" ]] && return ++ done ++} ++ + _kernel_install() { + local comps + local MACHINE_ID + local cur=${COMP_WORDS[COMP_CWORD]} + ++ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then ++ return 0 ++ fi ++ + case $COMP_CWORD in + 1) + comps="add remove" +@@ -47,4 +58,4 @@ _kernel_install() { + return 0 + } + +-complete -F _kernel_install kernel-install ++complete -o default -o bashdefault -F _kernel_install kernel-install +--- systemd-208/shell-completion/bash/localectl ++++ systemd-208/shell-completion/bash/localectl 2014-01-17 14:34:52.546235747 +0000 +@@ -30,6 +30,10 @@ _localectl() { + local OPTS='-h --help --version --no-convert --no-pager --no-ask-password + -H --host' + ++ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then ++ return 0 ++ fi ++ + if __contains_word "$prev" $OPTS; then + case $prev in + --host|-H) +@@ -73,4 +77,4 @@ _localectl() { + return 0 + } + +-complete -F _localectl localectl ++complete -o default -o bashdefault -F _localectl localectl +--- systemd-208/shell-completion/bash/loginctl ++++ systemd-208/shell-completion/bash/loginctl 2014-01-17 14:35:03.386245699 +0000 +@@ -37,6 +37,10 @@ _loginctl () { + [ARG]='--host -H --kill-who --property -p --signal -s' + ) + ++ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then ++ return 0 ++ fi ++ + if __contains_word "$prev" ${OPTS[ARG]}; then + case $prev in + --signal|-s) +@@ -106,4 +110,4 @@ _loginctl () { + return 0 + } + +-complete -F _loginctl loginctl ++complete -o default -o bashdefault -F _loginctl loginctl +--- systemd-208/shell-completion/bash/systemctl ++++ systemd-208/shell-completion/bash/systemctl 2014-01-17 14:35:26.506235666 +0000 +@@ -77,6 +77,10 @@ _systemctl () { + [ARG]='--host -H --kill-mode --kill-who --property -p --signal -s --type -t --state --root' + ) + ++ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then ++ return 0 ++ fi ++ + if __contains_word "--user" ${COMP_WORDS[*]}; then + mode=--user + else +@@ -226,4 +230,4 @@ _systemctl () { + return 0 + } + +-complete -F _systemctl systemctl ++complete -o default -o bashdefault -F _systemctl systemctl +--- systemd-208/shell-completion/bash/systemd-analyze ++++ systemd-208/shell-completion/bash/systemd-analyze 2014-01-17 14:35:38.366736021 +0000 +@@ -37,6 +37,10 @@ _systemd_analyze() { + [LOG_LEVEL]='set-log-level' + ) + ++ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then ++ return 0 ++ fi ++ + _init_completion || return + + for ((i=0; $i <= $COMP_CWORD; i++)); do +@@ -83,4 +87,4 @@ _systemd_analyze() { + return 0 + } + +-complete -F _systemd_analyze systemd-analyze ++complete -o default -o bashdefault -F _systemd_analyze systemd-analyze +--- systemd-208/shell-completion/bash/systemd-coredumpctl ++++ systemd-208/shell-completion/bash/systemd-coredumpctl 2014-01-17 14:35:46.434235632 +0000 +@@ -44,6 +44,10 @@ _coredumpctl() { + [DUMP]='dump gdb' + ) + ++ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then ++ return 0 ++ fi ++ + if __contains_word "$prev" '--output -o'; then + comps=$( compgen -A file -- "$cur" ) + compopt -o filenames +@@ -82,4 +86,4 @@ _coredumpctl() { + return 0 + } + +-complete -F _coredumpctl systemd-coredumpctl ++complete -o default -o bashdefault -F _coredumpctl systemd-coredumpctl +--- systemd-208/shell-completion/bash/systemd-run ++++ systemd-208/shell-completion/bash/systemd-run 2014-01-17 14:35:55.938236298 +0000 +@@ -17,6 +17,13 @@ + # You should have received a copy of the GNU Lesser General Public License + # along with systemd; If not, see . + ++__contains_word () { ++ local w word=$1; shift ++ for w in "$@"; do ++ [[ $w = "$word" ]] && return ++ done ++} ++ + __systemctl() { + local mode=$1; shift 1 + systemctl $mode --full --no-legend "$@" +@@ -31,6 +38,11 @@ _systemd_run() { + + local mode=--system + local i ++ ++ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then ++ return 0 ++ fi ++ + for (( i=1; i <= COMP_CWORD; i++ )); do + if [[ ${COMP_WORDS[i]} != -* ]]; then + local root_command=${COMP_WORDS[i]} +@@ -60,4 +72,4 @@ _systemd_run() { + return 0 + } + +-complete -F _systemd_run systemd-run ++complete -o default -o bashdefault -F _systemd_run systemd-run +--- systemd-208/shell-completion/bash/timedatectl ++++ systemd-208/shell-completion/bash/timedatectl 2014-01-17 14:36:06.182735466 +0000 +@@ -30,6 +30,10 @@ _timedatectl() { + local OPTS='-h --help --version --adjust-system-clock --no-pager + --no-ask-password -H --host' + ++ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then ++ return 0 ++ fi ++ + if __contains_word "$prev" $OPTS; then + case $prev in + --host|-H) +@@ -73,4 +77,4 @@ _timedatectl() { + return 0 + } + +-complete -F _timedatectl timedatectl ++complete -o default -o bashdefault -F _timedatectl timedatectl +--- systemd-208/shell-completion/bash/udevadm ++++ systemd-208/shell-completion/bash/udevadm 2014-01-17 14:36:16.406236120 +0000 +@@ -36,6 +36,10 @@ _udevadm() { + + local verbs=(info trigger settle control monitor hwdb test-builtin test) + ++ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then ++ return 0 ++ fi ++ + for ((i=0; i <= COMP_CWORD; i++)); do + if __contains_word "${COMP_WORDS[i]}" "${verbs[@]}" && + ! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then +@@ -94,4 +98,4 @@ _udevadm() { + return 0 + } + +-complete -F _udevadm udevadm ++complete -o default -o bashdefault -F _udevadm udevadm diff --git a/systemd.changes b/systemd.changes index a95a922..7540da0 100644 --- a/systemd.changes +++ b/systemd.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Fri Jan 17 16:09:24 UTC 2014 - werner@suse.de + +- Add patch + 1019-make-completion-smart-to-be-able-to-redirect.patch + to make redirections work with the bash command completions for + for systemd command tools (bnc#856858, bnc#859072) + ------------------------------------------------------------------- Fri Jan 17 12:24:13 UTC 2014 - werner@suse.de diff --git a/systemd.spec b/systemd.spec index c332583..fedb177 100644 --- a/systemd.spec +++ b/systemd.spec @@ -21,6 +21,11 @@ %define udevpkgname udev %define udev_major 1 +%if 0%{?sles_version} == 0 +%global with_bash_completion 1 +%endif +%bcond_with bash_completion + Name: systemd Url: http://www.freedesktop.org/wiki/Software/systemd Version: 208 @@ -84,6 +89,9 @@ Conflicts: kiwi # the buildignore is important for bootstrapping #!BuildIgnore: udev Requires: %{udevpkgname} >= 172 +%if %{with bash_completion} +Requires: bash-completion +%endif Requires: dbus-1 >= 1.4.0 Requires: kbd Requires: kmod >= 14 @@ -278,6 +286,8 @@ Patch1016: support-powerfail-with-powerstatus.patch Patch1017: 1017-enforce-sufficient-shutdown-warnings.patch # PATCH-FIX-SUSE 1018-Make-LSB-Skripts-know-about-Required-and-Should.patch Patch1018: 1018-Make-LSB-Skripts-know-about-Required-and-Should.patch +# PATCH-FIX-SUSE 1019-make-completion-smart-to-be-able-to-redirect.patch +Patch1019: 1019-make-completion-smart-to-be-able-to-redirect.patch %description Systemd is a system and service manager, compatible with SysV and LSB @@ -563,6 +573,7 @@ cp %{SOURCE7} m4/ %patch1016 -p1 %patch1017 -p1 %patch1018 -p1 +%patch1019 -p1 # ensure generate files are removed rm -f units/emergency.service @@ -745,6 +756,16 @@ install -m 755 %{S:12} %{buildroot}/%{_prefix}/lib/systemd/ install -m 644 units/powerfail.service %{buildroot}/%{_prefix}/lib/systemd/system/ install -m 644 man/systemd-powerfail.service.8 %{buildroot}/%{_mandir}/man8/ +# clean out some completions which requires bash-completion package +%if %{without bash_completion} +for c in %{buildroot}/%{_datadir}/bash-completion/completions/* +do + test -e "$c" || continue + grep -q _init_completion "$c" || continue + rm -vf "$c" +done +%endif + %fdupes -s %{buildroot}%{_mandir} # packaged in systemd-rpm-macros