blob: 1eeecef40f3d07e413cb4f198e4f7c562255a48e [file] [log] [blame]
#!/bin/bash
# LTTng Trace Control bash completion
#
_lttng_complete_sessions() {
local sessions
if ! _complete_as_root ; then
sessions=$(for i in $(ls -d ~/.lttng/*/); do basename $i; done)
COMPREPLY=( $(compgen -W "${sessions}" -- $cur) )
#else
# Permission denied, what should we do ?
# sessions=$(for i in $(ls -d ~root/.lttng/*/); do basename $i; done)
#COMPREPLY=( $(compgen -W "${sessions}" -- $cur) )
fi
}
_lttng_create() {
local create_opts
create_opts="-h --help -o --output"
case $prev in
--output|-o)
_filedir -d
return
;;
esac
case $cur in
-*)
COMPREPLY=( $(compgen -W "${create_opts}" -- $cur) )
return
;;
esac
}
_lttng_start_stop() {
local start_stop_opts
start_stop_opts="-h --help"
case $cur in
-*)
COMPREPLY=( $(compgen -W "${start_stop_opts}" -- $cur) )
;;
*)
_lttng_complete_sessions
;;
esac
}
_lttng_opts() {
local opts
opts=$(lttng --dump-options)
COMPREPLY=( $(compgen -W "${opts}" -- $cur) )
}
_lttng_commands() {
COMPREPLY=( $(compgen -W "$commands" -- $cur) )
}
_lttng_before_command() {
# Check if the previous word should alter the behavior
case $prev in
--group|-g)
COMPREPLY=( $(compgen -g -- $cur) )
return
;;
esac
case $cur in
-*)
# If the current word starts with a dash, complete with options
_lttng_opts
;;
*)
# Otherwise complete with commands
_lttng_commands
;;
esac
}
_lttng_after_command() {
case $command_found in
"create")
_lttng_create
;;
"start"|"stop")
_lttng_start_stop
;;
esac
}
_lttng_is_command() {
for command in $commands; do
if [ "$1" == "$command" ]; then
return 0
fi
done
return 1
}
_lttng() {
local cur prev commands command_found command_found_index
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
commands=$(lttng --dump-commands)
command_found=""
command_found_index=-1
for (( i = 1 ; i < ${#COMP_WORDS[@]} ; i++ )); do
_lttng_is_command ${COMP_WORDS[$i]}
if [ $? -eq 0 ]; then
command_found=${COMP_WORDS[$i]}
command_found_index=$i
break
fi
done
if [ -n "$command_found" ] && [ "$COMP_CWORD" -gt "$command_found_index" ]; then
_lttng_after_command
else
_lttng_before_command
fi
}
complete -F _lttng lttng