DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=5270>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=5270

Ant task - allow multiple targets





------- Additional Comments From [EMAIL PROTECTED]  2002-04-10 18:37 -------
Good question.  The original would throw a BuildException stating that the 
target '' could not be found.  This exception is thrown by Project.executeTarget
(String).

The patched version would go merrily along its way ignoring the fact that you 
hadn't specified any targets.  It calls Project.executeTargets(Vector) which 
doesn't do any error checking.  I've supplied a patch for Project.java as well 
as Ant.java that does throw a BuildException() if no target(s) are provided.


--- Ant.java.orig       Thu Oct 11 23:58:28 2001
+++ Ant.java    Wed Apr 10 11:57:21 2002
@@ -254,16 +254,40 @@
                 target = newProject.getDefaultTarget();
             }
 
+            Vector targets = new Vector();
+            StringTokenizer tok =
+                new StringTokenizer(target, ",", true);
+            while (tok.hasMoreTokens()) {
+                String token = tok.nextToken().trim();
+
+                //Make sure the target is not empty string
+                if (token.equals("") || token.equals(","))
+                  continue;
+
+                  targets.addElement(token);
+
+                //Make sure that target attribute does not
+                //end in a ,
+                if (tok.hasMoreTokens()) {
+                    token = tok.nextToken();
+                    if (!tok.hasMoreTokens() || !token.equals(",")) {
+                        throw new BuildException( "Syntax Error: Target 
attribute " +
+                                                  "for task \"" + getTaskName
() +
+                                                  "\" ends with a , 
character" );
+                    }
+                }
+            }
+
             // Are we trying to call the target in which we are defined?
             if (newProject.getBaseDir().equals(project.getBaseDir()) &&
                 newProject.getProperty("ant.file").equals(project.getProperty
("ant.file")) &&
                 getOwningTarget() != null &&
-                target.equals(this.getOwningTarget().getName())) { 
+                targets.contains(this.getOwningTarget().getName())) {
 
                 throw new BuildException("ant task calling its own parent 
target");
             }
 
-            newProject.executeTarget(target);
+            newProject.executeTargets(targets);
         } finally {
             // help the gc
             newProject = null;

--- Project.java.orig   Thu Oct 11 23:58:28 2001
+++ Project.java        Wed Apr 10 11:57:15 2002
@@ -556,6 +556,11 @@
     public void executeTargets(Vector targetNames) throws BuildException {
         Throwable error = null;
 
+        if (targetNames == null || targetNames.size() == 0) {
+            String msg = "No target(s) specified";
+            throw new BuildException(msg);
+        }
+
         for (int i = 0; i < targetNames.size(); i++) {
             executeTarget((String)targetNames.elementAt(i));
         }

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to