1
0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-11-19 13:33:52 +01:00
zsh/Completion/Unix/Command/_ant
2005-06-08 16:59:22 +00:00

130 lines
5.4 KiB
Plaintext

#compdef ant -value-,ANT_ARGS,-default-
# Apache Ant version 1.6.5
local curcontext="$curcontext" state line expl ret=1
typeset -A opt_args
local buildfile classpath cp userjars importedfiles target='*:target:->target' targets tmp
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]' \
$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
importedfiles=( $(sed -n "s/ *<import[^>]* file=[\"']\([^\"']*\)[\"'].*/\1/p" < $buildfile) )
targets=( $(sed -n "s/ *<target[^>]* name=[\"']\([^\"']*\)[\"'].*/\1/p" $buildfile) )
(( $#importedfiles )) && targets+=( $(cd $buildfile:h;
sed -n "s/ *<target[^>]* name=[\"']\([^\"']*\)[\"'].*/\1/p" $importedfiles) )
_wanted targets expl target compadd -a targets && ret=0
fi
else
_message -e targets target
fi
;;
esac
return ret