59 lines
1.5 KiB
Plaintext
59 lines
1.5 KiB
Plaintext
_rake()
|
|
{
|
|
local cur prev rakef i
|
|
|
|
COMPREPLY=()
|
|
cur=${COMP_WORDS[COMP_CWORD]}
|
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
|
rakef="Rakefile"
|
|
|
|
if [[ "$prev" == "-f" ]]; then
|
|
_filedir
|
|
return 0
|
|
fi
|
|
|
|
if [[ "$cur" == *=* ]]; then
|
|
prev=${cur/=*/}
|
|
cur=${cur/*=/}
|
|
if [[ "$prev" == "--rakefile=" ]]; then
|
|
_filedir -o nospace
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=( $( compgen -W '-n -H -I -N -P -q -f\
|
|
-r -s -T -t -h -v -V\
|
|
--dry-run --help '--libdir=' --nosearch --prereqs --quiet\
|
|
'--rakefile=' '--require=' --silent --tasks --trace --usage\
|
|
--verbose --version'\
|
|
-- $cur ))
|
|
else
|
|
|
|
for (( i=0; i < ${#COMP_WORDS[@]}; i++)); do
|
|
case "${COMP_WORDS[i]}" in
|
|
-f)
|
|
eval rakef=${COMP_WORDS[i+1]}
|
|
break
|
|
;;
|
|
--rakefile=*|--rakefile\=*)
|
|
eval rakef=${COMP_WORDS[i]/*=/}
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
|
|
[ ! -f $rakef ] && return 0
|
|
|
|
_get_comp_words_by_ref -n : cur
|
|
more_recent=`ls -1t .rake_tasks~ $rakef */*.rake */*/*.rake 2>/dev/null | head -n 1`
|
|
if [ "$more_recent" != ".rake_tasks~" ]; then
|
|
rake --tasks --all | awk '{print($2)}' > .rake_tasks~
|
|
fi
|
|
tasks=$(cat .rake_tasks~)
|
|
COMPREPLY=($(compgen -W "$tasks" -- "$cur"))
|
|
__ltrim_colon_completions "$cur"
|
|
fi
|
|
}
|
|
complete -F _rake rake
|