Skip to content

Instantly share code, notes, and snippets.

@leahneukirchen
Created July 22, 2014 15:30
Show Gist options
  • Save leahneukirchen/cebf0ec20af2862e638b to your computer and use it in GitHub Desktop.
Save leahneukirchen/cebf0ec20af2862e638b to your computer and use it in GitHub Desktop.
#compdef xbps-checkvers xbps-create xbps-dgraph xbps-install xbps-pkgdb xbps-query xbps-reconfigure xbps-remove xbps-rindex xbps-uchroot xbps-uhelper
_xbps_common=(
{-C,--config=-}'[Full path to configuration file]:config file:_files'
{-d,--debug}'[Debug mode shown to stderr]'
{-h,--help}'[Print help usage]'
{-n,--dry-run}'[Dry-run mode]'
{-r,--rootdir=-}'[Full path to rootdir]:root dir:_files -/'
{-v,--verbose}'[Verbose messages]'
{-V,--version}'[Show XBPS version]'
)
_xbps_all_packages() {
compadd "$@" -- $(xbps-query -s '' | sed 's/^... \([^ ]*\)-.* .*/\1/')
}
_xbps_installed_packages() {
compadd "$@" -- $(xbps-query -l | sed 's/^.. \([^ ]*\)-.* .*/\1/')
}
_xbps_checkvers() {
_arguments -s : \
$_xbps_common \
{-D,--distdir}'[Set the path to xbps-packages]:path:_files -/' \
{-i,--installed}'[Check for outdated packages in rootdir]' \
{-s,--show-missing}'[List any binary packages which are not built.]' \
'*:extra packages:_files'
}
_xbps_create() {
_arguments -s : \
{-A,--architecture}'[Package architecture]:architecture:(i686 i686-musl x86_64 x86_64-musl armv7l armv7l-musl armv6l armv6l-musl noarch)' \
{-B,--built-with}'[Package builder string]:package builder: ' \
{-C,--conflicts}'[Conflicts]:conflicts: ' \
{-D,--dependencies}'[Dependencies]:dependencies: ' \
{-F,--config-files}'[Configuration files]:configuration files: ' \
{-H,--homepage}'[Homepage]:homepage: ' \
{-h,--help}'[Show help]' \
{-l,--license}'[License]:license: ' \
{-M,--mutable-files}'[Mutable files list]:mutable files: ' \
{-m,--maintainer}'[Maintainer]:maintainer: ' \
{-n,--pkgver}'[Package name/version tuple]:package name/version: ' \
{-P,--provides}'[Provides]:provides: ' \
{-p,--preserve}'[Enable package preserve boolean]' \
{-q,--quiet}'[Work silently]' \
{-R,--replaces}'[Replaces]:replaces: ' \
{-S,--long-desc}'[Long description]:long description: ' \
{-s,--desc}'[Short description]:short description: ' \
{-t,--tags}'[A list of tags/categories]:tags: ' \
{-V,--version}'[Prints XBPS release version]' \
--build-options'[A string with the used build options]:used build options: ' \
--compression'[Compression format]:compression format:(gzip bzip2 xz)' \
--shlib-provides'[List of provided shared libraries]:provided shared libraries: ' \
--shlib-requires'[List of required shared libraries]:required shared libraries: '
}
_xbps_dgraph() {
_arguments : \
'-c[Path to configuration file]:config file:_files' \
'-g[Generate a default config file]' \
'-o[Output file]:output file:_files' \
'-R[Also generate reverse dependencies in the graph]' \
'-r[Full path to rootdir]:root dir:_files -/' \
':package:_xbps_all_packages'
}
_xbps_install() {
_arguments -s : \
$_xbps_common \
{-A,--automatic}'[Set automatic installation mode]' \
{-c,--cachedir=-}'[Full path to cachedir]:cache dir:_files -/' \
{-f,--force}'[Force package re-installation]' \
{-R,--repository=-}'[Add repository to the top of the list]:repository url:_files -/' \
{-S,--sync}'[Sync remote repository index]' \
{-u,--update}'[Update target packages]' \
{-y,--yes}'[Assume yes to all questions]' \
'*:available packages:_xbps_all_packages'
}
_xbps_pkgdb() {
_arguments -s : \
$_xbps_common \
{-a,--all}'[Process all packages]' \
{-m,--mode}'[Change to this mode]:mode:(auto manual hold unhold)' \
{-u,--update}'[Update pkgdb to the latest format]'
'*:installed packages:_xbps_installed_packages'
}
_xbps_query() {
_arguments -s : \
$_xbps_common \
{-c,--cachedir=-}'[Full path to cachedir]:cache dir:_files -/' \
{-p,--property=-}'[Show properties]: ' \
--regex'[Use Extended Regular Expressions to match]' \
{-R,--repository}'[Enable repository mode]' \
--repository=-'[Add repository to the top of the list]:repository url:_files -/' \
- '(actions)' \
{-l,--list-pkgs}'[List installed packages]' \
{-L,--list-repos}'[List registered repositories]' \
{-H,--list-hold-pkgs}'[List packages on hold state]' \
{-m,--list-manual-pkgs}'[List packages installed explicitly]' \
{-O,--list-orphans}'[List package orphans]' \
{-o,--ownedby}'[Search for package files]:package file:_files' \
{-S,--show}'[Show information]:package:_xbps_all_packages' \
{-s,--search}'[Search for packages]:search string: ' \
{-f,--files}'[Show package files]:package:_xbps_all_packages' \
{-x,--deps}'[Show dependencies]:package:_xbps_all_packages' \
{-X,--revdeps}'[Show reverse dependencies]:package:_xbps_all_packages' \
- '(default)' \
':package:_xbps_all_packages'
}
_xbps_reconfigure() {
_arguments -s : \
$_xbps_common \
{-a,--all}'[Process all packages]' \
{-f,--force}'[Force reconfiguration]' \
'*:installed packages:_xbps_installed_packages'
}
_xbps_remove() {
_arguments -s : \
$_xbps_common \
{-c,--cachedir=-}'[Full path to cachedir]:cache dir:_files -/' \
{-F,--force-revdeps}'[Force package removal even with revdeps]' \
{-f,--force}'[Force package files removal]' \
{-O,--clean-cache}'[Remove obsolete packages in cachedir]' \
{-o,--remove-orphans}'[Remove package orphans]' \
{-R,--recursive}'[Recursively remove dependencies]' \
{-y,--yes}'[Assume yes to all questions]' \
'*:installed packages:_xbps_installed_packages'
}
_xbps_rindex() {
_arguments -s : \
{-f,--force}'[Force mode to overwrite entry in add mode]' \
{-h,--help}'[Print help usage]' \
{-v,--verbose}'[Verbose messages]' \
{-V,--version}'[Show XBPS version]' \
'--privkey[Path to the private key for signing]:private key path:_files' \
'--signedby[Signature details]:signature details: ' \
{-a,--add}'[Add package to repository index]' \
{-c,--clean}'[Clean repository index]' \
{-r,--remove-obsoletes}'[Removes obsolete packages from repository]' \
{-s,--sign}'[Sign repository index]' \
':repository dir:_files -/' \
'*:packages:_files'
}
_xbps_uchroot() {
_arguments \
'-D[distdir]:distdir:_files -/' \
'-H[hostdir]:hostdir:_files -/' \
'-S[shmdir]:shmdir:_files -/' \
':command: _command_names -e' \
'*::arguments: _normal'
}
_xbps_uhelper() {
local ret=1
_arguments \
{-C,--config=-}'[Full path to configuration file]:config file:_files' \
{-d,--debug}'[Debug mode shown to stderr]' \
{-r,--rootdir=-}'[Full path to rootdir]:root dir:_files -/' \
{-V,--version}'[Show XBPS version]' \
'1:action:->actions' \
'*:: :->args' && ret=0
case $state in
actions)
_values "actions" cmpver digest fetch getpkgdepname \
getpkgname getpkgrevision getpkgversion \
pkgmatch version real-version
ret=0;;
args)
case $words[1] in
cmpver) _arguments ':installed version: ' ':required version: ' && ret=0;;
digest) _arguments '*:files:_files' && ret=0;;
fetch) _arguments '*:urls: ' && ret=0;;
getpkgdepname) _arguments '*:string: ' && ret=0;;
getpkgname) _arguments '*:string: ' && ret=0;;
getpkgrevision) _arguments '*:string: ' && ret=0;;
getpkgversion) _arguments '*:string: ' && ret=0;;
pkgmatch) _arguments ':version: ' ':pattern: ' && ret=0;;
real-version) _arguments ':package:_xbps_installed_packages' && ret=0;;
version) _arguments ':package:_xbps_installed_packages' && ret=0;;
esac
;;
esac
return $ret
}
_xbps() {
case "$service" in
xbps-checkvers) _xbps_checkvers "$@";;
xbps-create) _xbps_create "$@";;
xbps-dgraph) _xbps_dgraph "$@";;
xbps-install) _xbps_install "$@";;
xbps-pkgdb) _xbps_pkgdb "$@";;
xbps-query) _xbps_query "$@";;
xbps-reconfigure) _xbps_reconfigure "$@";;
xbps-remove) _xbps_remove "$@";;
xbps-rindex) _xbps_rindex "$@";;
xbps-uchroot) _xbps_uchroot "$@";;
xbps-uhelper) _xbps_uhelper "$@";;
esac
}
_xbps "$@"
#compdef xbps-src
setopt localoptions extended_glob
local ret=0 archs
archs=(armv6hf-musl armv6hf armv7hf-musl armv7hf i686-musl i686 mips mipsel x86_64-musl)
_xbps_src_all_packages() {
compadd "$@" -- srcpkgs/*(:t)
}
_xbps_src_destdir_packages() {
local -a dirs
dirs=( masterdir/destdir/*~[^-]#-linux-[^-]#(N/) )
compadd "$@" -- ${${dirs:t}%-*}
}
_xbps_src_build_packages() {
local -a dirs
dirs=( masterdir/builddir/*~[^-]#-linux-[^-]#(N/) )
compadd "$@" -- ${${dirs:t}%-*}
}
_arguments -s : \
'-a[Cross compile packages]:architecture:($archs)' \
'-C[Do not remove build directory/autodeps/destdir]' \
'-f[Force building and registering binary packages]' \
'-G[Enable XBPS_USE_GIT_REVS]' \
'-g[Enable building -dbg packages]' \
'-H[Absolute path to hostdir]:hostdir:_files -/' \
'-h[Help]' \
'-I[Ignore required dependencies]' \
'-j[Number of parallel build jobs]:number: ' \
'-L[Disable ASCII colors]' \
'-m[Absolute path to masterdir]:masterdir:_files -/' \
'-N[Disable use of remote repositories]' \
'-o[Set package build options]:options: ' \
'-r[Use alternative local repository]:repo:_files -/' \
'1:target:->target' \
'*::args:->args' && ret=0
case $state in
target)
_values "target" binary-bootstrap bootstrap bootstrap-update \
build chroot clean configure extract fetch install \
list pkg remove remove-autodeps show show-build-deps \
show-deps show-files show-options show-shlib-provides \
show-shlib-requires show-var show-repo-updates \
show-sys-updates update-bulk update-sys zap
ret=0;;
args)
case $words[1] in
build|configure|extract|fetch|install|pkg|show|show-build-deps)
_arguments ':package:_xbps_src_all_packages' && ret=0;;
binary-bootstrap)
_arguments '::architecture:($archs)' && ret=0;;
bootstrap|bootstrap-update|chroot|list|remove-autodepsshow-repo-updates|show-sys-updates|update-bulk|update-sys)
# no further arguments
ret=0;;
clean)
_arguments '::package:_xbps_src_build_packages' && ret=0;;
remove|show-deps|show-files|show-options|show-shlib-provides|show-shlib-requires)
_arguments ':package:_xbps_src_destdir_packages' && ret=0;;
esac;;
esac
return $ret
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment