Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: fix import parsing in Completion/Unix/Command/_ant
- X-seq: zsh-workers 27061
- From: Nicolas Lalevée <nicolas.lalevee@xxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxx
- Subject: PATCH: fix import parsing in Completion/Unix/Command/_ant
- Date: Sat, 27 Jun 2009 19:27:11 +0200
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
Hi,
In our ant build we do some import of some build.xml file which are
relative to the ANT_HOME:
<import file="${ant.home}/../common-build.xml"/>
So first the completion blows off as sed is not able to find the
imported file. See when I write "ant <tab>" :
$ ant find_targets:1: no such file or directory: ${ant.home}/../common-
build.xml
sed: ${ant.home}/../common-build.xml: No such file or directory
find_targets:1: no such file or directory: ${ant.home}/../common-
build.xml
sed: ${ant.home}/../common-build.xml: No such file or directory
So I have fixed it with a little test. And then I made the completion
understand the ant.home property reference.
I think at least the check of the existence of the file should be done
so the completion doesn't break.
For the ant.home, I know I have a particular use case, but I don't
think it will harm the completion script to have that feature.
Here is the patch:
Index: Completion/Unix/Command/_ant
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Unix/Command/_ant,v
retrieving revision 1.18
diff -u -8 -p -r1.18 _ant
--- Completion/Unix/Command/_ant 24 Jan 2009 15:07:21 -0000 1.18
+++ Completion/Unix/Command/_ant 27 Jun 2009 17:03:13 -0000
@@ -7,20 +7,26 @@ 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) )
# Tweaked to omit targets beginning with "-" that can't
# be invoked from the command line; see zsh-workers/24129.
sed -n "s/ *<target[^>]* name=[\"']\([^-][^\"']*\)[\"'].*/\1/p" $1
if (( $#importedfiles )) ; then
- ( cd $1:h
- for file in $importedfiles ; do
- find_targets $file
- done )
+ ( 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
cheers,
Nicolas
Messages sorted by:
Reverse Date,
Date,
Thread,
Author