From 6075620cd0b80a53af773700550dbb0ce4a6bc86 Mon Sep 17 00:00:00 2001 From: Lubomír Sedlář Date: Jun 15 2016 07:12:23 +0000 Subject: Add ZSH completion by Alexey I. Froloff There are some errors in there: container-build{,-setup} commands are missing. Fixes: rhbz#829012 Signed-off-by: Lubomír Sedlář --- diff --git a/MANIFEST.in b/MANIFEST.in index 1ffc8c5..7b296aa 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,4 +1,5 @@ include COPYING +include src/_fedpkg include src/fedpkg.bash include src/fedpkg.conf include src/fedpkg_man_page.py diff --git a/setup.py b/setup.py index 2b876fc..7df6370 100755 --- a/setup.py +++ b/setup.py @@ -25,5 +25,6 @@ setup( scripts=['src/bin/fedpkg'], data_files=[(bash_completion_dir(), ['src/fedpkg.bash']), ('/etc/rpkg', ['src/fedpkg.conf']), + ('/usr/share/zsh/site-functions', ['src/_fedpkg']), ], ) diff --git a/src/_fedpkg b/src/_fedpkg new file mode 100644 index 0000000..ac24300 --- /dev/null +++ b/src/_fedpkg @@ -0,0 +1,441 @@ +#compdef fedpkg + +(( $+functions[_fedpkg_targets] )) || +_fedpkg_targets() +{ + local expl + + _wanted koji-targets expl 'target' compadd \ + ${${(f)"$(_call_program koji-targets koji list-targets --quiet 2>/dev/null)"}%% *} +} + +(( $+functions[_fedpkg_arches] )) || +_fedpkg_arches() +{ + local expl + local -a arches + + arches=( /etc/mock/[^-]##-[^-]##-[^-]##.cfg ) + _wanted mock-arches expl 'arch' compadd \ + ${(u)${arches#/etc/mock/[^-]##-[^-]##-}%.cfg} +} + +(( $+functions[_fedpkg_packages] )) || +_fedpkg_packages() +{ + local expl + + _wanted repo-packages expl 'package' compadd \ + ${${(fu)"$(repoquery -Cs -- "$words[CURRENT]*")"}%-[^-]##-[^-]##.src.rpm} +} + +(( $+functions[_fedpkg_branches] )) || +_fedpkg_branches() +{ + local expl + local -a git_opts + local -a branches + + (( ${words[(I)--path]} )) && + git_opts=( --git-dir ${words[${words[(i)--path]}+1]} ) + + branches=(${${(f)"$(git $git_opts for-each-ref --format='%(refname)' refs/heads 2>/dev/null)"}#refs/heads/}) + branches+=(${${(f)"$(git $git_opts for-each-ref --format='%(refname)' refs/remotes 2>/dev/null)"}##refs/remotes/*/}) + + _wanted branch-names expl 'branch-name' compadd \ + ${(u)branches} +} + +(( $+functions[_fedpkg-help] )) || +_fedpkg-help () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' +} + +(( $+functions[_fedpkg-build] )) || +_fedpkg-build () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '--arches[build for specific arches]:*:arch:_fedpkg_arches' \ + '--md5[use md5 checksums]' \ + '--nowait[don'\''t wait on build]' \ + '--target[define build target to build into]:target:_fedpkg_targets' \ + '--background[run the build at a low priority]' \ + '--skip-tag[do not attempt to tag package]' \ + '--scratch[perform a scratch build]' \ + '--srpm[build from an srpm]::srpm:_files -g "*.src.rpm"' +} + +(( $+functions[_fedpkg-chain-build] )) || +_fedpkg-chain-build () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '--arches[build for specific arches]:*:arch:_fedpkg_arches' \ + '--md5[use md5 checksums]' \ + '--nowait[on'\''t wait on build]' \ + '--target[define build target to build into]:target:_fedpkg_targets' \ + '--background[run the build at a low priority]' \ + '*:package:_fedpkg_packages' +} + +(( $+functions[_fedpkg-clean] )) || +_fedpkg-clean () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '(-n --dry-run)'{-n,--dry-run}'[perform a dry-run]' \ + '-x[do not follow .gitignore rules]' +} + +(( $+functions[_fedpkg-clog] )) || +_fedpkg-clog () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '--raw[generate a more "raw" clog without twiddling the contents]' +} + +(( $+functions[_fedpkg-clone] )) || +_fedpkg-clone () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '(-B --branches)'{-B,--branches}'[do an old style checkout with subdirs for branches]' \ + '(-b --branch)'{-b,--branch}'[check out a specific branch]:branch:_fedpkg_branches' \ + '(-a --anonymous)'{-a,--anonymous}'[check out a module anonymously]' \ + ':package:_fedpkg_packages' +} + +(( $+functions[_fedpkg-commit] )) || +_fedpkg-commit () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '(-c --clog)'{-c,--clog}'[generate the commit message from the %changelog section]' \ + '--raw[make the clog raw]' \ + '(-t --tag)'{-t,--tag}'[create a tag for this commit]' \ + '(-m --message)'{-m,--message}'[use the given commit message]:message' \ + '(-F --file)'{-F,--file}'[take the commit message from the given file]:file:_files' \ + '(-p --push)'{-p,--push}'[commit and push as one action]' \ + '*:file:_files' +} + +(( $+functions[_fedpkg-compile] )) || +_fedpkg-compile () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '--builddir[define an alternate builddir]:builddir:_files -/' \ + '--arch[prep for a specific arch]:arch:_fedpkg_arches' \ + '--short-circuit[short-circuit compile]' +} + +(( $+functions[_fedpkg-copr-build] )) || +_fedpkg-copr-build () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '--nowait[on'\''t wait on build]' \ + '*:project' +} + +(( $+functions[_fedpkg-diff] )) || +_fedpkg-diff () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '--cached[view staged changes]' \ + '*:file:_files' +} + +(( $+functions[_fedpkg-gimmespec] )) || +_fedpkg-gimmespec () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' +} + +(( $+functions[_fedpkg-gitbuildhash] )) || +_fedpkg-gitbuildhash () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + ':build' +} + +(( $+functions[_fedpkg-giturl] )) || +_fedpkg-giturl () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' +} + +(( $+functions[_fedpkg-import] )) || +_fedpkg-import () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + ':srpm:_files -g "*.src.rpm"' +} + +(( $+functions[_fedpkg-install] )) || +_fedpkg-install () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '--builddir[define an alternate builddir]:builddir:_files -/' \ + '--arch[prep for a specific arch]:arch:_fedpkg_arches' \ + '--short-circuit[short-circuit compile]' +} + +(( $+functions[_fedpkg-lint] )) || +_fedpkg-lint () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '(-i --info)'{-i,--info}'[display explanations for reported messages]' \ + '(-r --rpmlintconf)'{-r,--rpmlintconf}'[use a specific configuration file for rpmlint]:rpmlintconf:_files' +} + +(( $+functions[_fedpkg-local] )) || +_fedpkg-local () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '--builddir[define an alternate builddir]:builddir:_files -/' \ + '--arch[prep for a specific arch]:arch:_fedpkg_arches' \ + '--md5[use md5 checksums]' +} + +(( $+functions[_fedpkg-mockbuild] )) || +_fedpkg-mockbuild () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '--root[override mock root]:root:_files -/' \ + '--md5[use md5 checksums]' +} + +(( $+functions[_fedpkg-mock-config] )) || +_fedpkg-mock-config () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '--target[override target used for config]:target:_fedpkg_targets' + '--arch[override local arch]:arch:_fedpkg_arches' +} + +(( $+functions[_fedpkg-new] )) || +_fedpkg-new () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' +} + +(( $+functions[_fedpkg-new-sources] )) || +_fedpkg-new-sources () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '*:file:_files' +} + +(( $+functions[_fedpkg-patch] )) || +_fedpkg-patch () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '--rediff[recreate gendiff file retaining comments]' \ + ':suffix' +} + +(( $+functions[_fedpkg-prep] )) || +_fedpkg-prep () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '--builddir[define an alternate builddir]:builddir:_files -/' \ + '--arch[prep for a specific arch]:arch:_fedpkg_arches' +} + +(( $+functions[_fedpkg-pull] )) || +_fedpkg-pull () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '(--no-rebase)--rebase[rebase the locally committed changes on top of the remote changes]' \ + '(--rebase)--no-rebase[do not rebase, override .git settings to automatically rebase]' +} + +(( $+functions[_fedpkg-push] )) || +_fedpkg-push () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' +} + +(( $+functions[_fedpkg-scratch-build] )) || +_fedpkg-scratch-build () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '--arches[build for specific arches]:*:arch:_fedpkg_arches' \ + '--md5[use md5 checksums]' \ + '--nowait[on'\''t wait on build]' \ + '--target[define build target to build into]:target:_fedpkg_targets' \ + '--background[run the build at a low priority]' \ + '--srpm[build from an srpm]::srpm:_files -g "*.src.rpm"' +} + +(( $+functions[_fedpkg-sources] )) || +_fedpkg-sources () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '--outdir[directory to download files into]:outdir:_files -/' +} + +(( $+functions[_fedpkg-srpm] )) || +_fedpkg-srpm () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '--md5[use md5 checksums]' +} + +(( $+functions[_fedpkg-switch-branch] )) || +_fedpkg-switch-branch () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '(: -l --list)'{-l,--list}'[list both remote-tracking branches and local branches]' \ + '(-):branch:_fedpkg_branches' +} + +(( $+functions[_fedpkg-tag] )) || +_fedpkg-tag () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '(-f --force)'{-f,--force}'[force the creation of the tag]' \ + '(-m --message)'{-m,--message}'[use the given commit message]:message' \ + '(-c --clog)'{-c,--clog}'[generate the commit message from the %changelog section]' \ + '--raw[make the clog raw]' \ + '(-F --file)'{-F,--file}'[take the commit message from the given file]:file:_files' \ + '(-l --list)'{-l,--list}'[list all tags with a given pattern]' \ + '(-d --delete)'{-d,--delete}'[delete a tag]' \ + ':tag' +} + +(( $+functions[_fedpkg-unused-patches] )) || +_fedpkg-unused-patches () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' +} + +(( $+functions[_fedpkg-upload] )) || +_fedpkg-upload () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '*:file:_files' +} + +(( $+functions[_fedpkg-verify-files] )) || +_fedpkg-verify-files () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '--builddir[define an alternate builddir]:builddir:_files -/' \ + '--arch[prep for a specific arch]:arch:_fedpkg_arches' +} + +(( $+functions[_fedpkg-verrel] )) || +_fedpkg-verrel () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' +} + +(( $+functions[_fedpkg-retire] )) || +_fedpkg-retire () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' \ + '(-p --push)'{-p,--push}'[push changes to remote repository]' \ + ':message' +} + +(( $+functions[_fedpkg-update] )) || +_fedpkg-update () { + _arguments -C \ + '(-h --help)'{-h,--help}'[show help message and exit]' +} + +(( $+functions[_fedpkg_commands] )) || +_fedpkg_commands () { + local -a fedpkg_commands + fedpkg_commands=( + help:'show usage' + build:'request build' + chain-build:'build current package in order with other packages' + clean:'remove untracked files' + clog:'make a clog file containing top changelog entry' + clone:'clone and checkout a module' + commit:'commit changes' + compile:'local test rpmbuild compile' + copr-build:'build package in Copr' + diff:'show changes between commits, commit and working tree, etc' + gimmespec:'print the spec file name' + gitbuildhash:'print the git hash used to build the provided n-v-r' + giturl:'print the git url for building' + import:'import srpm content into a module' + install:'local test rpmbuild install' + lint:'run rpmlint against local spec and build output if present' + local:'local test rpmbuild binary' + mockbuild:'local test build using mock' + mock-config:'generate a mock config' + new:'diff against last tag' + new-sources:'upload new source files' + patch:'create and add a gendiff patch file' + prep:'local test rpmbuild prep' + pull:'pull changes from remote repository and update working copy' + push:'push changes to remote repository' + scratch-build:'request scratch build' + sources:'download source files' + srpm:'create a source rpm' + switch-branch:'work with branches' + tag:'management of git tags' + unused-patches:'print list of patches not referenced by name in the specfile' + upload:'upload source files' + verify-files:'locally verify %files section' + verrel:'print the name-version-release' + retire:'retire a package' + update:'submit last build as an update' + ) + + integer ret=1 + + # TODO: Is this the correct way of doing it? Should we be using _alternative + # and separate functions for each set of commands instead? + _describe -t fedpkg-commands 'fedpkg command' fedpkg_commands && ret=0 + + return ret +} + +_fedpkg() { + local -A fedpkg_aliases + fedpkg_aliases=( + co clone + ci commit + ) + integer ret=1 + + local curcontext=$curcontext state line + declare -A opt_args + + _arguments -C \ + '(- :)'{-h,--help}'[show help message and exit]' \ + '(-C --config)'{-C,--config}'[specify a config file to use]:config file:_files' \ + '--dist[override the discovered distribution]:distribution' \ + '--user[override the discovered user name]:user' \ + '--path[define the directory to work in (defaults to cwd)]:working direcory:_directories' \ + '(-q)-v[run with verbose debug output]' \ + '(-v)-q[run quietly only displaying errors]' \ + '(-): :->command' \ + '(-)*:: :->option-or-argument' && return + + case $state in + (command) + _fedpkg_commands && ret=0 + ;; + (option-or-argument) + local cmd=$words[1] + (( $+fedpkg_aliases[$cmd] )) && + cmd=$fedpkg_aliases[$cmd] + + curcontext=${curcontext%:*:*}:fedpkg-$cmd: + + if (( $+functions[_fedpkg-$cmd] )); then + _call_function ret _fedpkg-$cmd + elif zstyle -T :completion:$curcontext: use-fallback; then + _files && ret=0 + else + _message 'unknown sub-command' + fi + ;; + esac + + return ret +} + +_fedpkg