#compdef ant -value-,ANT_ARGS,-default- # Apache Ant version 1.7.1 local curcontext="$curcontext" state line expl ret=1 typeset -A opt_args local buildfile classpath cp userjars importedfiles target='*:target:->target' targets tmp find_targets() { importedfiles=( $(sed -n "s/ *]* file=[\"']\([^\"']*\)[\"'].*/\1/p" < $1) ) # Tweaked to omit targets beginning with "-" that can't # be invoked from the command line; see zsh-workers/24129. sed -n "s/ *]* name=[\"']\([^-][^\"']*\)[\"'].*/\1/p" $1 if (( $#importedfiles )) ; then ( cd $1:h for file in $importedfiles ; do expanded=( $(echo $file | sed -n "s|\${ant.home}|$ANT_HOME|p") ) if [[ ! "bla$expanded" = "bla" ]]; then file=$expanded fi if [[ -f $file ]]; then find_targets $file fi done ) fi } if [[ $service = *ANT_ARGS* ]]; then compset -q words=( fake "$words[@]" ) (( CURRENT++ )) unset target fi _arguments -C \ '(- *)'{-h,-help,--h,--help}'[display help information]' \ '--noconfig[suppress sourcing of configuration files]' \ '--usejikes[enable use of jikes by default, unless set explicitly in configuration files]' \ '--execdebug[print ant exec line generated by this launch script]' \ '(-p -projecthelp *)'{-p,-projecthelp}'[print project help information]' \ '(- *)-version[display version information]' \ '(- *)-diagnostics[print information helpful to diagnosis or report problems]' \ '(-q -quiet)'{-q,-quiet}'[be extra quiet]' \ '(-v -verbose)'{-v,-verbose}'[be extra verbose]' \ '(-d -debug)'{-d,-debug}'[print debugging information]' \ '(-e -emacs)'{-e,-emacs}'[produce logging information without adornments]' \ '*-lib[specify a path to search for jars and classes]:class path:->classpath' \ '(-l -logfile)'{-l,-logfile}'[use specified file for log]:logfile:_files' \ '-logger[specify the class which is to perform logging]:class:->class' \ '*-listener[add an instance of specified class as a project listener]:class:->class' \ '-noinput[do not allow interactive input]' \ '(-f -file -buildfile -s -find)'{-f,-file,-buildfile}'[use specified build file]:build file:_files -g "*.xml(-.)"' \ '*-D[specify property with value to use]:property:->property' \ '(-k -keep-going)'{-keep-going,-k}'[execute all targets that do not depend on failed target(s)]' \ '-propertyfile[load all properties from specified file with -D properties taking precedence]:property file:_files -g "*.properties(-.)"' \ '-inputhandler[specify class which will handle input requests]:class:->class' \ '(-s -find -f -file -buildfile)'{-s,-find}'[search for specified build file towards the root of filesystem]:build file:(build.xml)' \ '-nice[specify a niceness value for the main thread]:niceness value (default 5):({1..10})' \ '-nouserlib[run ant without using the jar files from ${user.home}/.ant/lib]' \ '-noclasspath[run ant without using CLASSPATH]' \ '-autoproxy[Java1.5+: use the OS proxy settings]' \ "-main[override Ant's normal entry point]:class:->class" \ $target && ret=0 case $state in class) if (( ! $+opt_args[-nouserlib] )); then userjars=( $HOME/.ant/lib/*.jar ) fi if (( ! $+opt_args[-noclasspath] )); then classpath=$CLASSPATH fi cp=( $opt_args[-lib] $userjars $ANT_HOME/lib/*.jar $classpath ) cp=${(j.:.)cp:-' '} _java_class -classpath $cp && ret=0 ;; classpath) compset -P '*:' compset -S ':*' _alternative \ "classpath:$state:_path_files -qS: -g '*.(jar|zip)(-.)'" \ "classpath:$state:_path_files -r': ' -/" && ret=0 ;; property) if compset -P '*='; then _default && ret=0 else _message -e properties 'property name' fi ;; target) if [[ -n $opt_args[(I)(-s|-find)] ]]; then buildfile=( (../)#${(v)opt_args[(I)(-s|-find)]:-build.xml}(N[-1]) ) else buildfile=${(v)opt_args[(I)(-f|-file|-buildfile)]:-build.xml} fi if [[ -f $buildfile ]]; then if zstyle -t ":completion:${curcontext}:targets" call-command; then # Run ant -projecthelp also passing any of -find, -s, -buildfile, -file # or -f options. # Parse output into an array of the format "target:description". # For the array to be set with correct argument boundaries, the entire # set statement needs to be eval'd. On Cygwin, need to kill \r's output # from Java or parsing will fail. eval set -A tmp "${$(_call_program targets "$words[1]" -buildfile $buildfile -projecthelp | while read target desc do # This loop reads ant -projecthelp output from versions 1.3 to 1.6 ln="${target}${desc:+:$desc}" [[ $target = "" ]] && continue # skip blank lines case $ln in (Buildfile:*) buildfile=$desc ;; (Default:target:*) # with version 1.5, target is on the same line default_target="${${desc/target:/}# }" # versions 1.3 and 1.4 with default target on a separate line if [[ -z $default_target ]]; then read junk read default_target junk fi # Output target again indicating its the default one. print -n "'${default_target}:(Default target) ' " ;; (Searching:*|Main:targets:|Subtargets:|BUILD:SUCCESSFUL|Total:time: *) ;; (*) # Return target and description print -n "'$ln' " ;; esac done )//$'\015'}" _describe 'target' tmp && ret=0 else targets=( $(find_targets $buildfile) ) _wanted targets expl target compadd -a targets && ret=0 fi else _message -e targets target fi ;; esac return ret