Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2023-05-29 16:05:59 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2023-05-29 16:05:59 +0200
commitbe8ac63f28a402acbf7e21972ac5d3b45bed1f79 (patch)
tree6eb83c09f6549ae41988a25243a2b424a4f99a4e /contrib
parentbfc22eea7e4c6877fe8b9d89fa574cb0729466db (diff)
parenta07df0beeaeea1bf5665512bacc7a013eece4602 (diff)
merged with devtools 1.0.1 upstream (git repo migration)
Diffstat (limited to 'contrib')
-rw-r--r--contrib/completion/bash/devtools.in543
-rw-r--r--contrib/completion/zsh/_devtools.in185
2 files changed, 635 insertions, 93 deletions
diff --git a/contrib/completion/bash/devtools.in b/contrib/completion/bash/devtools.in
index e7925b3..3faad27 100644
--- a/contrib/completion/bash/devtools.in
+++ b/contrib/completion/bash/devtools.in
@@ -2,89 +2,468 @@
#
# SPDX-License-Identifier: GPL-3.0-or-later
-_devtools_compgen() {
- local i r
- COMPREPLY=($(compgen -W '$*' -- "$cur"))
- for ((i=1; i < ${#COMP_WORDS[@]}-1; i++)); do
- for r in "${!COMPREPLY[@]}"; do
- if [[ ${COMP_WORDS[i]} = "${COMPREPLY[r]}" ]]; then
- unset 'COMPREPLY[r]'; break
- fi
- done
- done
-}
-
-_archco_pkg() {
- _devtools_compgen "$(
- command pacman "-$1"
- )"
-}
-
-_archco() {
- local cur prev
- COMPREPLY=()
- cur=$(_get_cword)
- prev=${COMP_WORDS[COMP_CWORD-1]}
-
- _archco_pkg Slq
- true
-} &&
-complete -F _archco archco communityco
-
-_makechrootpkg() {
- local cur
- COMPREPLY=()
- _get_comp_words_by_ref cur
-
- case $cur in
- -*)
- COMPREPLY=( $( compgen -W '-I -c -h -l -r -u' -- "$cur" ) )
- ;;
- *)
- _filedir
- return 0
- ;;
- esac
-
- true
-} &&
+_DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@}
+# shellcheck source=src/lib/valid-tags.sh
+source "${_DEVTOOLS_LIBRARY_DIR}"/lib/valid-tags.sh
+# shellcheck source=src/lib/valid-repos.sh
+source "${_DEVTOOLS_LIBRARY_DIR}"/lib/valid-repos.sh
+
+_binary_arch=${_arch[*]:0:-1}
+_colors=(never always auto)
+
+
+_makechrootpkg_args=(
+ -h
+ -c
+ -d
+ -D
+ -u
+ -r
+ -I
+ -l
+ -n
+ -T
+ -U
+)
+_makechrootpkg_args_d_opts() { _filedir -d; }
+_makechrootpkg_args_D_opts() { _filedir -d; }
+_makechrootpkg_args_r_opts() { _filedir -d; }
+_makechrootpkg_args_I_opts() { _filedir '*.pkg.tar.*'; }
+_makechrootpkg_args_l_opts() { _filedir -d; }
+_makechrootpkg_args_U_opts() { :; }
+_makechrootpkg() { __devtools_complete _makechrootpkg; }
complete -F _makechrootpkg makechrootpkg
-_mkarchroot() {
- local cur
- COMPREPLY=()
- _get_comp_words_by_ref cur
-
- case $cur in
- -*)
- COMPREPLY=( $( compgen -W '-C -M -c -h' -- "$cur" ) )
- ;;
- *)
- _filedir
- return 0
- ;;
- esac
-
- true
-} &&
+
+_makerepropkg_args=(
+ -h
+ -d
+ -c
+ -M
+)
+_makerepropkg_args_c_opts() { _filedir -d; }
+_makerepropkg_args_M_opts() { _filedir '*.conf'; }
+_makerepropkg_opts() { _filedir '*.pkg.tar.*'; }
+_makerepropkg() { __devtools_complete _makerepropkg; }
+complete -F _makerepropkg makerepropkg
+
+
+_mkarchroot_args=(
+ -U
+ -C
+ -M
+ -c
+ -h
+)
+_mkarchroot_args_U_opts() { _filedir '*.pkg.tar.*'; }
+_mkarchroot_args_C_opts() { _filedir '*.conf'; }
+_mkarchroot_args_M_opts() { _filedir '*.conf'; }
+_mkarchroot_args_c_opts() { _filedir -d; }
+_mkarchroot_opts() {
+ local args
+ args=$(__pkgctl_word_count_after_subcommand)
+ if (( args == 0 )); then
+ _filedir -d
+ elif (( args >= 1 )); then
+ _devtools_completions_all_packages
+ fi
+}
+_mkarchroot() { __devtools_complete _mkarchroot; }
complete -F _mkarchroot mkarchroot
-_arch-nspawn() {
- local cur
- COMPREPLY=()
- _get_comp_words_by_ref cur
-
- case $cur in
- -*)
- COMPREPLY=( $( compgen -W '-C -M -c -h' -- "$cur" ) )
- ;;
- *)
- _filedir
- return 0
- ;;
- esac
-
- true
-} &&
-complete -F _arch-nspawn arch-nspawn
-# ex:et ts=2 sw=2 ft=sh
+
+_arch_nspawn_args=(
+ -C
+ -M
+ -c
+ -f
+ -s
+ -h
+)
+_arch_nspawn_args_C_opts() { _filedir '*.conf'; }
+_arch_nspawn_args_M_opts() { _filedir '*.conf'; }
+_arch_nspawn_args_c_opts() { _filedir -d; }
+_arch_nspawn_args_f_opts() { _filedir; }
+_arch_nspawn_opts() {
+ local args
+ args=$(__pkgctl_word_count_after_subcommand)
+ if (( args == 0 )); then
+ _filedir -d
+ fi
+}
+_arch_nspawn() { __devtools_complete _arch_nspawn; }
+complete -F _arch_nspawn arch-nspawn
+
+
+_sogrep_args=(
+ -v --verbose
+ -r --refresh
+ -h --help
+)
+_sogrep_opts() {
+ local args
+ args=$(__pkgctl_word_count_after_subcommand)
+ if (( args == 0 )); then
+ _devtools_completions_repo all
+ fi
+}
+_sogrep() { __devtools_complete _sogrep; }
+complete -F _sogrep sogrep
+
+
+_offload_build_args=(
+ -r --repo
+ -a --arch
+ -s --server
+ -h --help
+)
+_offload_build_args__repo_opts() { _devtools_completions_build_repo; }
+_offload_build_args_r_opts() { _offload_build_args__repo_opts; }
+_offload_build_args__arch_opts() { _devtools_completions_arch; }
+_offload_build_args_a_opts() { _offload_build_args__arch_opts; }
+_offload_build_args__server_opts() { :; }
+_offload_build_args_s_opts() { _offload_build_args__server_opts; }
+_offload_build() { __devtools_complete _offload_build; }
+complete -F _offload_build offload-build
+
+
+_pkgctl_cmds=(
+ auth
+ build
+ db
+ diff
+ release
+ repo
+ version
+)
+_pkgctl_args=(
+ -V --version
+ -h --help
+)
+
+
+_pkgctl_auth_cmds=(
+ login
+ status
+)
+
+
+_pkgctl_auth_login_args=(
+ -g --gen-access-token
+ -h --help
+)
+
+
+_pkgctl_auth_status_args=(
+ -t --show-token
+ -h --help
+)
+
+
+_pkgctl_build_args=(
+ --arch
+ --repo
+
+ -s --staging
+ -t --testing
+ -o --offload
+ -c --clean
+ -w --worker
+
+ --pkgver
+ --pkgrel
+ --rebuild
+ -e --edit
+
+ -r --release
+ -m --message
+ -u --db-update
+
+ -h --help
+)
+_pkgctl_build_args__arch_opts() { _devtools_completions_arch; }
+_pkgctl_build_args__repo_opts() { _devtools_completions_repo; }
+_pkgctl_build_args__worker_opts() { :; }
+_pkgctl_build_args_w_opts() { _pkgctl_build_args__worker_opts; }
+_pkgctl_build_args__pkgver_opts() { :; }
+_pkgctl_build_args__pkgrel_opts() { :; }
+_pkgctl_build_args__message_opts() { :; }
+_pkgctl_build_args_m_opts() { _pkgctl_build_args__message_opts; }
+_pkgctl_build_opts() { _filedir -d; }
+
+
+_pkgctl_db_cmds=(
+ move
+ remove
+ update
+)
+
+
+_pkgctl_db_move_args=(
+ -h --help
+)
+_pkgctl_db_move_opts() {
+ local subcommand args
+ subcommand=(db move)
+ args=$(__pkgctl_word_count_after_subcommand "${subcommand[@]}")
+
+ if (( args == 0 )); then
+ _devtools_completions_repo
+ elif (( args == 1 )); then
+ _devtools_completions_repo
+ elif (( args >= 2 )); then
+ _devtools_completions_all_packages
+ fi
+}
+
+
+_pkgctl_db_remove_args=(
+ -a --arch
+ -h --help
+)
+_pkgctl_db_remove_opts() {
+ local subcommand args
+ subcommand=(db remove)
+ args=$(__pkgctl_word_count_after_subcommand "${subcommand[@]}")
+
+ if (( args == 0 )); then
+ _devtools_completions_repo
+ elif (( args >= 1 )); then
+ _devtools_completions_all_packages
+ fi
+}
+
+
+_pkgctl_db_update_args=(
+ -h --help
+)
+
+
+_pkgctl_release_args=(
+ -m --message
+ -r --repo
+ -s --staging
+ -t --testing
+ -u --db-update
+ -h --help
+)
+_pkgctl_release_args__message_opts() { :; }
+_pkgctl_release_args_m_opts() { _pkgctl_release_args__message_opts; }
+_pkgctl_release_args__repo_opts() { _devtools_completions_repo; }
+_pkgctl_release_args_r_opts() { _pkgctl_release_args__repo_opts; }
+_pkgctl_release_opts() { _filedir -d; }
+
+
+_pkgctl_repo_cmds=(
+ clone
+ configure
+ create
+ switch
+ web
+)
+
+
+_pkgctl_repo_clone_args=(
+ -m --maintainer
+ --protocol
+ --switch
+ -u --unprivileged
+ --universe
+ -j --jobs
+ -h --help
+)
+_pkgctl_repo_clone_args__maintainer_opts() { :; }
+_pkgctl_repo_clone_args_m_opts() { _pkgctl_repo_clone_args__maintainer_opts; }
+_pkgctl_repo_clone_args__protocol_opts() { _devtools_completions_protocol; }
+_pkgctl_repo_clone_args__switch_opts() { :; }
+_pkgctl_repo_clone_args__jobs_opts() { :; }
+_pkgctl_repo_clone_args_j_opts() { _pkgctl_repo_clone_args__jobs_opts; }
+_pkgctl_repo_clone_opts() { _devtools_completions_all_packages; }
+
+
+_pkgctl_repo_configure_args=(
+ --protocol
+ -j --jobs
+ -h --help
+)
+_pkgctl_repo_configure_args__protocol_opts() { _devtools_completions_protocol; }
+_pkgctl_repo_configure_args__jobs_opts() { :; }
+_pkgctl_repo_configure_args_j_opts() { _pkgctl_repo_clone_args__jobs_opts; }
+_pkgctl_repo_configure_opts() { _filedir -d; }
+
+
+_pkgctl_repo_create_args=(
+ -c --clone
+ -h --help
+)
+
+
+_pkgctl_repo_switch_args=(
+ --discard-changes
+ -f --force
+ -h --help
+)
+_pkgctl_repo_switch_opts() {
+ local subcommand args
+ subcommand=(repo switch)
+ args=$(__pkgctl_word_count_after_subcommand "${subcommand[@]}")
+
+ if (( args == 0 )); then
+ :
+ elif (( args >= 1 )); then
+ _filedir -d;
+ fi
+}
+
+
+_pkgctl_repo_web_args=(
+ -h --help
+)
+_pkgctl_repo_web_opts() { _filedir -d; }
+
+
+_pkgctl_diff_args=(
+ -l --list
+ -d --diffoscope
+ -p --pkginfo
+ -b --buildinfo
+ -m --makepkg-config
+ -u -U --unified
+ -y --side-by-side
+ --color
+ -W --width
+ -P --pool
+ -v --verbose
+ -h --help
+)
+_pkgctl_diff_args__makepkg_config_opts() { _filedir '*.conf'; }
+_pkgctl_diff_args_m_opts() { _pkgctl_diff_args__makepkg_config_opts; }
+_pkgctl_diff_args__width_opts() { :; }
+_pkgctl_diff_args_W_opts() { _pkgctl_diff_args__width_opts; }
+_pkgctl_diff_args__color_opts() { _devtools_completions_color; }
+_pkgctl_diff_args__pool_opts() { _filedir -d; }
+_pkgctl_diff_args_P_opts() { _pkgctl_diff_args__pool_opts; }
+_pkgctl_diff_opts() { _devtools_completions_all_packages; }
+
+
+_pkgctl_version_args=(
+ -h --help
+)
+
+
+_devtools_completions_color() {
+ mapfile -t COMPREPLY < <(compgen -W "${_colors[*]}" -- "$cur")
+}
+_devtools_completions_arch() {
+ mapfile -t COMPREPLY < <(compgen -W "${_arch[*]}" -- "$cur")
+}
+_devtools_completions_repo() {
+ local optional=${1:-}
+ mapfile -t COMPREPLY < <(compgen -W "${optional} ${_repos[*]}" -- "$cur")
+}
+_devtools_completions_build_repo() {
+ mapfile -t COMPREPLY < <(compgen -W "${_build_repos[*]}" -- "$cur")
+}
+_devtools_completions_all_packages() {
+ mapfile -t COMPREPLY < <(compgen -W "$(pacman -Sql)" -- "$cur")
+}
+_devtools_completions_protocol() {
+ mapfile -t COMPREPLY < <(compgen -W "https" -- "$cur")
+}
+
+__devtools_complete() {
+ local service=$1
+ local cur prev
+
+ # Don't break words at : and =
+ COMP_WORDBREAKS=${COMP_WORDBREAKS//[:=]}
+
+ cur=$(_get_cword)
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+
+ __pkgctl_handle_subcommands "${service}"
+ return 0
+}
+
+__pkgctl_has_func() {
+ declare -f -- "${1}" &>/dev/null
+}
+
+__pkgctl_has_array() {
+ declare -p -- "${1}" &>/dev/null
+}
+
+__pkgctl_is_subcommand() {
+ __pkgctl_has_array "${1}"_args || \
+ __pkgctl_has_array "${1}"_cmds
+}
+
+__pkgctl_words_after_subcommand() {
+ local subcommand=("$@")
+ local subcommand_idx=0
+ local word prev_word
+ for ((i = 1; i < ${#COMP_WORDS[@]}; ++i)); do
+ word=${COMP_WORDS[i]}
+ prev_word=${COMP_WORDS[i-1]}
+ # skip options and the current typing
+ if [[ ${word} == -* ]] || [[ ${word} == "${cur}" ]]; then
+ continue
+ fi
+ # skip until we resolved the passed subcommand
+ if (( subcommand_idx < ${#subcommand[@]} )); then
+ if [[ $word == "${subcommand[$subcommand_idx]}" ]]; then
+ subcommand_idx=$(( subcommand_idx + 1 ))
+ fi
+ continue
+ fi
+ # skip previous options as they belong to the argument
+ if [[ ${prev_word} == -* ]] && __pkgctl_has_func "${service_name}_args${prev_word//-/_}_opts"; then
+ continue
+ fi
+ printf "%s\n" "${word}"
+ done
+}
+__pkgctl_word_count_after_subcommand() {
+ local subcommand=("$@")
+ mapfile -t words < <(__pkgctl_words_after_subcommand "${subcommand[@]}")
+ echo "${#words[@]}"
+}
+
+__pkgctl_handle_subcommands() {
+ local service_name=${1}
+ local index=${2:-0}
+ local word ref
+
+ # recurse into nested subcommands
+ for ((i = index + 1; i < ${#COMP_WORDS[@]}; ++i)); do
+ word=${COMP_WORDS[i]}
+ if [[ ${word} == -* ]] || [[ ${word} == "${cur}" ]]; then
+ continue
+ fi
+ if __pkgctl_is_subcommand "${service_name}_${word}"; then
+ __pkgctl_handle_subcommands "${service_name}_${word}" "${i}"
+ return
+ fi
+ done
+
+ # dynamic argument options
+ if [[ $prev == -* ]] && word=${prev//-/_} && __pkgctl_has_func "${service_name}_args${word}_opts"; then
+ "${service_name}_args${word}_opts"
+ # dynamic subcommand options
+ elif [[ $cur != -* ]] && __pkgctl_has_func "${service_name}_opts"; then
+ "${service_name}_opts"
+ # subcommand argument array
+ elif ( ! __pkgctl_has_array "${service_name}"_cmds || [[ $cur == -* ]] ) && __pkgctl_has_array "${service_name}_args"; then
+ declare -n ref="${service_name}_args"
+ mapfile -t COMPREPLY < <(compgen -W "${ref[*]}" -- "$cur")
+ # subcommand array
+ elif __pkgctl_has_array "${service_name}"_cmds; then
+ declare -n ref="${service_name}_cmds"
+ mapfile -t COMPREPLY < <(compgen -W "${ref[*]}" -- "$cur")
+ fi
+}
+
+
+_pkgctl() { __devtools_complete _pkgctl; }
+complete -F _pkgctl pkgctl
+# ex:noet ts=4 sw=4 ft=sh
diff --git a/contrib/completion/zsh/_devtools.in b/contrib/completion/zsh/_devtools.in
index 48d3dfd..a473bc2 100644
--- a/contrib/completion/zsh/_devtools.in
+++ b/contrib/completion/zsh/_devtools.in
@@ -1,9 +1,12 @@
-#compdef archbuild archco arch-nspawn archrelease commitpkg diffpkg finddeps makechrootpkg mkarchroot rebuildpkgs extrapkg=commitpkg corepkg=commitpkg testingpkg=commitpkg stagingpkg=commitpkg communitypkg=commitpkg community-testingpkg=commitpkg community-stagingpkg=commitpkg multilibpkg=commitpkg multilib-testingpkg=commitpkg extra-x86_64-build=archbuild testing-x86_64-build=archbuild staging-x86_64-build=archbuild multilib-build=archbuild multilib-testing-build=archbuild multilib-staging-build=archbuild kde-unstable-x86_64-build=archbuild gnome-unstable-x86_64-build=archbuild communityco=archco checkpkg sogrep offload-build makerepropkg
+#compdef archbuild arch-nspawn archrelease commitpkg pkgctl diffpkg finddeps makechrootpkg mkarchroot extrapkg=commitpkg corepkg=commitpkg testingpkg=commitpkg stagingpkg=commitpkg communitypkg=commitpkg community-testingpkg=commitpkg community-stagingpkg=commitpkg multilibpkg=commitpkg multilib-testingpkg=commitpkg extra-x86_64-build=archbuild testing-x86_64-build=archbuild staging-x86_64-build=archbuild multilib-build=archbuild multilib-testing-build=archbuild multilib-staging-build=archbuild kde-unstable-x86_64-build=archbuild gnome-unstable-x86_64-build=archbuild checkpkg sogrep offload-build makerepropkg
#
# SPDX-License-Identifier: GPL-3.0-or-later
-m4_include(lib/valid-tags.sh)
-m4_include(lib/valid-repos.sh)
+_DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@}
+# shellcheck source=src/lib/valid-tags.sh
+source "${_DEVTOOLS_LIBRARY_DIR}"/lib/valid-tags.sh
+# shellcheck source=src/lib/valid-repos.sh
+source "${_DEVTOOLS_LIBRARY_DIR}"/lib/valid-repos.sh
_binary_arch=${_arch[*]:0:-1}
_colors=(never always auto)
@@ -15,10 +18,122 @@ _archbuild_args=(
'--[Introduce makechrootpkg options]:*::makechrootpkg options:= _dispatch makechrootpkg makechrootpkg'
)
-_archco_args=(
+_pkgctl_auth_cmds=(
+ "pkgctl auth command"
+ "login[Authenticate with the GitLab instance]"
+ "status[View authentication status]"
+)
+
+_pkgctl_auth_login_args=(
+ '(-g --gen-access-token)'{-g,--gen-access-token}'[Open the URL to generate a new personal access token]'
+ '(-h --help)'{-h,--help}'[Display usage]'
+)
+
+_pkgctl_auth_status_args=(
+ '(-t --show-token)'{-t,--show-token}'[Display the auth token]'
+ '(-h --help)'{-h,--help}'[Display usage]'
+)
+
+_pkgctl_build_args=(
+ "--arch=[Specify architectures to build for (disables auto-detection)]:arch:($_arch[*])"
+ "--repo=[Specify a target repository (disables auto-detection)]:repo:($_repos[*])"
+ '(-s --staging)'{-s,--staging}'[Build against the staging counterpart of the auto-detected repo]'
+ '(-t --testing)'{-t,--testing}'[Build against the testing counterpart of the auto-detected repo]'
+ '(-o --offload)'{-o,--offload}'[Build on a remote server and transfer artifacts afterwards]'
+ '(-c --clean)'{-c,--clean}'[Recreate the chroot before building]'
+ '(-I --install)'{-I,--install}'[Install a package into the working copy of the chroot]:target:_files -g "*.pkg.tar.*(.)"'
+ '(-w --worker)'{-w,--worker}'[Name of the worker slot, useful for concurrent builds (disables auto-detection)]:slot:'
+ '--nocheck[Do not run the check() function in the PKGBUILD]'
+ '--pkgver=[Set pkgver, reset pkgrel and update checksums]:pkgver:'
+ '--pkgrel=[Set pkgrel to a given value]:pkgrel:'
+ '--rebuild[Increment the pkgrel variable]'
+ '(-e --edit)'{-e,--edit}'[Edit the PKGBUILD before building]'
+ '(-r --release)'{-r,--release}'[Automatically commit, tag and release after building]'
+ '(-m --message=)'{-m,--message=}"[Use the given <msg> as the commit message]:message:"
+ '(-u --db-update)'{-u,--db-update}'[Automatically update the pacman database as last action]'
+ '(-h --help)'{-h,--help}'[Display usage]'
+ '*:git_dir:_files -/'
+)
+
+_pkgctl_db_cmds=(
+ "pkgctl db command"
+ "move[Move packages between pacman repositories]"
+ "remove[Remove packages from pacman repositories]"
+ "update[Update the pacman database as final release step]"
+)
+
+_pkgctl_db_move_args=(
+ '(-h --help)'{-h,--help}'[Display usage]'
+ "1:src-repo:($_repos[*])"
+ "2:target-repo:($_repos[*])"
+ '*:pkgbase:_devtools_completions_all_packages'
+)
+
+_pkgctl_db_remove_args=(
+ '(-a --arch=)'{-a,--arch=}"[Override the architecture (disables auto-detection)]:arch:($_arch[*])"
+ '(-h --help)'{-h,--help}'[Display usage]'
+ "1:repo:($_repos[*])"
+ '*:pkgbase:_devtools_completions_all_packages'
+)
+
+_pkgctl_db_update_args=(
+ '(-h --help)'{-h,--help}'[Display usage]'
+)
+
+_pkgctl_release_args=(
+ '(-m --message=)'{-m,--message=}"[Use the given <msg> as the commit message]:message:"
+ '(-r --repo=)'{-r,--repo=}"[Specify a target repository (disables auto-detection)]:repo:($_repos[*])"
+ '(-s --staging)'{-s,--staging}'[Release to the staging counterpart of the auto-detected repo]'
+ '(-t --testing)'{-t,--testing}'[Release to the testing counterpart of the auto-detected repo]'
+ '(-u --db-update)'{-u,--db-update}'[Automatically update the pacman database after uploading]'
+ '(-h --help)'{-h,--help}'[Display usage]'
+ '*:git_dir:_files -/'
+)
+
+_pkgctl_repo_cmds=(
+ "pkgctl repo command"
+ "clone[Clone a package repository]"
+ "configure[Configure a clone according to distro specs]"
+ "create[Create a new GitLab package repository]"
+ "switch[Switch a package repository to a specified version]"
+ "web[Open the packaging repository's website]"
+)
+
+_pkgctl_repo_switch_args=(
+ '(-f --force --discard-changes)'{-f,--force,--discard-changes}'[Discard changes if index or working tree is dirty]'
+ '(-h --help)'{-h,--help}'[Display usage]'
+ '1:version'
+ '*:git_dir:_files -/'
+)
+
+_pkgctl_repo_clone_args=(
+ '(-m --maintainer=)'{-m,--maintainer=}'[Clone all packages of the named maintainer]:maintainer:'
+ '--protocol[Clone the repository over https]:proto:(https)'
+ '--switch=[Switch the current working tree to a specified version]'
+ '--universe[Clone all existing packages, useful for cache warming]'
+ '(-j --jobs)'{-j,--jobs}'[Run up to N jobs in parallel (default: number of processing units)]:jobs:'
+ '(-h --help)'{-h,--help}'[Display usage]'
'*:packages:_devtools_completions_all_packages'
)
+_pkgctl_repo_configure_args=(
+ '--protocol[Configure remote url to use https]:proto:(https)'
+ '(-j --jobs)'{-j,--jobs}'[Run up to N jobs in parallel (default: number of processing units)]:jobs:'
+ '(-h --help)'{-h,--help}'[Display usage]'
+ '*:git_dir:_files -/'
+)
+
+_pkgctl_repo_create_args=(
+ '(-c --clone)'{-c,--clone}'[Clone the Git repository after creation]'
+ '(-h --help)'{-h,--help}'[Display usage]'
+ '1:pkgbase'
+)
+
+_pkgctl_repo_web_args=(
+ '(-h --help)'{-h,--help}'[Display usage]'
+ '*:git_dir:_files -/'
+)
+
_arch_nspawn_args=(
'-C[Location of a pacman config file]:pacman_config:_files -g "*.conf(.)"'
'-M[Location of a makepkg config file]:makepkg_config:_files -g "*.conf(.)"'
@@ -86,11 +201,6 @@ _mkarchroot_args=(
'*:packages:_devtools_completions_all_packages'
)
-_rebuildpkgs_args=(
- '1:chroot_dir:_files -/'
- '*:packages:_devtools_completions_all_packages'
-)
-
_checkpkg_args=(
'(-r --rmdir)'{-r,--rmdir}'[Remove the temporary directory]'
'(-w --warn)'{-w,--warn}'[Print a warning in case of differences]'
@@ -127,9 +237,62 @@ _devtools_completions_all_packages() {
compadd - "${(@)packages}"
}
+_pkgctl_cmds=(
+ "pkgctl command"
+ "auth[Authenticate with services like GitLab]"
+ "build[Build packages inside a clean chroot]"
+ "db[Pacman database modification for packge update, move etc]"
+ "diff[Compare package files using different modes]"
+ "release[Release step to commit, tag and upload build artifacts]"
+ "repo[Manage Git packaging repositories and their configuration]"
+ "version[Show pkgctl version information]"
+)
+
+_pkgctl_args=(
+ '(-V --version)'{-V,--version}'[Show pkgctl version information]'
+ '(-h --help)'{-h,--help}'[Display usage]'
+)
+
+_pkgctl_version_args=(
+ '(-h --help)'{-h,--help}'[Display usage]'
+)
+
+_pkgctl_diff_args=("${_diffpkg_args[@]}")
+
+_handle_subcommands() {
+ local service_name=${1}
+ if typeset -p ${service_name}_cmds &> /dev/null; then
+ _arguments -C \
+ "1: :->cmds" \
+ '*::arg:->args'
+ case $state in
+ cmds)
+ if [[ "${line[-1]}" == -* ]] && typeset -p ${service_name}_args &> /dev/null; then
+ local argname="${service_name}_args[@]"
+ _arguments -s "${(P)argname}"
+ else
+ local service_cmds=${service_name}_cmds[@]
+ _values "${(P)service_cmds}"
+ fi
+ ;;
+ args)
+ local service_sub=${service_name}_$line[1]
+ if typeset -p ${service_sub}_args &> /dev/null; then
+ local cmd_args=${service_sub}_args[@]
+ _arguments -s "${(P)cmd_args}"
+ elif typeset -p ${service_sub}_cmds &> /dev/null; then
+ _handle_subcommands "${service_sub}"
+ fi
+ ;;
+ esac
+ elif typeset -p ${service_name}_args &> /dev/null; then
+ local argname="${service_name}_args[@]"
+ _arguments -s "${(P)argname}"
+ fi
+}
+
_devtools() {
- local argname="_${service//-/_}_args[@]"
- _arguments -s "${(P)argname}"
+ _handle_subcommands _${service//-/_}
}
_devtools