Author: mbenson
Date: Thu Mar 22 07:12:20 2007
New Revision: 521278

URL: http://svn.apache.org/viewvc?view=rev&rev=521278
Log:
Add IgnoreDependenciesExecutor for weird cases when the user wants to run only 
the targets explicitly specified.

Added:
    
ant/core/trunk/src/main/org/apache/tools/ant/helper/IgnoreDependenciesExecutor.java
   (with props)
Modified:
    ant/core/trunk/WHATSNEW
    ant/core/trunk/src/tests/junit/org/apache/tools/ant/ExecutorTest.java

Modified: ant/core/trunk/WHATSNEW
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?view=diff&rev=521278&r1=521277&r2=521278
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Thu Mar 22 07:12:20 2007
@@ -89,7 +89,9 @@
 
 * <junitreport> xsl stylesheets allow setting the title used in <title> and 
<h1> tags by
   using <report><param> element.  Bugzilla 41742.
-  
+
+* Add IgnoreDependenciesExecutor for weird cases when the user wants to run
+  only the targets explicitly specified.
   
 
 Changes from Ant 1.6.5 to Ant 1.7.0

Added: 
ant/core/trunk/src/main/org/apache/tools/ant/helper/IgnoreDependenciesExecutor.java
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/helper/IgnoreDependenciesExecutor.java?view=auto&rev=521278
==============================================================================
--- 
ant/core/trunk/src/main/org/apache/tools/ant/helper/IgnoreDependenciesExecutor.java
 (added)
+++ 
ant/core/trunk/src/main/org/apache/tools/ant/helper/IgnoreDependenciesExecutor.java
 Thu Mar 22 07:12:20 2007
@@ -0,0 +1,70 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.tools.ant.helper;
+
+import java.util.Hashtable;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Executor;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Target;
+
+/**
+ * Target executor implementation that ignores dependencies. Runs each
+ * target by calling <code>target.performTasks()</code> directly. If an
+ * error occurs, behavior is determined by the Project's "keep-going" mode.
+ * To be used when you know what you're doing.
+ *
+ * @since Ant 1.7.1
+ */
+public class IgnoreDependenciesExecutor implements Executor {
+
+    private static final SingleCheckExecutor SUB_EXECUTOR = new 
SingleCheckExecutor();
+
+    /** [EMAIL PROTECTED] */
+    public void executeTargets(Project project, String[] targetNames)
+        throws BuildException {
+        Hashtable targets = project.getTargets();
+        BuildException thrownException = null;
+        for (int i = 0; i < targetNames.length; i++) {
+            try {
+                Target t = (Target) targets.get(targetNames[i]);
+                if (t == null) {
+                  throw new BuildException("Unknown target " + targetNames[i]);
+                }
+                t.performTasks();
+            } catch (BuildException ex) {
+                if (project.isKeepGoingMode()) {
+                    thrownException = ex;
+                } else {
+                    throw ex;
+                }
+            }
+        }
+        if (thrownException != null) {
+            throw thrownException;
+        }
+    }
+
+    /** [EMAIL PROTECTED] */
+    public Executor getSubProjectExecutor() {
+        return SUB_EXECUTOR;
+    }
+
+}

Propchange: 
ant/core/trunk/src/main/org/apache/tools/ant/helper/IgnoreDependenciesExecutor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
ant/core/trunk/src/main/org/apache/tools/ant/helper/IgnoreDependenciesExecutor.java
------------------------------------------------------------------------------
    svn:executable = *

Modified: ant/core/trunk/src/tests/junit/org/apache/tools/ant/ExecutorTest.java
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/junit/org/apache/tools/ant/ExecutorTest.java?view=diff&rev=521278&r1=521277&r2=521278
==============================================================================
--- ant/core/trunk/src/tests/junit/org/apache/tools/ant/ExecutorTest.java 
(original)
+++ ant/core/trunk/src/tests/junit/org/apache/tools/ant/ExecutorTest.java Thu 
Mar 22 07:12:20 2007
@@ -20,18 +20,19 @@
 
 import java.util.Vector;
 
