summary refs log tree commit diff
path: root/Completion/Unix/Command/_ant
blob: bf70915d7bec8e931c21364b1c1f64d8824f623c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#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

find_targets() {
    importedfiles=( $(sed -n "s/ *<import[^>]* file=[\"']\([^\"']*\)[\"'].*/\1/p" < $1) )
    targets=( $(sed -n "s/ *<target[^>]* name=[\"']\([^\"']*\)[\"'].*/\1/p" $1) )
    if (( $#importedfiles )) ; then
	cd $1:h
    	for file in $importedfiles ; do
	    find_targets $file
	done
    fi
    _wanted targets expl target compadd -a targets && ret=0
}

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
        find_targets $buildfile
      fi
    else
      _message -e targets target
    fi
  ;;
esac

return ret