-#!/bin/bash
+# fdroid(1) completion -*- shell-script -*-
#
-# fdroid completion support.
+# bash-completion - part of the FDroid server tools
#
-# 'fdroid' is aliased automatically, but aliases to it are not. For instance,
-# to alias 'fd' to 'fdroid' and have competion available:
+# Copyright (C) 2013-2017 Hans-Christoph Steiner <hans@eds.org>
+# Copyright (C) 2013, 2014 Daniel Martà <mvdan@mvdan.cc>
#
-# alias fd='fdroid'
-# complete -F _fdroid fd
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
#
-# One can use completion on aliased subcommands as follows:
+# This program 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 Affero General Public License for more details.
#
-# alias fbuild='fdroid build'
-# complete -F _fdroid_build fbuild
-#
-# There are also completion function for '-p com.some.app' aliases:
-#
-# 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'
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+__fdroid_init() {
+ COMPREPLY=()
+ cur="${COMP_WORDS[COMP_CWORD]}"
+ prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+ (( $# >= 1 )) && __complete_${1}
+}
+
+__by_ext() {
+ local ext="$1"
+ files=( metadata/*.$ext )
+ files=( ${files[@]#metadata/} )
+ files=${files[@]%.$ext}
+ echo "$files"
+}
__package() {
- [[ -d ./metadata ]] || return 0
- files=( metadata/*.txt )
- files=( ${files[@]#metadata/} )
- files=${files[@]%.txt}
- COMPREPLY=( $( compgen -W "$files" -- $cur ) )
+ files="$(__by_ext txt) $(__by_ext yaml) $(__by_ext json) $(__by_ext xml)"
+ COMPREPLY=( $( compgen -W "$files" -- $cur ) )
}
-__fdroid_init() {
- COMPREPLY=()
- cur="${COMP_WORDS[COMP_CWORD]}"
- prev="${COMP_WORDS[COMP_CWORD-1]}"
+__apk_package() {
+ files=( ${1}/*.apk )
+ [ -f "${files[0]}" ] || return
- (( $# >= 1 )) && __complete_${1}
+ files=( ${files[@]#*/} )
+ files=${files[@]%_*}
+ COMPREPLY=( $( compgen -W "$files" -- $cur ) )
+}
+
+__apk_vercode() {
+ local p=${cur:0:-1}
+
+ files=( ${1}/${p}_*.apk )
+ [ -f "${files[0]}" ] || return
+
+ files=( ${files[@]#*_} )
+ files=${files[@]%.apk}
+ COMPREPLY=( $( compgen -P "${p}:" -W "$files" -- $cur ) )
}
__vercode() {
- local s p_found p
- s=${#COMP_WORDS[*]}
- p_found=false
-
- $aliased && p=${COMP_WORDS[1]} || {
- for (( i=1; i <= s; i++ )); do
- $p_found && { p=${COMP_WORDS[$i]}; break;}
- [[ ${COMP_WORDS[$i]} == -p ]] || [[ ${COMP_WORDS[$i]} == --package ]] &&\
- p_found=true
- done
- $p_found || return 0
- }
-
- COMPREPLY=( $( compgen -W "$( while read line; do
- [[ "$line" == "Build Version:"* ]] && {
- line="${line#*,}"
- printf "${line%%,*} "
- } done < "metadata/${p}.txt" )" -- $cur ) )
+ local p v
+ echo $cur | IFS=':' read p v
+
+ 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 ) )
}
__complete_options() {
- case "${cur}" in
- --*)
- COMPREPLY=( $( compgen -W "${lopts}" -- $cur ) )
- return 0;;
- *)
- COMPREPLY=( $( compgen -W "${opts} ${lopts}" -- $cur ) )
- return 0;;
- esac
+ case "${cur}" in
+ --*)
+ COMPREPLY=( $( compgen -W "--help --version ${lopts}" -- $cur ) )
+ return 0;;
+ *)
+ COMPREPLY=( $( compgen -W "-h ${opts} --help --version ${lopts}" -- $cur ) )
+ return 0;;
+ esac
}
__complete_build() {
- opts="-h -v -p -c -l -s -t -f"
- lopts="--help --verbose --package --vercode --latest --server --resetserver
- --on-server --force --install --all"
- case "${prev}" in
- -p|--package)
- __package
- return 0;;
- -c|--vercode)
- __vercode
- return 0;;
- esac
- __complete_options
+ opts="-v -q -l -s -t -f -a -w"
+
+ lopts="--verbose --quiet --latest --stop --test --server --resetserver
+ --on-server --skip-scan --no-tarball --force --all --wiki --no-refresh"
+ case "${cur}" in
+ -*)
+ __complete_options
+ return 0;;
+ *:*)
+ __vercode
+ return 0;;
+ *)
+ __package
+ return 0;;
+ esac
+}
+
+__complete_dscanner() {
+ opts="-v -q -l"
+ lopts="--verbose --quiet --clean-after --clean-before --clean-only --init-only --latest --repo-path"
+ case "${cur}" in
+ -*)
+ __complete_options
+ return 0;;
+ *:)
+ __vercode
+ return 0;;
+ *)
+ __package
+ return 0;;
+ esac
+}
+
+__complete_gpgsign() {
+ opts="-v -q"
+ lopts="--verbose --quiet"
+ __complete_options
+}
+
+__complete_install() {
+ opts="-v -q"
+ lopts="--verbose --quiet --all"
+ case "${cur}" in
+ -*)
+ __complete_options
+ return 0;;
+ *:)
+ __apk_vercode repo
+ return 0;;
+ *)
+ __apk_package repo
+ return 0;;
+ esac
}
__complete_update() {
- opts="-h -c -v -q -b -i -I -e -w"
- lopts="--help --createmeta --verbose --quiet --buildreport --interactive
- --icons --editor --wiki --pretty --clean"
- case "${prev}" in
- -e|--editor)
- _filedir
- return 0;;
- esac
- __complete_options
+ opts="-c -v -q -b -i -I -e -w"
+ lopts="--create-metadata --verbose --quiet --buildreport
+ --interactive --icons --editor --wiki --pretty --clean --delete-unknown
+ --nosign --rename-apks --use-date-from-apk"
+ case "${prev}" in
+ -e|--editor)
+ _filedir
+ return 0;;
+ esac
+ __complete_options
}
__complete_publish() {
- opts="-h -v -p"
- lopts="--help --verbose --package"
- case "${prev}" in
- -p|--package)
- __package
- return 0;;
- esac
- __complete_options
+ opts="-v -q"
+ lopts="--verbose --quiet"
+ case "${cur}" in
+ -*)
+ __complete_options
+ return 0;;
+ *:)
+ __apk_vercode unsigned
+ return 0;;
+ *)
+ __apk_package unsigned
+ return 0;;
+ esac
}
__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
+ opts="-v -q"
+ lopts="--verbose --quiet --auto --autoonly --commit --gplay"
+ case "${cur}" in
+ -*)
+ __complete_options
+ return 0;;
+ *)
+ __package
+ return 0;;
+ esac
}
__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
+ opts="-u -s -q"
+ lopts="--url --subdir --rev --quiet"
+ case "${prev}" in
+ -u|--url|-s|--subdir|--rev) return 0;;
+ esac
+ __complete_options
+}
+
+__complete_readmeta() {
+ opts="-v -q"
+ lopts="--verbose --quiet"
+ __complete_options
}
__complete_rewritemeta() {
- opts="-h -v -p"
- lopts="--help --verbose --package"
- case "${prev}" in
- -p|--package)
- __package
- return 0;;
- esac
- __complete_options
+ opts="-v -q -l"
+ lopts="--verbose --quiet --list"
+ case "${cur}" in
+ -*)
+ __complete_options
+ return 0;;
+ *)
+ __package
+ return 0;;
+ esac
+}
+
+__complete_lint() {
+ opts="-v -q"
+ lopts="--verbose --quiet"
+ case "${cur}" in
+ -*)
+ __complete_options
+ return 0;;
+ *)
+ __package
+ return 0;;
+ esac
}
__complete_scanner() {
- opts="-h -v -p"
- lopts="--help --verbose --package --nosvn"
- case "${prev}" in
- -p|--package)
- __package
- return 0;;
- esac
- __complete_options
+ opts="-v -q"
+ lopts="--verbose --quiet"
+ case "${cur}" in
+ -*)
+ __complete_options
+ return 0;;
+ *:)
+ __vercode
+ return 0;;
+ *)
+ __package
+ return 0;;
+ esac
}
__complete_verify() {
- opts="-h -v -p"
- lopts="--help --verbose --package"
- case "${prev}" in
- -p|--package)
- __package
- return 0;;
- esac
- __complete_options
+ opts="-v -q -p"
+ lopts="--verbose --quiet"
+ case "${cur}" in
+ -*)
+ __complete_options
+ return 0;;
+ *:)
+ __vercode
+ return 0;;
+ *)
+ __package
+ return 0;;
+ esac
+}
+
+__complete_btlog() {
+ opts="-u"
+ lopts="--git-remote --git-repo --url"
+ __complete_options
}
__complete_stats() {
- opts="-h -v -d"
- lopts="--help --verbose --download"
- __complete_options
+ opts="-v -q -d"
+ lopts="--verbose --quiet --download"
+ __complete_options
}
__complete_server() {
- opts="-h -v"
- lopts="--help --verbose update"
- __complete_options
+ opts="-i -v -q"
+ lopts="--identity-file --local-copy-dir --sync-from-local-copy-dir
+ --verbose --quiet --no-checksum update"
+ __complete_options
}
-_fdroid() {
- local cmd cmds aliased
- cmd=${COMP_WORDS[1]}
- cmds=" build update publish checkupdates import rewritemeta scanner verify stats server "
- aliased=false
+__complete_signatures() {
+ opts="-v -q"
+ lopts="--verbose --no-check-https"
+ case "${cur}" in
+ -*)
+ __complete_options
+ return 0;;
+ esac
+}
- for c in $cmds; do eval "_fdroid_${c} () {
- local cur prev cmds opts lopts
- __fdroid_init ${c};
- }"; done
+__complete_signindex() {
+ opts="-v -q"
+ lopts="--verbose"
+ __complete_options
+}
- [[ $cmds == *\ $cmd\ * ]] && _fdroid_${cmd} || {
- (($COMP_CWORD == 1)) && COMPREPLY=( $( compgen -W "${cmds}" -- $cmd ) )
- }
+__complete_init() {
+ opts="-v -q -d"
+ lopts="--verbose --quiet --distinguished-name --keystore
+ --repo-keyalias --android-home --no-prompt"
+ __complete_options
}
-_fdroid_build_project() {
- local cur prev cmds opts lopts aliased
- __fdroid_init
- aliased=true
- (( $COMP_CWORD == 1 )) && prev="-p"
+__cmds=" \
+btlog \
+build \
+checkupdates \
+dscanner \
+gpgsign \
+import \
+init \
+install \
+lint \
+publish \
+readmeta \
+rewritemeta \
+scanner \
+server \
+signatures \
+signindex \
+stats \
+update \
+verify \
+"
- __complete_build
-}
+for c in $__cmds; do
+ eval "_fdroid_${c} () {
+ local cur prev opts lopts
+ __fdroid_init ${c}
+ }"
+done
+
+_fdroid() {
+ local cmd
+ cmd=${COMP_WORDS[1]}
-_fdroid_checkupdates_project() {
- local cur prev cmds opts lopts aliased
- __fdroid_init
- aliased=true
- (( $COMP_CWORD == 1 )) && prev="-p"
+ [[ $__cmds == *\ $cmd\ * ]] && _fdroid_${cmd} || {
+ (($COMP_CWORD == 1)) && COMPREPLY=( $( compgen -W "${__cmds}" -- $cmd ) )
+ }
+}
- __complete_checkupdates
+_fd-commit() {
+ __package
}
complete -F _fdroid fdroid
+complete -F _fd-commit fd-commit
return 0