ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Antoine Levy-Lambert" <anto...@antbuild.com>
Subject Re: [Proposal] adding "keep-going" to ANT.
Date Thu, 26 Jun 2003 20:22:45 GMT
Hi Alexey,
it is possible that ant 1.6 will contain a try-catch feature.
this might make your idea redundant - correct me if I am wrong ?
Antoine
----- Original Message -----
From: "Alexey Solofnenko" <A.Solofnenko@mdl.com>
To: <ant-dev@jakarta.apache.org>
Sent: Thursday, June 26, 2003 10:10 PM
Subject: [Proposal] adding "keep-going" to ANT.


> Hello,
>
>   "keep-going" feature can be very useful, especially in automatic
testing.
> I have experimented with Project.executeTarget() method to implement this
> functionality. It seems like a simple patch. The goal of the modification
is
> to execute all targets that do not depend on failed targets. If you think
> the approach is correct, I can submit a diff patch.
>
> ==============================
> This is the build file I executed (target "b" should be executed even if
> target "a" failed, "main" should not be executed):
> ==============================
>
> <?xml version="1.0"?>
> <project default="main" basedir=".">
>   <target name="a">
>     <echo message="A"/>
>     <fail message="something is wrong"/>
>   </target>
>   <target name="b">
>     <echo message="B"/>
>   </target>
>   <target name="main" depends="a,b">
>     <echo message="main"/>
>   </target>
> </project>
>
>
> ==============================
> Build output:
> ==============================
>
> Buildfile: build.xml
>
> a:
>      [echo] A
> Target 'a' failed.
>
> b:
>      [echo] B
> Cannot execute 'main' - 'a' was not executed.
>
> BUILD FAILED
> D:\tools\apache-ant-1.6alpha\dist\build.xml:5: something is wrong
>
> Total time: 0 seconds
>
> ==============================
> Modified Project.executeTarget() method:
> ==============================
>     public void executeTarget(String targetName) throws BuildException {
>
>         // sanity check ourselves, if we've been asked to build nothing
>         // then we should complain
>
>         if (targetName == null) {
>             String msg = "No target specified";
>             throw new BuildException(msg);
>         }
>
>         // Sort the dependency tree, and run everything from the
>         // beginning until we hit our targetName.
>         // Sorting checks if all the targets (and dependencies)
>         // exist, and if there is any cycle in the dependency
>         // graph.
>         Vector sortedTargets = topoSort(targetName, targets);
>         Set executed=new HashSet();
>         BuildException buildException=null;
>
>         for (Enumeration iter=sortedTargets.elements();
> iter.hasMoreElements();) {
>             Target curtarget = (Target) iter.nextElement();
>             boolean canExecute=true;
>             for (Enumeration dep_iter=curtarget.getDependencies();
> dep_iter.hasMoreElements();) {
>               String dependencyName=((String)dep_iter.nextElement());
>               if (!executed.contains(dependencyName)) {
>                 canExecute=false;
>                 log(curtarget, "Cannot execute '"+curtarget.getName()+"' -
> '"+dependencyName+"' was not executed.", MSG_ERR);
>               }
>             }
>             if (canExecute) {
>               try {
>                 curtarget.performTasks();
>                 executed.add(curtarget.getName());
>               }
>               catch (BuildException ex) {
>                 log(curtarget, "Target '"+curtarget.getName()+"' failed.",
> MSG_ERR);
>                 if (buildException==null) {
>                   buildException=ex;
>                 }
>                 else {
>                   log(curtarget, "Extra error: "+ex.getMessage(),
MSG_ERR);
>                 }
>               }
>             }
>             if (curtarget.getName().equals(targetName)) // very strange
exit
> condition
>               break;
>         }
>         if (buildException!=null)
>           throw buildException;
>     }
>
> - Alexey.
>
> --
> { http://trelony.cjb.net/ } Alexey N. Solofnenko
> Pleasant Hill, CA (GMT-8 usually)
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
> For additional commands, e-mail: dev-help@ant.apache.org
>
>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org


Mime
View raw message