-
 /**
  * Executor tests
  */
 public class ExecutorTest extends BuildFileTest implements BuildListener {
     private static final String SINGLE_CHECK
         = "org.apache.tools.ant.helper.SingleCheckExecutor";
-    private static final Vector targetNames;
+    private static final String IGNORE_DEPS
+        = "org.apache.tools.ant.helper.IgnoreDependenciesExecutor";
+    private static final Vector TARGET_NAMES;
     static {
-        targetNames = new Vector();
-        targetNames.add("a");
-        targetNames.add("b");
+        TARGET_NAMES = new Vector();
+        TARGET_NAMES.add("a");
+        TARGET_NAMES.add("b");
     }
 
     private int targetCount;
@@ -76,52 +77,75 @@
     }
 
     public void testDefaultExecutor() {
-        getProject().executeTargets(targetNames);
-        assertEquals(targetCount, 4);
+        getProject().executeTargets(TARGET_NAMES);
+        assertEquals(4, targetCount);
     }
 
     public void testSingleCheckExecutor() {
-        getProject(SINGLE_CHECK).executeTargets(targetNames);
-        assertEquals(targetCount, 3);
+        getProject(SINGLE_CHECK).executeTargets(TARGET_NAMES);
+        assertEquals(3, targetCount);
+    }
+
+    public void testIgnoreDependenciesExecutor() {
+        getProject(IGNORE_DEPS).executeTargets(TARGET_NAMES);
+        assertEquals(2, targetCount);
     }
 
     public void testDefaultFailure() {
         try {
-            getProject(null, true).executeTargets(targetNames);
+            getProject(null, true).executeTargets(TARGET_NAMES);
             fail("should fail");
         } catch (BuildException e) {
             assertTrue(e.getMessage().equals("failfoo"));
-            assertEquals(targetCount, 1);
+            assertEquals(1, targetCount);
         }
     }
 
     public void testSingleCheckFailure() {
         try {
-            getProject(SINGLE_CHECK, true).executeTargets(targetNames);
+            getProject(SINGLE_CHECK, true).executeTargets(TARGET_NAMES);
             fail("should fail");
         } catch (BuildException e) {
             assertTrue(e.getMessage().equals("failfoo"));
-            assertEquals(targetCount, 1);
+            assertEquals(1, targetCount);
         }
     }
 
+    public void testIgnoreDependenciesFailure() {
+        //no foo failure; foo is never executed as dependencies are ignored!
+        getProject(IGNORE_DEPS, true).executeTargets(TARGET_NAMES);
+    }
+
     public void testKeepGoingDefault() {
         try {
-            getProject(null, true, true).executeTargets(targetNames);
+            getProject(null, true, true).executeTargets(TARGET_NAMES);
             fail("should fail");
         } catch (BuildException e) {
             assertTrue(e.getMessage().equals("failfoo"));
-            assertEquals(targetCount, 2);
+            assertEquals(2, targetCount);
         }
     }
 
     public void testKeepGoingSingleCheck() {
         try {
-            getProject(SINGLE_CHECK, true, true).executeTargets(targetNames);
+            getProject(SINGLE_CHECK, true, true).executeTargets(TARGET_NAMES);
+            fail("should fail");
+        } catch (BuildException e) {
+            assertTrue(e.getMessage().equals("failfoo"));
+            assertEquals(1, targetCount);
+        }
+    }
+
+    public void testKeepGoingIgnoreDependencies() {
+        try {
+            //explicitly add foo for failure
+            Vector targetNames = new Vector(TARGET_NAMES);
+            targetNames.add(0, "foo");
+            getProject(IGNORE_DEPS, true, true).executeTargets(targetNames);
             fail("should fail");
         } catch (BuildException e) {
             assertTrue(e.getMessage().equals("failfoo"));
-            assertEquals(targetCount, 1);
+            assertEquals(3, targetCount);
         }
     }
 



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

Reply via email to