chiark / gitweb /
remove fd-commit, no active devs use it, and requires Auto Name/Name
[fdroidserver.git] / completion / bash-completion
index e254ec28ebe8e06bf6ae9b9e638b40f09f86f73a..1a5ac52362bbb63297d720b00a2b1485bd9348c9 100644 (file)
-#!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's also a completion function made for aliases to 'fdroid build -p':
-#
-#   alias fbld='fdroid build -p'
-#   complete -F _fdroid_build_project fbld
+# 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_mirror() {
+       opts="-v"
+       lopts="--archive --output-dir"
+       __complete_options
+}
+
+__complete_nightly() {
+       opts="-v -q"
+       lopts="--show-secret-var"
+       __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 \
+mirror \
+nightly \
+publish \
+readmeta \
+rewritemeta \
+scanner \
+server \
+signatures \
+signindex \
+stats \
+update \
+verify \
+"
+
+for c in $__cmds; do
+       eval "_fdroid_${c} () {
+               local cur prev opts lopts
+               __fdroid_init ${c}
+       }"
+done
+
+_fdroid() {
+       local cmd
+       cmd=${COMP_WORDS[1]}
 
-    __complete_build
+       [[ $__cmds == *\ $cmd\ * ]] && _fdroid_${cmd} || {
+               (($COMP_CWORD == 1)) && COMPREPLY=( $( compgen -W "${__cmds}" -- $cmd ) )
+       }
 }
 
 complete -F _fdroid fdroid