diff --git a/completion/bash-completion b/completion/bash-completion index 2ef8fa1b..c6a5ef13 100644 --- a/completion/bash-completion +++ b/completion/bash-completion @@ -5,21 +5,21 @@ # '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 +# alias fd='fdroid' +# complete -F _fdroid fd # # One can use completion on aliased subcommands as follows: # -# alias fbuild='fdroid build' -# complete -F _fdroid_build fbuild +# 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 fbld='fdroid build -v -l -p' +# complete -F _fdroid_build_project fbld # -# alias fcheckup='fdroid checkupdates -v -p' -# complete -F _fdroid_checkupdates_project fcheckup +# 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' @@ -217,6 +217,11 @@ _fdroid_checkupdates_project() { __complete_checkupdates } +_fd-commit() { + __package +} + complete -F _fdroid fdroid +complete -F _fd-commit fd-commit return 0 diff --git a/fd-commit b/fd-commit index e1445a47..9f1a5a21 100755 --- a/fd-commit +++ b/fd-commit @@ -5,41 +5,55 @@ commands=() while read line; do - if [[ "$line" == *M*metadata/*.txt ]]; then - file=${line##* } + if [[ "$line" == *M*metadata/*.txt ]]; then + file=${line##* } + + id=${file##*/} + id=${id%.txt*} + if [ $# -gt 0 ]; then + found=false + for arg in "$@"; do + if [ "$id" == "$arg" ]; then + found=true + break + fi + done + $found || continue + fi - while read l; do - [[ "$l" == "Auto Name:"* ]] && name=${l##*:} - done < "$file" + [ -d metadata/$id ] && extra=metadata/$id - id=${file##*/} - id=${id%.txt*} - [ -d metadata/$id ] && extra=metadata/$id - [ -n "$name" ] && id="$name ($id)" + while read l; do + if [[ "$l" == "Auto Name:"* ]]; then + name=${l##*:} + break + fi + done < "$file" - newbuild=0 - while read l; do - if [[ "$l" == "+Build:"* ]]; then - newbuild=1 - build=${l#*:} - version=${build%%,*} - build=${build#*,} - vercode=${build%%,*} - fi - done < <(git diff HEAD -- "$file") + [ -n "$name" ] && id="$name ($id)" - if [ $newbuild -eq 0 ] - then + newbuild=0 + while read l; do + if [[ "$l" == "+Build:"* ]]; then + newbuild=1 + build=${l#*:} + version=${build%%,*} + build=${build#*,} + vercode=${build%%,*} + fi + done < <(git diff HEAD -- "$file") + + if [ $newbuild -eq 0 ]; then message="$id:" else message="Update $id to $version ($vercode)" fi - commands+=("git commit -m '$message' -e -v -- $file $extra") - fi + commands+=("git commit -m '$message' -e -v -- $file $extra") + fi done < <(git status --porcelain) for cmd in "${commands[@]}"; do - eval "$cmd" + eval "$cmd" done