1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-11-04 22:40:12 +01:00
fdroidserver/completion/bash-completion

239 lines
4.4 KiB
Plaintext
Raw Normal View History

2013-10-25 21:30:00 +02:00
#!/bin/bash
2013-07-14 19:09:31 +02:00
#
# fdroid completion support.
#
# 'fdroid' is aliased automatically, but aliases to it are not. For instance,
# to alias 'fd' to 'fdroid' and have competion available:
#
# alias fd='fdroid'
# complete -F _fdroid fd
2013-07-14 19:09:31 +02:00
#
# One can use completion on aliased subcommands as follows:
#
# alias fbuild='fdroid build'
# complete -F _fdroid_build fbuild
2013-07-14 19:09:31 +02:00
#
# There are also completion function for '-p com.some.app' aliases:
2013-07-14 19:09:31 +02:00
#
# alias fbld='fdroid build -v -l -p'
# complete -F _fdroid_build_project fbld
#
# alias fcheckup='fdroid checkupdates -v -p'
# complete -F _fdroid_checkupdates_project fcheckup
#
# This way, one can simply do 'fbld com.some.app' or 'fcheckup com.some.app'
2013-07-14 19:09:31 +02:00
__fdroid_init() {
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
2013-07-14 19:09:31 +02:00
(( $# >= 1 )) && __complete_${1}
2013-07-14 19:09:31 +02:00
}
__package() {
files=( metadata/*.txt )
files=( ${files[@]#metadata/} )
files=${files[@]%.txt}
COMPREPLY=( $( compgen -W "$files" -- $cur ) )
}
__signed_package() {
files=( repo/*.apk )
files=( ${files[@]#repo/} )
files=${files[@]%_*}
COMPREPLY=( $( compgen -W "$files" -- $cur ) )
}
2013-12-11 18:35:58 +01:00
__signed_vercode() {
local p
p=${cur:0:-1}
files=( repo/${p}_*.apk )
files=( ${files[@]#*_} )
files=${files[@]%.apk}
COMPREPLY=( $( compgen -P "${p}:" -W "$files" -- $cur ) )
}
2013-07-14 19:09:31 +02:00
__vercode() {
local p
p=${cur:0:-1}
COMPREPLY=( $( compgen -P "${p}:" -W "$( while read line; do
if [[ "$line" == "Build Version:"* ]]
then
line="${line#*,}"
printf "${line%%,*} "
elif [[ "$line" == "Build:"* ]]
then
line="${line#*,}"
printf "${line%%,*} "
fi
done < "metadata/${p}.txt" )" -- $cur ) )
2013-07-14 19:09:31 +02:00
}
__complete_options() {
case "${cur}" in
--*)
COMPREPLY=( $( compgen -W "${lopts}" -- $cur ) )
return 0;;
*)
COMPREPLY=( $( compgen -W "${opts} ${lopts}" -- $cur ) )
return 0;;
esac
2013-07-14 19:09:31 +02:00
}
__complete_build() {
opts="-h -v -p -c -l -s -t -f"
lopts="--help --verbose --latest --server --resetserver --on-server
--force --all"
case "${cur}" in
*:)
__vercode
return 0;;
*)
__package
return 0;;
esac
__complete_options
2013-07-14 19:09:31 +02:00
}
2013-12-11 18:35:58 +01:00
__complete_install() {
opts="-h -v"
lopts="--help --verbose --all"
case "${cur}" in
-*)
__complete_options
return 0;;
*:)
__signed_vercode
return 0;;
*)
__signed_package
return 0;;
esac
}
2013-07-14 19:09:31 +02:00
__complete_update() {
opts="-h -c -v -q -b -i -I -e -w"
lopts="--help --createmeta --verbose --quiet --buildreport --interactive
2013-08-19 11:30:54 +02:00
--icons --editor --wiki --pretty --clean"
case "${prev}" in
-e|--editor)
_filedir
return 0;;
esac
__complete_options
2013-07-14 19:09:31 +02:00
}
__complete_publish() {
opts="-h -v -p"
lopts="--help --verbose --package"
case "${prev}" in
-p|--package)
__package
return 0;;
esac
__complete_options
2013-07-14 19:09:31 +02:00
}
__complete_checkupdates() {
opts="-h -v -p"
lopts="--help --verbose --package --auto --autoonly --commit --gplay"
case "${prev}" in
-p|--package)
__package
return 0;;
esac
__complete_options
2013-07-14 19:09:31 +02:00
}
__complete_import() {
opts="-h -u -s -r"
lopts="--help --url --subdir --repo"
case "${prev}" in
-u|--url|-r|--repo) return 0;;
-s|--subdir)
_filedir
return 0;;
esac
__complete_options
2013-07-14 19:09:31 +02:00
}
__complete_rewritemeta() {
opts="-h -v -p"
lopts="--help --verbose --package"
case "${prev}" in
-p|--package)
__package
return 0;;
esac
__complete_options
2013-07-14 19:09:31 +02:00
}
__complete_scanner() {
opts="-h -v -p"
lopts="--help --verbose --package --nosvn"
case "${prev}" in
-p|--package)
__package
return 0;;
esac
__complete_options
2013-07-14 19:09:31 +02:00
}
__complete_verify() {
opts="-h -v -p"
lopts="--help --verbose --package"
case "${prev}" in
-p|--package)
__package
return 0;;
esac
__complete_options
}
2013-07-14 19:09:31 +02:00
__complete_stats() {
opts="-h -v -d"
lopts="--help --verbose --download"
__complete_options
2013-07-14 19:09:31 +02:00
}
__complete_server() {
opts="-h -v"
lopts="--help --verbose update"
__complete_options
2013-07-14 19:09:31 +02:00
}
__complete_init() {
opts="-h -v -d"
lopts="--help --verbose --keystore --distinguished-name --repo-keyalias"
__complete_options
}
2013-07-14 19:09:31 +02:00
_fdroid() {
local cmd cmds aliased
cmd=${COMP_WORDS[1]}
2013-12-11 18:35:58 +01:00
cmds=" build init install update publish checkupdates import
rewritemeta scanner verify stats server "
aliased=false
2013-07-14 19:09:31 +02:00
for c in $cmds; do eval "_fdroid_${c} () {
local cur prev cmds opts lopts
__fdroid_init ${c};
}"; done
2013-07-14 19:09:31 +02:00
[[ $cmds == *\ $cmd\ * ]] && _fdroid_${cmd} || {
(($COMP_CWORD == 1)) && COMPREPLY=( $( compgen -W "${cmds}" -- $cmd ) )
}
2013-07-14 19:09:31 +02:00
}
2013-11-03 11:53:20 +01:00
_fd-commit() {
__package
}
2013-07-14 19:09:31 +02:00
complete -F _fdroid fdroid
2013-11-03 11:53:20 +01:00
complete -F _fd-commit fd-commit
2013-07-14 19:09:31 +02:00
return 0