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]