#compdef wajig

# $Id: _wajig,v 1.1 2005/01/09 06:23:58 clint Exp $

# quarl 2005-01-08 initial version

# local curcontext="$curcontext" state line cmds ret=1

_wajig_commands=(
    'addcdrom:add a CD-ROM to the list of available sources of packages'
    'autoalts:mark the alternative to be auto set (using set priorities)'
    'autoclean:remove superseded deb files from the download cache'
    'autodownload:do an update followed by a download of all updated packages'
    'autoinstall:perform an install without asking questions (non-interactive)'
    'available:list versions of packages available for installation'
    'bug:check reported bugs in package using the Debian Bug Tacker'
    'build:retrieve/unpack sources and build .deb for the named packages'
    'builddepend:retrieve packages required to build listed packages'
    'changelog:retrieve latest changelog for the package'
    'clean:remove all deb files from the download cache'
    'commands:list all the JIG commands and one line descriptions for each'
    'dailyupgrade:perform an update then a dist-upgrade'
    'dependents:list of packages which depend/recommend/suggest the package'
    'describe:one line description of packages (-v and -vv for more detail)'
    'describenew:one line description of new packages'
    'detail:provide a detailed description of package (describe -vv)'
    'detailnew:provide a detailed description of new packages (describe -vv)'
    'distupgrade:upgrade to new distribution (installed and new rqd packages)'
    'docs:equivalent to help with -verbose=2'
    'download:download package files ready for an install'
    'filedownload:download packages listed in file ready for an install'
    'fileinstall:install packages listed in a file'
    'fileremove:remove packages listed in a file'
    'findfile:search for a file within installed packages'
    'findpkg:search for an unofficial Debian package at apt-get.org'
    'fixconfigure:perform dpkg --configure -a (to fix interrupted configure)'
    'fixinstall:perform apt-get -f install (to fix broken dependencies)'
    'fixmissing:perform apt-get --fix-missing upgrade'
    'force:install packages and ignore file overwrites and depends'
    'help:print documentation (detail depends on --verbose)'
    'hold:place listed packages on hold so they are not upgraded'
    'init:initialise or reset the JIG archive files'
    'install:install (or upgrade) one or more packages or .deb files'
    'installr:install package and associated recommended packages'
    'installrs:install package and recommended and suggested packages'
    'installs:install package and associated suggested packages'
    'install/dist:install packages from specified distribution'
    'integrity:check the integrity of installed packages (through checksums)'
    'large:list size of all large (>10MB) installed packages'
    'lastupdate:identify when an update was last performed'
    'list:list the status and description of installed packages'
    'listall:list a one line description of every known package'
    'listalts:list the objects that can have alternatives configured'
    'listcache:list the contents of the download cache'
    'listcommands:list all the JIG commands and one line descriptions for each'
    'listdaemons:list the daemons that JIG can start/stop/restart'
    'listfiles:list the files that are supplied by the named package'
    'listhold:list those packages on hold'
    'listinstalled:List packages (with optional argument substring) installed'
    'listnames:list all known packages or those containing supplied string'
    'listorphans:list libraries not required by any installed package'
    'liststatus:same as list but only prints first two columns, not truncated'
    'listwide:same as list but avoids truncating package names'
    'localdist-upgrade:dist-upgrade using packages already downloaded'
    'localupgrade:upgrade using packages already downloaded, but not any others'
    'move:move packages in the download cache to a local Debian mirror'
    'new:list packages that became available since last update'
    'news:obtain the latest news about the package'
    'newupgrades:list packages newly available for upgrading'
    'nonfree:list installed packages that do not meet the DFSG'
    'orphans:list libraries not required by any installed package'
    'package:generate a .deb file for an installed package'
    'policy:from preferences file show priorities/policy (available)'
    'purge:remove one or more packages and configuration files'
    'purgedepend:purge package and those it depend on and not required by others'
    'purgeorphans:purge orphaned libraries (not required by installed packages)'
    "readme:display the package's README file from /usr/share/doc"
    'recdownload:download package and any it depends on'
    'recommended:install package and associated recommended packages'
    'reconfigure:reconfigure the named installed packages or run gkdebconf'
    'reinstall:reinstall each of the named packages'
    'reload:reload daemon configs, e.g., gdm, apache (see list-daemons)'
    'remove:remove one or more packages (see also purge)'
    'removedepend:remove package and its dependees not required by others'
    'removeorphans Remove orphaned libraries (not required by installed packages)'
    'repackage:generate a .deb file for an installed package'
    'reset:initialise or reset the JIG archive files'
    'restart:stop then start a daemon, e.g., gdm, apache (see list-daemons)'
    'rpm2deb:convert a RedHat .rpm file to a Debian .deb file'
    'rpminstall:install a RedHat .rpm package'
    'rpmtodeb:convert a RedHat .rpm file to a Debian .deb file'
    'search:search for packages containing listed words'
    'searchapt:find local Debian archives suitable for sources.list'
    'setup:configure the sources.list file which locates Debian archives'
    'show:provide a detailed description of package [same as detail]'
    'showdistupgrade:trace the steps that a dist-upgrade would perform'
    'showinstall:trace the steps that an install would perform'
    'showremove:trace the steps that a remove would perform'
    'showupgrade:trace the steps that an upgrade would perform'
    'sizes:print out the size (in K) of all, or listed, installed packages'
    'snapshot:generates list of package=version for all installed packages'
    'source:retrieve and unpack sources for the named packages'
    'start:start a daemon, e.g., gdm, apache (see list-daemons)'
    'status:show the version and available version of packages'
    'statusmatch:show the version and available version of matching packages'
    'statussearch:show the version and available version of matching packages'
    'stop:stop a daemon, e.g., gdm, apache (see list-daemons)'
    'suggested:install package and associated suggested packages'
    'tasksel:run the Gnome task selector to install groups of packages'
    'toupgrade:list packages with newer versions available for upgrading'
    'unhold:remove listed packages from hold so they are again upgraded'
    'unofficial:search for an unofficial Debian package at apt-get.org'
    'update:update the list of down-loadable packages'
    'updatealts:update default alternative for things like x-window-manager'
    'upgrade:upgrade all of the installed packages or just those listed'
    'whatis:a synonym for describe'
    'whichpkg:find the package that supplies the given command or file'
)

