#compdef pkg_deinstall pkg_fetch pkg_glob pkg_sort pkg_which pkgdb portcvsweb portsvnweb portinstall ports_glob portsclean portsdb portupgrade portversion (( $+functions[_freebsd_pkgtools_load_bsd_pkg] )) || _freebsd_pkgtools_load_bsd_pkg() { local service service='' _bsd_pkg } (( $+functions[_freebsd_pkgtools_pkg_names] )) || _freebsd_pkgtools_pkg_names() { local ret=1 l if TMPDIR=/dev/null ASSUME_ALWAYS_YES=1 \ PACKAGESITE=file:///nonexistent \ pkg info -x 'pkg(-devel)?$' >/dev/null 2>&1; then l=( $(pkg info -aq) ) else l=( ${PKG_DBDIR:-/var/db/pkg}/*(/:t) ) fi compadd "$@" - ${l[@]%-*} && ret=0 return ret } (( $+functions[_freebsd_pkgtools_pkgs] )) || _freebsd_pkgtools_pkgs() { if TMPDIR=/dev/null ASSUME_ALWAYS_YES=1 \ PACKAGESITE=file:///nonexistent \ pkg info -x 'pkg(-devel)?$' >/dev/null 2>&1; then l=( $(pkg info -aq) ) else l=( ${PKG_DBDIR:-/var/db/pkg}/*(/:t) ) fi compadd "$@" - ${l[@]} } (( $+functions[_freebsd_pkgtools_ports] )) || _freebsd_pkgtools_ports() { local ret=1 _files "$@" -W ${PORTSDIR:-/usr/ports} && ret=0 return ret } (( $+functions[_freebsd_pkgtools_which_files] )) || _freebsd_pkgtools_which_files() { local ret=1 _files "$@" && ret=0 _command_names -e "$@" && ret=0 return ret } (( $+functions[_freebsd_pkgtools_pkgs_or_ports] )) || _freebsd_pkgtools_pkgs_or_ports() { local ret=1 _freebsd_pkgtools_pkgs && ret=0 if [ X"$service" = X"portinstall" ] || (( $words[(I)-*N*] )); then _freebsd_pkgtools_ports && ret=0 fi return ret } (( $+functions[_freebsd_pkgtools_cvsweb_files] )) || _freebsd_pkgtools_cvsweb_files() { local ret=1 _freebsd_pkgtools_pkgs && ret=0 _freebsd_pkgtools_ports && ret=0 _files && ret=0 return ret } (( $+functions[_freebsd_pkgtools_pkgdb_origin] )) || _freebsd_pkgtools_pkgdb_origin() { local ret=1 if compset -P 1 "*="; then _freebsd_pkgtools_ports -/ && ret=0 else _freebsd_pkgtools_pkgs -qS = && ret=0 fi return ret } (( $+functions[_freebsd_pkgtools_pkgdb_subst] )) || _freebsd_pkgtools_pkgdb_subst() { local ret=1 if compset -p 1; then case $PREFIX in *$IPREFIX[0]*) compset -P 1 "*$IPREFIX[0]" _freebsd_pkgtools_pkgs -S "$IPREFIX[0] " && ret=0 ;; *) _freebsd_pkgtools_pkgs -S "$IPREFIX[0]" && ret=0 ;; esac else compadd -S '/' '' && ret=0 fi return ret } (( $+functions[_freebsd_pkgtools] )) || _freebsd_pkgtools() { local flags case "$service" in pkg_deinstall) flags=( '(* -r -R)-a[all packages]' '(-f)-c[check for overwritten files and do not deinstall it if any]' '-d[remove empty directories created by file cleanup]' '-D[do not execute deinstallation scripts]' '(-c)-f[force revoval]' '-i[request confirmation for each package removal]' '-n[no execute]' '(-r -R)-O[omit sanity check]' '-p[set prefix]:prefix directory:_files -/' '-P[preserve FreeBSD shared libraries (*.so.n)]' '-q[do not read pkgtools.conf]' '(-a -O)-r[deinstall recursively]' '(-a -O)-R[deinstall upward recursively]' '-v[turn on verbose output]' '*-x[exclude packages]:exclude pattern:_freebsd_pkgtools_pkgs' ) _arguments -s \ $flags[@] \ '(-a)*:package to deinstall:_freebsd_pkgtools_pkgs' ;; pkg_fetch) flags=( '-f[force; download a package even if already installed, etc.]' '-q[do not read pkgtools.conf]' '-R[download recursively]' '-v[be verbose]' ) _arguments -s \ $flags[@] \ '*:package to download:_freebsd_pkgtools_pkg_names' ;; pkg_glob) flags=( '(* -r -R)-a[all packages]' '(-r -R)-O[omit sanity check]' '-q[do not read pkgtools.conf]' '(-a -O)-r[list recursively]' '(-a -O)-R[list upward recursively]' '*-x[exclude packages]:exclude pattern:_freebsd_pkgtools_pkgs' ) _arguments -s \ $flags[@] \ '(-a)*:package to list:_freebsd_pkgtools_pkgs' ;; pkg_sort) flags=( '-q[do not read pkgtools.conf]' ) _arguments -s \ $flags[@] ;; pkgdb|pkg_which) flags=( '-a[turn on automatic mode when -F is also specified]' '*-c[pkgname to collate the installed files of]:package name:_freebsd_pkgtools_pkgs' '-f[force to update database regardless of timestamps]' '-F[interactively fix package registry]' '*-o[look up or change a package'\''s origin]:package[=origin]:_freebsd_pkgtools_pkgdb_origin' '*-Q[do not write anything to stdout (specified twice, stderr neither)]' '-q[do not read pkgtools.conf]' '*-s[substitute dependency]:/from/to/:_freebsd_pkgtools_pkgdb_subst' '-u[update packages database]' '-v[be verbose]' ) _arguments -s \ $flags[@] \ '*:file or command:_freebsd_pkgtools_which_files' ;; portcvsweb|portsvnweb) flags=( '-q[do not read pkgtools.conf]' '-v[be verbose]' ) _arguments -s \ $flags[@] \ '*:file or command:_freebsd_pkgtools_cvsweb_files' ;; portsclean) flags=( '-C[clean all the working directories]' '*-D[clean all the unreferenced distfiles; -DD to check for installed ports only]' '-i[be interactive]' '-L[clean orphaned libraries]' '-n[no execute]' '*-P[clean outdated package tarballs; -PP to clean all the package tarballs]' '*-Q[do not write anything to stdout (specified twice, stderr neither)]' '-q[do not read pkgtools.conf]' ) _arguments -s \ $flags[@] ;; ports_glob|portsdb) flags=( '-f[force to update database regardless of timestamps]' '-M[list master ports]' '-q[do not read pkgtools.conf]' '-r[list recursively]' '-R[list upward recursively]' '-u[update binary database]' '-U[update INDEX]' '*-x[exclude ports]:exclude pattern:_freebsd_pkgtools_ports -/' ) _arguments -s \ $flags[@] \ '*:ports to list:_freebsd_pkgtools_ports -/' ;; portinstall|portupgrade) flags=( '(* -r -R)-a[all packages]' '-b[keep backup packages of the old versions'\'']' '-A[run a command after each installation]:command to run after each installation:_command_names' '-B[run a command before each build]:command to run before each build:_command_names' '-c[run "make config-conditional" before everything for all tasks]' '-C[Run "make config" before everything for all tasks]' '-D[distclean before each fetch or build]' '-f[force upgrade even if it is to be a downgrade or just a reinstall]' '-F[fetch only]' '-i[be interactive]' '-k[force upgrade even if some of the requisite ports have failed]' '-l[output result to a file]:save the results as..:_files' '-L[output build/install log to files]:save each port'\''s log with a prefix..:_files' '*-m[specify make(1) after-arguments]:arguments to append to each make(1) command line:' '*-M[specify make(1) before-arguments]:arguments to prepend to each make(1) command line:' '(-y)-n[do not execute any installation or upgrade]' '-N[install a new one when no installed package is found]' '*-o[specify the follwing package'\''s origin]:origin:_files -W ${PORTSDIR\:-/usr/ports} -/' '(-r -R)-O[omit sanity check]' '-p[make package]' '*-P[use packages (specified twice, use packages only)]' '-q[do not read pkgtools.conf]' '(-a -O)-r[do recursively]' '(-a -O)-R[do upward recursively]' '-s[run commands under sudo(8) where needed]' '-S[specify alternative command to sudo(8)]:the alternative to sudo(8):_command_names' '-u[do not preserve old shared libraries]' '-v[be verbose]' '-w[do not clean before each build]' '-W[do not clean after each install]' '*-x[exclude packages]:exclude pattern:_freebsd_pkgtools_pkgs' '(-n)-y[answer yes to all the questions]' ) _arguments -s \ $flags[@] \ '*:package to upgrade or install:_freebsd_pkgtools_pkgs_or_ports' ;; portversion) flags=( '-c[enable command output]' '-C[portupgrade flags for command output]' '-F[display a package full name]' '-h[show help]' #'--ignore-moved[do not read MOVED file]' '-l[specify limit chars]:limit chars:' '-L[specify inverse limit chars]:inverse limit chars:' '-o[display package origin]' '(-r -R)-O[omit sanity check]' '-q[do not read pkgtools.conf]' '-Q[do not display status]' '(-O)-r[check recursively]' '(-O)-R[check upward recursively]' '(-c -C -F --ignore-moved -l -L -O -o -R -r -x -Q)-t[compare the version]' '-v[be verbose]' '*-x[exclude packages]:exclude pattern:_freebsd_pkgtools_pkgs' ) _arguments -s \ $flags[@] \ '*:package to check:_freebsd_pkgtools_pkgs' ;; esac } _freebsd_pkgtools_load_bsd_pkg _freebsd_pkgtools "$@"