commit
e66bedb43f
@ -0,0 +1,39 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# |
||||
# 2016 Darko Poljak (darko.poljak at gmail.com) |
||||
# |
||||
# This file is part of cdist. |
||||
# |
||||
# cdist is free software: you can redistribute it and/or modify |
||||
# it under the terms of the GNU General Public License as published by |
||||
# the Free Software Foundation, either version 3 of the License, or |
||||
# (at your option) any later version. |
||||
# |
||||
# cdist 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 General Public License |
||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>. |
||||
# |
||||
# |
||||
|
||||
import subprocess |
||||
from tempfile import TemporaryFile |
||||
|
||||
import cdist |
||||
|
||||
def call_get_output(command, env=None): |
||||
"""Run the given command with the given environment. |
||||
Return the stdout and stderr output as a byte string. |
||||
""" |
||||
assert isinstance(command, (list, tuple)), "list or tuple argument expected, got: {}".format(command) |
||||
|
||||
with TemporaryFile() as fout: |
||||
subprocess.check_call(command, env=env, |
||||
stdout=fout, stderr=subprocess.STDOUT) |
||||
fout.seek(0) |
||||
output = fout.read() |
||||
|
||||
return output |
@ -0,0 +1,59 @@ |
||||
_cdist() |
||||
{ |
||||
local cur prev prevprev opts cmds projects |
||||
COMPREPLY=() |
||||
cur="${COMP_WORDS[COMP_CWORD]}" |
||||
prev="${COMP_WORDS[COMP_CWORD-1]}" |
||||
prevprev="${COMP_WORDS[COMP_CWORD-2]}" |
||||
opts="-h --help -d --debug -v --verbose -V --version" |
||||
cmds="banner shell config" |
||||
|
||||
case "${prevprev}" in |
||||
shell) |
||||
case "${prev}" in |
||||
-s|--shell) |
||||
shells=$(grep -v '^#' /etc/shells) |
||||
COMPREPLY=( $(compgen -W "${shells}" -- ${cur}) ) |
||||
return 0 |
||||
;; |
||||
esac |
||||
;; |
||||
esac |
||||
|
||||
case "${prev}" in |
||||
-*) |
||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) |
||||
return 0 |
||||
;; |
||||
banner) |
||||
opts="-h --help -d --debug -v --verbose" |
||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) |
||||
return 0 |
||||
;; |
||||
shell) |
||||
opts="-h --help -d --debug -v --verbose -s --shell" |
||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) |
||||
return 0 |
||||
;; |
||||
config) |
||||
opts="-h --help -d --debug -v --verbose \ |
||||
-c --conf-dir -f --file -i --initial-manifest -n --dry-run \ |
||||
-o --out-dir -p --parallel -s --sequential --remote-copy \ |
||||
--remote-exec" |
||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) |
||||
return 0 |
||||
;; |
||||
*) |
||||
;; |
||||
esac |
||||
|
||||
if [[ ${cur} == -* ]]; then |
||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) |
||||
return 0 |
||||
fi |
||||
|
||||
COMPREPLY=( $(compgen -W "${cmds}" -- ${cur}) ) |
||||
return 0 |
||||
} |
||||
|
||||
complete -F _cdist cdist |
@ -0,0 +1,48 @@ |
||||
#compdef cdist |
||||
|
||||
_cdist() |
||||
{ |
||||
local curcontext="$curcontext" state line |
||||
typeset -A opt_args |
||||
|
||||
_arguments \ |
||||
'1: :->opts_cmds'\ |
||||
'*: :->opts' |
||||
|
||||
case $state in |
||||
opts_cmds) |
||||
_arguments '1:Options and commands:(banner config shell -h --help -d --debug -v --verbose -V --version)' |
||||
;; |
||||
*) |
||||
case $words[2] in |
||||
-*) |
||||
opts=(-h --help -d --debug -v --verbose -V --version) |
||||
compadd "$@" -- $opts |
||||
;; |
||||
banner) |
||||
opts=(-h --help -d --debug -v --verbose) |
||||
compadd "$@" -- $opts |
||||
;; |
||||
shell) |
||||
case $words[3] in |
||||
-s|--shell) |
||||
shells=($(grep -v '^#' /etc/shells)) |
||||
compadd "$@" -- $shells |
||||
;; |
||||
*) |
||||
opts=(-h --help -d --debug -v --verbose -s --shell) |
||||
compadd "$@" -- $opts |
||||
;; |
||||
esac |
||||
;; |
||||
config) |
||||
opts=(-h --help -d --debug -v --verbose -c --conf-dir -f --file -i --initial-manifest -n --dry-run -o --out-dir -p --parallel -s --sequential --remote-copy --remote-exec) |
||||
compadd "$@" -- $opts |
||||
;; |
||||
*) |
||||
;; |
||||
esac |
||||
esac |
||||
} |
||||
|
||||
_cdist "$@" |
Loading…
Reference in new issue