_wajig_command() {
    _describe -t commands 'aptitude command' _wajig_commands
}

_wajig_alternatives() {
    _files -W /var/lib/dpkg/alternatives
}

_wajig_services() {
    _files -W /etc/init.d
}

_wajig_subcommand() {
    ((argno = CURRENT-2))
    case ${words[2]:gs/-/} in
        addcdrom) ;;
        autoalts | autoalternatives) ((argno==1)) && _wajig_alternatives ;;
        autoclean) ;;
        autodownload) ;;
        autoinstall) _deb_packages uninstalled ;;
        available) _deb_packages available ;;
        bug | bugs) ((argno==1)) && _deb_packages available ;;
        build) _deb_packages available ;;
        builddepend) _deb_packages available ;;
        changelog) _deb_packages available ;;
        clean) ;;
        dailyupgrade) ;;
        dependents) ((argno==1)) && _deb_packages available ;;
        describe | whatis) _deb_packages available ;;
        describenew) ;;
        detail | details | show) _deb_packages available ;;
        detailnew | newdetail) ;;
        distupgrade) ;;
        doc | docs) ;;
        download) _deb_packages available ;;
        filedownload | downloadfile) ((argno==1)) && _files ;;
        fileinstall | installfile) ((argno==1)) && _files ;;
        fileremove | removefile) ((argno==1)) && _files ;;
        findfile) ((argno==1)) && _files ;;
        findpkg | unofficial) ;; # no completion available
        fixconfigure) ;;
        fixinstall) ;;
        fixmissing) ;;
        force) _deb_packages uninstalled ;;
        geturl) ((argno==1)) && _deb_packages available ;;
        help) ;;
        hold) _deb_packages installed ;;
        init) ;;
        install) _deb_packages uninstalled ; _files -g '*.deb' ;;
        installr | recommended) _deb_packages uninstalled ;;
        installrs) _deb_packages uninstalled ;;
        installs | suggested) _deb_packages uninstalled ;;
        install/*) _deb_packages uninstalled ;;
        integrity) ;;
        large) _deb_packages installed ;;
        lastupdate) ;;
        list | listwide) ;; # no completion available
        listall) ;;
        listalts | listalternatives) ;;
        listcache) ;; # no completion available
        listcommands | commands) ;;
        listdaemons) ;;
        listfiles) ((argno==1)) && _deb_packages installed ;;
        listhold) ;;
        listinstalled) ;; # no completion available
        listnames) ;; # no completion available
        listorphans | orphans) ;;
        liststatus) ;; # no completion available
        localdistupgrade) ;;
        localupgrade) ;;
        move) ;;
        new) ;;
        news) _deb_packages available ;;
        newupgrades) ;;
        nonfree) ;;
        policy) _deb_packages available ;;
        purge) _deb_packages xinstalled ;;
        purgedepend) ((argno==1)) && _deb_packages xinstalled ;;
        purgeorphans) ;;
        readme) _deb_packages installed ;;
        recdownload) _deb_packages available ;;
        reconfigure) _deb_packages installed ;;
        reinstall) _deb_packages installed ;;
        reload) ((argno==1)) && _wajig_services ;;
        remove) _deb_packages installed ;;
        removedepend) _deb_packages installed ;;
        removeorphans) ;;
        repackage | package) ((argno==1)) && _deb_packages installed ;;
        reset) ;;
        restart)  ((argno==1)) && _wajig_services ;;
        rpminstall) ((argno==1)) && _files -g '*.rpm' ;;
        rpmtodeb | rpm2deb) ((argno==1)) && _files -g '*.rpm' ;;
        search) ;; # no completions available
        searchapt) compadd stable testing unstable ;;
        setup | editsources) ;;
        showdistupgrade) ;;
        showinstall) _deb_packages uninstalled ;;
        showremove) _deb_packages installed ;;
        showupgrade) ;;
        size | sizes) _deb_packages installed ;;
        snapshot) ;;
        source)  _deb_packages available ;;
        start) ((argno==1)) && _wajig_services ;;
        status) _deb_packages available ;;
        statusmatch | satussearch) ;; # no completion available
        stop) ((argno==1)) && _wajig_services ;;
        tasksel) ;;
        toupgrade) ;;
        unhold) _deb_packages held ;;
        update) ;;
        updatealts) ((argno==1)) && _wajig_alternatives ;;
        upgrade) _deb_packages installed ;;
        whichpkg) _files ;;
    esac
}

_wajig() {
    _arguments -s \
        '(- 1 *)'{-h,--help}'[print usage message]' \
        '(- 1 *)--version[display version information]' \
        '(-q --quiet)'{-q,--quiet}'[do everything quietly]' \
        '(-s --simulate)'{-s,--simulate}"[trace but don't execute]" \
        '(-t --teaching)'{-t,--teaching}'[trace the sequence of commands performed]' \
        '(-v --verbose)'{-v,--verbose}'[increase (or set) the level of verbosity]' \
        '1: :_wajig_command' \
        '*: :_wajig_subcommand'
}

_wajig $@
